Docker

【Docker】php7.1+php-fpm+alpine3.4を構築(PHP OFFICIAL REPOSITORY利用)

php7.1+php-fpmはphpのオフィシャルリポジトリを利用します。

PHP OFFICIAL REPOSITORY

nginxのオフィシャルリポジトリを使って構築できるかもしれませんが。標準パッケージがphp5のため構築に時間がかかりそうと判断し、phpオフィシャルレポジトリのものを利用しnginxを後でインストールする方法にしました。

phpオフィシャルレポジトリのパッケージにはWebサーバが含まれていないので、apkでnginxを導入して連携します。

※2017/3/14追記

alpine3.7はphp7.1のパッケージが使えてphp-fpmもあったので、php7.1の環境ならalpine3.7を使ったほうが良さそう

導入

ダウンロード

docker pull php:7.1-fpm-alpine

 

起動

docker run -itd -p 80:80 イメージID

 

ログイン

docker exec -it コンテナID sh

 

phpバージョン確認

# php -v

php-fpmバージョン確認

# php-fpm -v

設定

phpの設定関連のディレクトリは、/usr/local/etc/以下になります。

nginx導入・設定

apk add –no-cash nginx

実行ユーザーの設定

/etc/nginx/nginx.conf

user www-data;

php-fpm通信の設定

/etc/nginx/nginx.conf

以下のコメントを外します。

location ~ \.php$ {
root /var/www/html; ←変更
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; ←変更
include fastcgi_params;
}

nginx起動

/etc/init.d/nginx start

エラーが発生

* You are attempting to run an openrc service on a
* system which openrc did not boot.
* You may be inside a chroot or you may have used
* another initialization system to boot this system.
* In this situation, you will get unpredictable results!
* If you really want to do this, issue the following command:
* touch /run/openrc/softlevel
* ERROR: nginx failed to start

touch /run/openrc/softlevelを実行すれば起動が成功しました。

serviceコマンド的なrc-serviceコマンドを導入

apk add openrc

openrc設定

/etc/nginx # sed -i ‘s/#rc_sys=””/rc_sys=”lxc”/g’ /etc/rc.conf
/etc/nginx # echo ‘rc_provide=”loopback net”‘ >> /etc/rc.conf
/etc/nginx # sed -i ‘s/^#\(rc_logger=”YES”\)$/\1/’ /etc/rc.conf
/etc/nginx # sed -i ‘/tty/d’ /etc/inittab
/etc/nginx # sed -i ‘s/hostname $opts/# hostname $opts/g’ /etc/init.d/hostname
/etc/nginx # sed -i ‘s/mount -t tmpfs/# mount -t tmpfs/g’ /lib/rc/sh/init.sh
/etc/nginx # sed -i ‘s/cgroup_add_service /# cgroup_add_service /g’ /lib/rc/sh/o
penrc-run.sh
/etc/nginx # touch /run/openrc/softlevel

※touchは失敗しました

/var/www/htmlにphp.infoを置いて表示できれば成功です。

<?php phpinfo();

まだ不明な点は、alpine linuxを起動すると自動でphp-fpmが起動しているのだが、どこで起動しているのか分からない。