前回のsupervisorを試した結果も踏まえて、Dockerfileを作成しました。作成したものをbuildしてできたイメージをし、コンテナを作るところをやります。
参考サイト
memorycraft
Dockerってなんじゃ?(docker+nginxで複数コンテナにWEBサーバーをたてる)
qiita yujiod
各種ミドルウェアをSupervisorで管理する
Dockerの用意に2分以上かかるだろ~って突っ込みは、玄関を開けてから冷蔵庫を開けて準備するまでに2分以上たってるだろ~という突っ込みと同じなのでスルーです。
では先に簡単に流れを書きます。
まずはファイルを用意します。
環境ですが、OSはcoreosでdockerは1.0.1です。
$ ls -l docker/conf/ -rw-r--r-- 1 core core 1607 Jul 21 10:08 Dockerfile -rw-r--r-- 1 core core 441 Jul 21 10:08 set.conf -rw-r--r-- 1 core core 1226 Jul 21 10:08 wp-config.php
ビルドします。
$ docker build --no-cache --rm -t takeken/wp_data Docker/conf
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE takeken/wp_data latest feebd5fa6ec7 37 seconds ago 469.4 MB
出来上がったイメージからコンテナを動かします。
$ docker run -p 80 -p 22 -p 9001 --name wp_000 -d takeken/wp_data /usr/bin/supervisord c4cd6700804fd1c1b2980c265091c4b2ddcd9b407ba8af6bca00eb7c5f1937e6
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c4cd6700804f takeken/wp_data:latest /usr/bin/supervisord 3 seconds ago Up 2 seconds 0.0.0.0:49185->22/tcp, 0.0.0.0:49186->80/tcp, 0.0.0.0:49187->9001/tcp wp_000
さて、慣れた人ならこのまんまでは実用できないのが分かると思いますが、今後、バーチャルホストのようにドメインもしくはサブドメインを割り当てて、個別にアクセスできるような試みをするつもりなので、今はこれでOKです。
アクセスしてみるとDBにつながっていて、Wordpressのインストールに直行です。
Supervisorにもアクセス可能です。
サーバー建てたら2分でWordpressは成功です。よね?
それぞれのデータですが、まだたけけんのGitは用意できていないので、ブログ内で公開します。
注意としてはこのまま使うと、ユーザー名・パスワードともにtakekenなので、絶対このままでは使わないようにしてください。
おすすめとしては、このままだとセキュリティが甘いx300は過ぎるので、テスト環境で使って、どの記述をどう変えればどうなるのかを検証しながら変えていくのがよろしいかと思います。
Dockerfile
$ cat docker/conf/Dockerfile FROM centos:centos6 MAINTAINER takeken RUN yum install sudo tar passwd openssh openssh-clients openssh-server httpd vim python-setuptools php php-devel php-mysql php-mbstring php-gd mysql-server -y # ssh RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config RUN sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN useradd takeken RUN echo 'takeken:takeken' | chpasswd RUN echo 'takeken ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/takeken # wordpress RUN curl http://ja.wordpress.org/wordpress-3.8.1-ja.tar.gz | tar -xz -C /var/www RUN mv /var/www/html /var/www/html.org RUN mv /var/www/wordpress /var/www/html ADD wp-config.php /var/www/html/wp-config.php # supervisor RUN easy_install supervisor RUN echo_supervisord_conf > /etc/supervisord.conf RUN echo '[include]' >> /etc/supervisord.conf RUN echo 'files = supervisord.d/*.conf' >> /etc/supervisord.conf RUN echo '[inet_http_server]' >> /etc/supervisord.conf RUN echo 'port=0.0.0.0:9001' >> /etc/supervisord.conf RUN echo 'username=takeken' >> /etc/supervisord.conf RUN echo 'password=takeken' >> /etc/supervisord.conf RUN mkdir -p /etc/supervisord.d ADD set.conf /etc/supervisord.d/set.conf #mysql RUN service mysqld restart && \ /usr/bin/mysqladmin -u root password takeken RUN service mysqld restart && \ mysql -uroot -ptakeken -e "CREATE DATABASE wordpress; GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'wordpress'; FLUSH PRIVILEGES;" EXPOSE 22 80 9001 CMD ["/usr/bin/supervisord"]
set.conf
$ cat docker/conf/set.conf [supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D autostart=true autorestart=true [program:httpd] command=/usr/sbin/httpd -D FOREGROUND autostart=true autorestart=true [program:mysqld] command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql autostart=true autorestart=true
wp-config.php これは別々がいいと思うけど・・・
$ cat docker/conf/wp-config.php
<?php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'wordpress');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY', 'M~1q=g~*:(}K=lo0tFovCU|0zbVNF-`,-/?PqZvJfD0Oivq@v}SA#$m+%#|(C,Tv');
define('SECURE_AUTH_KEY', '+ARpu(vBjlf*.s}-Y6ot?B~Xp/e-Ke$%X&+<dNInRCC0Hh/6N}[wb}u3t`kWFFHD');
define('LOGGED_IN_KEY', 'hW/PD~ZS/^Nifw)]_h*_|{na<Q/@}HTuO6SNUSc%S^fYVzZzBGV M@bVUdV2ptOn');
define('NONCE_KEY', '@_{C<UAaYcKg!7tOtv;Ywtvdaz@t?W[6L/a1nMqatC0-6m,N-+_P%~4
d+FR{:6');
define('AUTH_SALT', ')+^ BM!eJ|^Sr>S+TR{_3[|g#}X #O!_s&~#a|.z}e-JBve~~fxGOBma.iYAoJsP');
define('SECURE_AUTH_SALT', 'S-I^C&~<Nep5e<-D}Q7wN*V|:0hz*IDLBwYul_h1kWo?+$VTOnDG&3,~KmjQ}H+Y');
define('LOGGED_IN_SALT', '=D}{]W%{8`7RvrWqs2A]@{}EP2<37B5|mU[SEK.p0bD4?Nf-;AP,La]GG96|5ECo');
define('NONCE_SALT', 'cxJQM=U~#?Z/gU]B+jNe8.keg3= RrF&s_+)UsqO#pQc%;[294YsH7xYRUd9$ik-');
$table_prefix = 'wp_wordpress';
define('WPLANG', 'ja');
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
Dockerにもそこそこ慣れてきましたね。
shefとかpuppetとかまだ使ったことがなかったので、こういう環境がまた新鮮だわ。