Dockerでは1つのプロセスしか動かない
とか言われているのでsupervisordを使用してまとめてプロセスを動かそうとしてるらしい
参考
DockerでApache+PHP+mysql - Intelligent Technology's Technical Blog
SSH でログインできる CentOS の Docker イメージを作ってみる | CUBE SUGAR STORAGE
上記を元に作成
Dockerfile
# centos FROM mshige1979/centos:centos6 MAINTAINER mshige1979 # pacakge install RUN yum install -y \ openssh-server \ httpd \ supervisor # mysql RUN yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm RUN yum install -y mysql-community-* # php RUN yum install -y --enablerepo=remi-php56 \ php \ php-opcache \ php-devel \ php-mbstring \ php-mcrypt \ php-mysqlnd \ php-phpunit-PHPUnit \ php-pecl-xdebug \ php-pecl-xhprof # sshd init RUN sed -ri 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config RUN echo 'root:root' | chpasswd RUN ssh-keygen -t rsa -N "" -f /etc/ssh/ssh_host_rsa_key # php RUN echo '<?php phpinfo(); ?>' > /var/www/html/info.php # mysql init RUN /etc/init.d/mysqld start \ && mysqladmin -u root password 'password' \ && (echo 'grant all privileges on *.* to root@"%" identified by "password" with grant option;' | mysql -u root -ppassword) \ && /etc/init.d/mysqld stop # supervisord init RUN echo '' >> /etc/supervisord.conf && \ echo '[program:httpd]' >> /etc/supervisord.conf && \ echo 'command=/usr/sbin/httpd -D FOREGROUND' >> /etc/supervisord.conf && \ echo '' >> /etc/supervisord.conf && \ echo '[program:sshd]' >> /etc/supervisord.conf && \ echo 'command=/usr/sbin/sshd -D' >> /etc/supervisord.conf && \ echo '' >> /etc/supervisord.conf && \ echo '[program:mysqld]' >> /etc/supervisord.conf && \ echo 'command=/usr/bin/mysqld_safe' >> /etc/supervisord.conf && \ echo '' >> /etc/supervisord.conf # port EXPOSE 22 80 3306 # run CMD ["/usr/bin/supervisord", "-n"]
起動
supervosrpd
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 869f3f87b74d mshige1979/lamp "/usr/bin/supervisord" 2 seconds ago Up 2 seconds 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp, 0.0.0.0:13306->3306/tcp stupefied_mccarthy $
※起動しています
httpd(php)
$ curl -LI http://192.168.99.100:10080/info.php -o /dev/null -w '%{http_code}\n' -s 200 $
※アクセスできる
mysql
$ mysql -uroot -h 192.168.99.100 -P 13306 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.27 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> quit Bye $
sshd
$ ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.99.100 -p 10022 Warning: Permanently added '[192.168.99.100]:10022' (RSA) to the list of known hosts. root@192.168.99.100's password: Last login: Thu Nov 12 12:42:41 2015 from 192.168.99.1 [root@869f3f87b74d ~]# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 /usr/bin/python /usr/bin/supervisord -n 7 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 8 ? S 0:00 /usr/sbin/sshd -D 9 ? S 0:00 /bin/sh /usr/bin/mysqld_safe 55 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 56 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 57 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 58 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 59 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 71 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 72 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 73 ? S 0:00 /usr/sbin/httpd -D FOREGROUND 155 ? Sl 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mys 192 ? Ss 0:00 sshd: root@pts/0 194 pts/0 Ss 0:00 -bash 205 pts/0 R+ 0:00 ps ax [root@869f3f87b74d ~]# [root@869f3f87b74d ~]# exit logout Connection to 192.168.99.100 closed. $
※hostに覚えさせないようにオプションを指定してログインしています、まあdocker execでもいいかもしれませんけど。
所感
結構ここまでいくのにいろいろ試して結構面倒でした。
supervisordを経由して起動できそうなものなら動かせそうです。
デプロイなどではある程度のベースの環境を用意してやるのでcentosなどのベースから毎回1つずつでもいいような気がします。
まあ、もう少し検討してみよう