用Docker来运行PHP7

用Docker容器搭建PHP7的执行环境。

我们决定使用Docker来准备工作环境,将PHP5项目迁移到PHP7。

PHP7+Apache

由于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挂载的目录的权限。

$ 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禁用,要麼在容器啟動時添加 –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

官方的容器映像已经准备好了添加扩展的方法。

我刚才通过运行命令直接执行了,但为了添加扩展,现在我将创建一个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容器注册表中,我将标签设置为asia.gcr.io/my_project_id/php7:0.1。

无事、mbstring。

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

将内容推送到容器注册表

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

上次我們將它上傳到了gcr.io(美國)區域,這次我們試著將其上傳到亞洲區域。
在開發者控制台上的顯示如下。

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

这个「场所」设置在美国和亚洲吧。

使用NGINX或者想要进行详细配置的话需要再努力一点,但是如果只是简单使用的话很容易。

bannerAds