PHP7の実行環境をDockerコンテナで構築します。
PHP5のプロジェクトをPHP7に移行する話しがありました。
作業環境をDockerを利用して準備することにします。
PHP7+apach
Docker hubにオフィシャルのイメージがあるので、なにも考えずに
<?php
phpinfo();
?>
$ docker run -p 8001:80 -d --name my-apache-php-app -v $PWD:/var/www/html php:7.0.2-apache
終了。
ホストで、http://localhost:8001/index.php
と思いきや。。。
Forbidden
You don't have permission to access /index.php on this server.
-vでマウントしたディレクトリのpermissionを調べてみます。
$ docker exec -it 0529f214f6bd /bin/bash
->ここからコンテナ内
# ls -la /var/www
total 4
drwxr-xr-x. 3 root root 17 Jan 7 18:05 .
drwxr-xr-x. 12 root root 4096 Jan 7 23:17 ..
drwxrwxr-x. 2 1000 1000 39 Jan 17 18:29 html
-vでマウントすると、
uid=1000, gid=1000, 775
ってことです。
で、対応策としてはホストのSElinuxをdisableにするか、コンテナ起動時に --privileged=true
を追加するかのどちらかです。
ホストの設定を変更するのは嫌なので、起動オプションを追加します。
docker run -p 8001:80 -d --privileged=true --name my-apache-php-app -v $PWD:/var/www/html php:7.0.2-apache
Extensionの追加
OFFICIALのコンテナイメージにはExtensionを追加する術が用意されています。
先ほどはrunで直接実行しましたが、Extensionを追加するためにDockerfileを作成します。
試しにmbstringをインストールしてみます。
FROM php:7.0.2-apache
RUN apt-get update
RUN docker-php-ext-install mbstring
上記のようにDockerfileを作成し、ビルドします。
$docker build -t asia.gcr.io/my_project_id/php7:0.1 .
[vagrant@host01 php7]$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
asia.gcr.io/my_project_id/php7 0.1 7c1d36229408 41 seconds ago 536.1 MB
php 7.0.2-apache 2f16964f48ba 2 weeks ago 521 MB
gcr.io/my_project_id/centos7base latest c8a648134623 4 weeks ago 196.6 MB
$ docker run -p 8001:80 -d --privileged=true --name php7 -v $PWD:/var/www/html asia.gcr.io/my_project_id/php7:0.1
こちらで設定したGoogle Container Registryに保存するためにタグをasia.gcr.io/my_project_id/php7:0.1
としています。
無事、mbstring。
Container RegistryにPUSH
$ gcloud docker push asia.gcr.io/my_project_id/php7:0.1
前回はgcr.io(アメリカ)リージョンにPUSHしましたが、今回はアジアリージョンにPUSHしてみました。
Developer Consoleではこんな感じになりました。
「場所」がUSとASIAになってますね。
NGINXを使うとか、こまかな設定をしようと思うともう少し頑張らないとですが、さくっと利用するには簡単した。