ひきつづきGoogle Container Engine(GKE)でWordPress + Nginx + PHP-FPMを動かすの第三弾です。
今度はPHP-FPMのコンテナを作る
前回はNginxのコンテナを作成するDockerfileを作成しました。
Google Container Engineに移行した その2 | A-tak-dot-com
前回の記事を少し直しています。GKEのFluentdがログを拾えるようにするために標準出力にNginxのログを出力するようにしているので、前の会を既に見られている方も、もう一度チェックしてみてくださいね。
さて、さっそくですが、PHP-FPMのコンテナを作るDockerfileはこんな感じです。
[bash]
# PHP-FPMコンテナを構築するDockerfile
FROM centos
MAINTAINER A-tak
#時間表示設定
RUN cp -f /usr/share/zoneinfo/Japan /etc/localtime
#PHP-FPMインストール
RUN su –
RUN yum -y install mariadb
RUN yum -y install php
RUN yum -y install php-gd
RUN yum -y install php-mysql
RUN yum -y install php-mbstring
RUN yum -y install php-fpm
#Webのコンテンツの場所用ディレクトリ
RUN mkdir /var/contents/
#PHP アップロードサイズ上限50Mにアップ
RUN sed -i".org" -e "s/upload_max_filesize = 2M/upload_max_filesize = 50M/g" /etc/php.ini
#PHP-FPM 最大子プロセス数指定
RUN sed -i".org" -e "s/pm.max_children = 50/pm.max_children = 18/g" /etc/php-fpm.d/www.conf
RUN sed -i".org" -e "s/pm.max_spare_servers = 35/pm.max_spare_servers = 18/g" /etc/php-fpm.d/www.conf
#PHP-FPM 500回リクエストで再起動
RUN sed -i".org" -e "s/;pm.max_requests = 500/pm.max_requests = 500/g" /etc/php-fpm.d/www.conf
#ログを標準出力に出してGoogle Cloud Logで拾えるようにする
RUN ln -sf /dev/stderr /var/log/php-fpm/error.log
RUN ln -sf /dev/stderr /var/log/php-fpm/www-error.log
#ポート開放
EXPOSE 9000
#PHP-FPM起動
ENTRYPOINT ["php-fpm","-F"]
[/bash]
今回もcentosの公式イメージをベースにPHP-FPMをインストールしています。基本はyumで必要なアプリをインストールして行っています。
「/var/contents」をnfsのマウントポイントにするので空のディレクトリを作っています。ちなみに前回説明しそびれましたがコンテンツは「/var/contents/a-tak.com/html」配下に置くつもりです。
その後は「sed」コマンドで標準のphp-fpmの設定を書き換えて行っています。前回のように設定ファイル丸ごと用意してコピーしてもいいんですけどね。
設定している内容はコメントに書いているとおりで、アップロードのサイズ変えたり、php-fpmの子プロセス数を変更しています。子プロセスの数はVMのメモリに合わせて最大値を設定すべきなんですが、いまいちコンテナ仮想化の場合のメモリの扱いがよくわからない。
php-fpmのコンテナもエラーを標準エラー出力に出すことでFluentdで拾えるようにしています。
Nginxのコンテナからアクセスできるように「EXPOSE」でポートを開放しています。
作成したDockerfileをビルドします。前回とほぼ同じ手順です。
[bash]
#作業ディレクトリ
dockerwork=/Users/a-tak/Dropbox/docker
#プロジェクトID
projectid=my-project999
docker build -t asia.gcr.io/${projectid}/php-fpm:v1 ${dockerwork}/php-fpm
[/bash]
今回も決まったルールでタグをつけます。php-fpmという名前にしました。v1となってますが、これは新しいイメージを作る度にカウントアップしてください。
[bash]
gcloud docker push asia.gcr.io/${projectid}/php-fpm:v1
[/bash]
これまた前回と同様にGoogleのリポジトリにアップします。自分のプロジェクト専用で他には公開されません。お利口な事に二回目以降は差分がアップロードされるためアップロード時間が短縮されます。
次回からはKubernetesの設定をしてコンテナを実際に起動してみます。
Google Container Engineに移行した その4 | A-tak-dot-com