下記の記事で作成した Apache + PHP 環境のコンテナに ssh ログインしたいケースが出てきたので sshd も起動するように変更したときの手順メモ
Dockerfile の変更
Docker は 1 コンテナ 1 プロセスが推奨されていますが、今回のように複数プロセス起動させる場合、supervisord を使うのがいろいろと便利
laravel/webapp/Dockerfile
前回の内容から supervisord、sshd のインストールと初期設定が追加されている
FROM centos:6
MAINTAINER takaya030
RUN yum update -y && \
yum clean all
RUN yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
yum clean all
RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/epel.repo
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && \
yum clean all
RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/remi.repo
RUN yum install -y http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm && \
yum clean all
RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/rpmforge.repo
RUN yum install -y http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm && \
yum clean all
RUN sed -i -e "s/enabled *= *1/enabled=0/g" /etc/yum.repos.d/mysql-community.repo
RUN yum install -y httpd httpd-tools openssh-server openssh-clients sudo which && \
yum clean all
RUN yum install --enablerepo=mysql56-community -y mysql-community-client && \
yum clean all
RUN yum install --enablerepo=epel -y libmcrypt s3cmd supervisor && \
yum clean all
RUN yum install --enablerepo=remi -y gd-last && \
yum clean all
RUN yum install --enablerepo=remi,remi-php55 -y php-pecl-memcached && \
yum clean all
RUN yum install --enablerepo=remi-php55 -y php php-devel php-gd php-mbstring php-mcrypt php-mysqlnd php-pear php-xml php-opcache && \
yum clean all
RUN sed -i -e "s/;date.timezone *=.*$/date.timezone = Asia\/Tokyo/" /etc/php.ini
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -L https://phar.phpunit.de/phpunit.phar > /usr/local/bin/phpunit && \
chmod +x /usr/local/bin/phpunit
RUN sed -i '/pam_loginuid\.so/s/required/optional/' /etc/pam.d/sshd
RUN /sbin/service sshd start
RUN /sbin/service sshd stop
RUN useradd -d /home/laravel -m -s /bin/bash laravel
RUN echo laravel:password | chpasswd
RUN echo 'laravel ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN cp -p /usr/share/zoneinfo/Japan /etc/localtime
ENV WEBAPP_ROOT /webapp
ADD ./httpd.conf /etc/httpd/conf/httpd.conf
ADD ./index.html /webapp/public/index.html
ADD ./phpinfo.php /webapp/public/phpinfo.php
ADD ./supervisord.conf /etc/supervisord.conf
EXPOSE 22 80
CMD ["/usr/bin/supervisord"]
supervisord.conf の追加
laravel/webapp/supervisord.conf
必ず "nodaeman=true" とすること
[supervisord]
http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
;http_port=127.0.0.1:9001 ; (alternately, ip_address:port specifies AF_INET)
;sockchmod=0700 ; AF_UNIX socketmode (AF_INET ignore, default 0700)
;sockchown=nobody.nogroup ; AF_UNIX socket uid.gid owner (AF_INET ignores)
;umask=022 ; (process file creation umask;default 022)
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (logging level;default info; others: debug,warn)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
;nocleanup=true ; (don't clean up tempfiles at start;default false)
;http_username=user ; (default is no username (open system))
;http_password=123 ; (default is no password (open system))
;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)
;user=chrism ; (default is current user, required if root)
;directory=/tmp ; (default is not to cd during start)
;environment=KEY=value ; (key value pairs to add to environment)
[supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.
[program:sshd]
command=/usr/sbin/sshd -D
[program:httpd]
command=/usr/sbin/httpd -DFOREGROUND
docker-compose.yml の変更
larvel/docker-compose.yml
コンテナのポート 22 をホストのポート 2022 にフォワードさせる設定追加
webapp:
build: ./webapp
hostname: webapp
ports:
- "80:80"
- "2022:22"
volumes:
- /workspace/laravel:/webapp
links:
- mysql
- memcached
mysql:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=password
ports:
- "3306:3306"
volumes:
- /mnt/sda1/var/lib/mysql:/var/lib/mysql
memcached:
image: memcached
コンテナの起動
古いコンテナを削除してから起動する
docker@dev:~$ docker rm `docker ps -a -q`
docker@dev:~$ cd /home/docker/laravel
docker@dev:~/laravel$ docker-compose up -d
動作確認
C:\>ssh laravel@192.168.99.100 -p 2022
laravel@192.168.99.100's password:
Last login: Sun Sep 6 10:19:51 2015 from 192.168.99.1
[laravel@webapp ~]$ php --version
PHP 5.5.29 (cli) (built: Sep 3 2015 11:00:33)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies