Docke如何配置Nginx和PHP
一、创建桥接网络
想要Nginx和PHP通信的话。新版本,需要使用桥接网络。
docker network create web-net
docker network的常用命令如下:
connect:将容器加入到指定网络中;
create:创建网络;
disconnect:将容器中网络中移除;
inspect:查看指定网络的详情;
ls:列出所有网络;
rm:删除指定网络;
二、PHP的部署
-
搜索php镜像
docker search php
实例
[root@localhost ~]# docker search php INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/php While designed for web development, the PH... 5392 [OK] ... docker.io docker.io/bitnami/phpmyadmin Bitnami Docker Image for phpMyAdmin 20 [OK] docker.io docker.io/phpdockerio/php72-fpm PHP 7.2 FPM base container for PHPDocker.io. 20 [OK] docker.io docker.io/bitnami/phpbb Bitnami Docker Image for phpBB 16 [OK] docker.io docker.io/phpdockerio/php56-fpm PHP 5.6 FPM base container for PHPDocker.io 16 [OK] docker.io docker.io/phpdockerio/php7-fpm PHP 7 FPM base container for PHPDocker.io. 15 [OK] ...
需要使用
-fpm
结尾的php镜像。这里选择的是php72-fpm
-
拉取镜像
docker pull phpdockerio/php72-fpm
实例:
root@localhost ~]# docker pull phpdockerio/php72-fpm Using default tag: latest Trying to pull repository docker.io/phpdockerio/php72-fpm ... latest: Pulling from docker.io/phpdockerio/php72-fpm 7595c8c21622: Pull complete d13af8ca898f: Pull complete 70799171ddba: Pull complete b6c12202c5ef: Pull complete f4791a7b36d8: Pull complete 91077145dd92: Pull complete 7c27716a1667: Pull complete a82735fb4433: Pull complete Digest: sha256:5a0eaa3e80263a1a77c83ba0542b1520bcb6529b951d741bfbcefc18e0516d0c Status: Downloaded newer image for docker.io/phpdockerio/php72-fpm:latest
-
创建容器
docker run -d --name myweb -v /www/web:/web --privileged=true --network web-net phpdockerio/php72-fpm
-v
目录映射,当前系统下的/www/web
,映射到容器下的/web
目录下。
--privileged=true
应用容器 获取宿主机root权限
【共享文件系统详情参见目录映射的官方文档】
-d
后台运行容器
--network web-net
使用web-net
网络,与nginx
保持一致的网络。实例:
[root@localhost web]# docker run -d --name myweb -v /www/web:/web --privileged=true --network web-net phpdockerio/php72-fpm 321e22d017602022bcc232bb9a7d4331b31787ae93630934f012fcd616bad46c [root@localhost web]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 321e22d01760 phpdockerio/php72-fpm "/bin/sh -c /usr/b..." 23 seconds ago Up 22 seconds 9000/tcp myweb 5823a87b236e nginx "/docker-entrypoin..." 42 minutes ago Up 33 minutes 0.0.0.0:80->80/tcp jovial_engelbart
这里创建了名称为
myweb
的php的容器。
三、Nginx部署
-
创建Nginx配置文件
mkdir -p /www/conf/conf.d
-
写入配置信息
在该目录下添加/www/conf/conf.d/default.conf
文件,写入web的配置信息,内容如下:server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm index.php; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { fastcgi_pass myweb:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /web/$fastcgi_script_name; include fastcgi_params; } }
myweb:9000 表示使用
myweb
容器的9000
端口。
/web/
是php 文件的存储路径,映射到本地的/www/web
目录。 -
启动
Nginx
容器# 1.拉取容器 docker pull nginx # 2.启动容器 docker run -d -p 80:80 --network web-net --privileged=true -v /www/web:/usr/share/nginx/html -v /www/conf/conf.d:/etc/nginx/conf.d nginx
-p 80:80
端口映射,把宿主机的80
映射到容器的80
端口。
/www/web
是本地html
文件的存储目录,/usr/share/nginx/html
是容器内html
文件的存储目录
/www/conf/conf.d
是本地nginx
配置文件的存储目录,/etc/nginx/conf.d
是容器内nginx
配置文件的存储目录
--network web-net
是同一个网络,保证Nginx
能和php通信。实例:
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos httpd 7e03de04b894 3 days ago 255 MB docker.io/mysql latest e3fcc9e1cc04 12 days ago 544 MB docker.io/php latest 960551db44e4 12 days ago 405 MB docker.io/nginx latest 8cf1bfb43ff5 13 days ago 132 MB docker.io/redis latest 50541622f4f1 13 days ago 104 MB docker.io/centos latest 831691599b88 6 weeks ago 215 MB [root@localhost ~]# docker run -d -p 80:80 --network web-net --privileged=true -v /www/web:/usr/share/nginx/html -v /www/conf/conf.d:/etc/nginx/conf.d nginx 5823a87b236e112f8adea15193276042a08a533d387d2c0677dc1bfc6e503616 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5823a87b236e nginx "/docker-entrypoin..." 16 seconds ago Up 16 seconds 0.0.0.0:80->80/tcp jovial_engelbart c0a481658a25 php "docker-php-entryp..." 10 minutes ago Up 10 minutes myweb
-
访问
在/www/web/
的目录下,新建index.php
,写入以下的内容<?php echo phpinfo(); ?>
然后,访问,即可看到php的相关信息