LoginSignup
13
17

More than 5 years have passed since last update.

DockerでPHP7

Posted at

PHP7の実行環境をDockerコンテナで構築します。

PHP5のプロジェクトをPHP7に移行する話しがありました。
作業環境をDockerを利用して準備することにします。

PHP7+apach

Docker hubにオフィシャルのイメージがあるので、なにも考えずに

index.php
<?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

もう一度アクセスしてみます。
スクリーンショット 2016-01-23 15.49.55.png

Extensionの追加

OFFICIALのコンテナイメージにはExtensionを追加する術が用意されています。

先ほどはrunで直接実行しましたが、Extensionを追加するためにDockerfileを作成します。
試しにmbstringをインストールしてみます。

Dockerfile
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。

スクリーンショット 2016-01-23 16.27.19.png

Container RegistryにPUSH

$ gcloud docker push asia.gcr.io/my_project_id/php7:0.1

前回はgcr.io(アメリカ)リージョンにPUSHしましたが、今回はアジアリージョンにPUSHしてみました。
Developer Consoleではこんな感じになりました。

スクリーンショット 2016-01-23 16.57.27.png

「場所」がUSとASIAになってますね。

NGINXを使うとか、こまかな設定をしようと思うともう少し頑張らないとですが、さくっと利用するには簡単した。

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17