Docker && PHP #2 多容器运行 Apache + PHP

Docker & K8S , PHP363 字

我们来继续利用 Docker 搭建 PHP,目前主流的 PHP 运行模式还是基于 FPM,那么在这节中,我们来使用 Dcoker 搭建 PHP-FPM。

首先是下载镜像。

$ docker pull php:7.2.0-fpm-alpine3.6

$ php docker image ls | grep php
php           7.2-cli               dfdb1713d26a   23 months ago   365MB
php           7.2-cli-alpine3.6     27bfb4b1f223   4 years ago     74.1MB
php           7.2.0-fpm-alpine3.6   da8c99d32f95   4 years ago     75.4MB

其体积只有 76M,我们在运行容器时候可以使用 -d 让容器在后台运行。

$ docker run -d --rm -p 9000:9000 --name fpm-7.2 php:7.2.0-fpm-alpine3.6
0ea75f025c557b9cd4878a38219e5fa581ae66478ec321b91eec879ecf144fed
$ php docker ps | grep php
0ea75f025c55   php:7.2.0-fpm-alpine3.6   "docker-php-entrypoi…"   6 seconds ago   Up 6 seconds   0.0.0.0:9000->9000/tcp              fpm-7.2

接下来,我们安装 apache

# 拉取镜像
$ docker pull httpd:2.4-alpine

# 运行容器
docker run -d -p 80:80 --rm --name httpd-2.4 -v /home/maksim/src/php/:/usr/local/apache2/htdocs/ httpd:2.4-alpine

我们还是利用上一次我们编写的 Hello Docker! 脚本来进行演示,-v 可以将我们的本地目录挂在到 apache 容器中,

接下来,我们将 apache 的配置文件拷贝出来。

# . 代表当前目录,你可以设置成自己想要的目录
# 我的当前目录是 /home/maksim/src/conf/
$ docker cp httpd-2.4:/usr/local/apache2/conf/httpd.conf .
$ ls
httpd.conf

我们可以看到 httpd.conf 这样就被复制出来了,然后我们对其进行修改,支持 fpm。

# 将这三个模块加载放开

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

然后就是 docker 之间的通讯,如果没有指定 docker 容器的网络,默认情况下两个容器之间是在一个虚拟网络下,我们可以在两个容器之间通过虚拟 IP 进行通讯。

$ docker inspect fpm-7.2
...
"IPAddress": "172.17.0.3",
...

通过 inspect 命令我们可以查看 docker 容器的详细信息,我们将 apache 的代理设置为 172.17.0.3。

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/usr/local/apache2/htdocs"
    ServerName localhost
    <Directory "/usr/local/apache2/htdocs">
        Options None
        Require all granted
    </Directory>
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.17.0.4:9000/php/$1
</VirtualHost>

现在准备工作都已经结束了,我们开始重新开启容器。

# 停止当前容器
$ docker stop fpm-7.2 && docker stop httpd-2.4

# 启动 apache
docker run -d -p 80:80 --name httpd-2.4  -v /home/maksim/src/php/:/usr/local/apache2/htdocs/ -v /home/maksim/src/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf httpd:2.4-alpine

# 启动 fpm
docker run -d -p 9000:9000 --name fpm-2.4 -v /home/maksim/src/php/:/php php:7.2.0-fpm-alpine3.6

至此我们就可以访问我们的应用程序了,如果启动后无法解析 php 文件,那么极有可能是 IP 发生了变更,我们可以再次查看 IP。

$ curl localhost/index.php
Hello Docker!
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见