Docker入門 Immutable Infrastructureを実現するを読んでおくと、理解が早いかもしれません。電子書籍だとタブレット一つで沢山持ち歩けるので便利ですよねd(^ー゜*)
概要
ココでは、ubuntu で、supervisorを用いて、nginx + php-fpm + postgersql を一つのdockerコンテナで、起動する方法を残します。ついでにsshでログインできるようにもしておきます。
Postgresqlは、imageを作成する際には、/var/share/pgsqlがVOLUMEマウントされていない状態なので、あえてここでDBの初期化等行っていません。HOST上の(永続化データ)を復元してから起動する想定になっています。
なので、事前にpostgresql9.3のDBをどちらかで作成してHOST側で /data/docker-share/webapp/pgsql 以下に配備しなければ、このコンテナを起動した際に、コンテナにsshして、supervisorctl status するとpostgresqlがFAILDとなっています。
この辺り、運用との絡みも出てくるので、ココでは触れません。
postgresqlのユーザIDは、apt-get install する際に100から順にインクリメントされた値となるようで、HOST側でchownしてもダメかも。また、Dockerfileではまだマウントされていないので、chownできない。
まだまだ、課題がのこっていそう。
環境
| 項目 | 内容 | 
|---|---|
| OS | Ubuntu 14.04.3 LTS | 
| middle ware | nginx/1.4.6 (Ubuntu) PHP 5.5.9-1ubuntu4.11 postgres (PostgreSQL) 9.3.9 ssh  | 
| docker | version 1.5.0 | 
| ボリューム共有 | HOST: /data/docker-share/webapp/ DOCKER: /var/share/  | 
ファイル構成
[tvoncmeta {animated: “fast”} ] ./
- Dockerfile
 - setfiles/
- default
 - fastcgi.conf
 - supervisor/
- cron.conf
 - nginx.conf
 - pgsql.conf
 - php.conf
 - ssh.conf
 
 
 
[/tvoncmeta]
手順概要
- Dockerfileを作成する
 - nginxの設定ファイルを作成する
 - php-fpmの設定ファイルを作成する
 - nginxのsupervisorのconfファイルを作成する
 - cronのsupervisorのconfファイルを作成する
 - php-fpmのsupervisorのconfファイルを作成する
 - postgresqlのsupervisorのconfファイルを作成する
 - sshのsupervisorのconfファイルを作成する
 - docker buildする
 - docker run して確認する
 
詳細手順
- Dockerfileを作成する
 - nginxの設定ファイルを作成する
 - php-fpmの設定ファイルを作成する
 - nginxのsupervisorのconfファイルを作成する
 - cronのsupervisorのconfファイルを作成する
 - php-fpmのsupervisorのconfファイルを作成する
 - postgresqlのsupervisorのconfファイルを作成する
 - sshのsupervisorのconfファイルを作成する
 - docker buildする
 - docker run して確認する
 
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72  | 
						FROM ubuntu RUN ln -sf /usr/share/zoneinfo/Japan /etc/localtime RUN apt-get update -y RUN apt-get update --fix-missing RUN apt-get install -y \          bash \          git \          whois RUN apt-get install -y \          php5 \          php5-gd \          php5-pgsql \          php5-fpm \          nginx RUN apt-get install -y \          postgresql \          postgresql-contrib RUN apt-get install -y \          supervisor \          ssh \          cron RUN git config --global user.name "gitprep" RUN git config --global user.email "user1@localhost" # suvervisor RUN sed -i \         -e 's/\/var\/log\/supervisor/\/var\/share\/logs/' \         /etc/supervisor/supervisord.conf # ssh RUN mkdir -p /var/run/sshd RUN useradd user1 RUN p=`echo user1 | mkpasswd -s` \   ; sed -i \     -e "s/user1:\!:/user1:${p}:/" \     /etc/shadow RUN echo 'user1 ALL=(ALL:ALL) ALL' > /etc/sudoers.d/user1 \   ; chmod 400 /etc/sudoers.d/user1 RUN sed -i \         -e 's/PermitRootLogin without-password/PermitRootLogin yes/' \         /etc/ssh/sshd_config # Nginx php-fpm ADD ./setfiles/default      /etc/nginx/sites-enabled/default ADD ./setfiles/fastcgi.conf /etc/nginx/conf.d/fastcgi.conf RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN mkdir -p /var/share RUN sed -i \         -e 's/^listen = \/var\/run\/php5-fpm\.sock/listen = 127.0.0.1:9000/' \         /etc/php5/fpm/pool.d/www.conf # PostgreSQL RUN sed -i \         -e 's/# USER\tGROUP\tVERSION\tCLUSTER\tDATABASE/postgres\tpostgres\t9.3\tmain\tpostgres/' \         /etc/postgresql-common/user_clusters RUN sed -i \         -e 's/local *all *postgres *peer/local\tall\tpostgres\ttrust/' \         -e 's/local *all *all *peer/local\tall\tall\ttrust/' \         -e 's/host *all *all *127.0.0.1\/32 *md5/host\tall\tall\t127.0.0.1\/32\ttrust/' \         /etc/postgresql/9.3/main/pg_hba.conf RUN sed -i \         -e "s/^data_directory = '\/var\/lib\/postgresql\/9.3\/main'/data_directory = '\/var\/share\/pgsql'/" \         /etc/postgresql/9.3/main/postgresql.conf ADD ./setfiles/supervisor/ssh.conf   /etc/supervisor/conf.d/ ADD ./setfiles/supervisor/cron.conf  /etc/supervisor/conf.d/ ADD ./setfiles/supervisor/nginx.conf /etc/supervisor/conf.d/ ADD ./setfiles/supervisor/php.conf   /etc/supervisor/conf.d/ ADD ./setfiles/supervisor/postgresql.conf /etc/supervisor/conf.d/ EXPOSE 80 ENTRYPOINT /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						# vi ./setfiles/default server {   listen   80;   server_name default_server;   root   /var/share/html;   index  index.php index.html index.htm;   location ~ \.php$ {     fastcgi_pass    127.0.0.1:9000;     fastcgi_index   index.php;     fastcgi_param   SCRIPT_FILENAME /var/share/html$fastcgi_script_name;     include         fastcgi_params;   } }  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						# vi ./setfiles/fastcgi.conf --- setfiles/fastcgi.conf fastcgi_intercept_errors        on; fastcgi_ignore_client_abort     off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; ---  | 
					
| 
					 1 2 3 4 5 6 7 8  | 
						# vi ./setfiles/supervisor/nginx.conf [program:nginx] command=/usr/sbin/nginx autorestart=true logfile_maxbytes=50MB logfile_backup=10 stdout_logfile=/var/share/logs/%(program_name)s.log stderr_logfile=/var/share/logs/%(program_name)s.log  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						# vi ./setfiles/supervisor/cron.conf [program:cron] command = /usr/sbin/cron -f -L 8 startsecs = 5 stopwaitsecs = 3600 stopasgroup = false killasgroup = true logfile_maxbytes=50MB logfile_backup=10 stdout_logfile=/var/share/logs/%(program_name)s.log stderr_logfile=/var/share/logs/%(program_name)s.log  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						# vi ./setfiles/supervisor/php.conf [program:php5-fpm] command=/usr/sbin/php5-fpm --nodaemonize user=root autostart=true autorestart=true redirect_stderr=true exitcodes=0 logfile_maxbytes=50MB logfile_backup=10 stdout_logfile=/var/share/logs/%(program_name)s.log stderr_logfile=/var/share/logs/%(program_name)s.log  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						# vi ./setfiles/superovisor/postgresql.conf [program:postgresql] user=postgres command=/usr/lib/postgresql/9.3/bin/postgres --config-file=/etc/postgresql/9.3/main/postgresql.conf process_name=%(program_name)s autostart=true autorestart=true redirect_stderr=true stopsignal=INT logfile_maxbytes=50MB logfile_backup=10 stdout_logfile=/var/share/logs/%(program_name)s.log stderr_logfile=/var/share/logs/%(program_name)s.log  | 
					
| 
					 1 2 3 4 5 6 7  | 
						# vi ./setfiles/supervisor/ssh.conf [program:sshd] command = /usr/sbin/sshd -D logfile_maxbytes=50MB logfile_backup=10 stdout_logfile=/var/share/logs/%(program_name)s.log stderr_logfile=/var/share/logs/%(program_name)s.log  | 
					
| 
					 1 2 3 4  | 
						# mkdir -p /data/docker-share/webapp/logs # mkdir -p /data/docker-share/webapp/html # mkdir -p /data/docker-share/webapp/pgsql # docker build -t webapp:v1.0 .  | 
					
htmlファイルが無ければ
| 
					 1 2  | 
						# echo '< ?php phpinfo() ?>' > /data/docker-share/webapp/html/index.php # chown www-data:www-data /data/docker-share/webapp/html/index.php  | 
					
postgresql9.3のデータベースのバックアップを戻しておく
| 
					 1 2 3  | 
						# chown postgres:postgres /data/docker-share/webapp/pgsql # cd /data/docker-share/webapp/pgsql # bzip2 -dc path/backup.tar.bz2 | tar xpf -  | 
					
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17  | 
						# docker run \   -d \   --privileged \   -p 80:80 \   -p 1022:22 \   --name webapp \   -v /data/docker-share/webapp:/var/share:rw \   webapp:v1.0 # docker ps # docker logs <docker -id> # ssh -p 1022 user1@localhost % sudo su # supervisorctl status <supervisor のconfigや環境をごにょごにょしたら> ← アカンやつです。 # supervisorctl reload </supervisor></docker>  | 
					
雑記
「君は「これまで」と「これから」を心配しすぎなんです。
言うでしょう?
昨日とは過去のもの、
明日とは未知のもの、
今日の日はもうけもの。
それは天の贈り物。」
@カンフーパンダ ウーグウェイ導師
The clock is running. Make the most of today.
Time waits for no man.
Yesterday is history.
Tomorrow is a mystery.
Today is a gift.
That’s why it is called the present.
@Alice Morse Earle 「Sun Dials and Roses of Yesterday: Garden Delights.」
