docker 的好处在于开箱即用。不需要在你的系统环境中安装各种依赖,而各个软件开发者已将这些软件打包到”阉割”版的 linux 中,这种称为镜像。
假设在 linux 下要同时跑两个不同 php 版本的项目,但问题就来了。如果同时在系统里安装多个版本php。要考虑到兼容性的同时和版本间的切换。如果用 docker 来创建不同 php 版本的容器,而这些容器能达到互不干扰。这就体现了docker 的优势。docker还能将现有容器进行打包,发布到你的布署服务器上。节约了布署时间。

docker搭建php nginx环境 - 图1
由上图可知,将 docker 内的 nginx 容器80端口直接暴露给wsl,再将wsl的ip地址映射到windows下的hosts文件内去即可实现宿主机访问docker.
而两个不同版本的php容器则是创建时将端口隐藏,在创建 nginx 容器时,将两个 php 容器与之关联。才实现的跨容器通信

在实现部署过程前,确保 docker desktop 已安装,下面来实现部署过程:

下载镜像

  • nginx

    1. docker pull nginx
  • php8.0-fpm

    1. docker pull bitnami/php-fpm:8.0.9
  • php7.1-fpm

    1. docker pull bitnami/php-fpm:7.1

创建容器

  • php8

    1. docker run -di --name php8 -v /home/df/docker/www:/var/www:rw bitnami/php-fpm:8.0.9
  • php7

    1. docker run -di --name php7 -v /home/df/docker/www:/var/www:rw bitnami/php-fpm:7.1
  • nginx

    1. docker run -di --name nginx -p 80:80 -v /home/df/docker/www:/var/www:ro -v /home/df/docker/nginx/conf.d:/etc/nginx/conf.d:ro --link php7 --link php8 nginx

    命令解释:

  • -di 以守方式创建容器

  • --name 容器名
  • -p 端口映射
  • -v 宿主机与 docker 目录映射
  • --link 容器间建立关联

这也是最后创建 nginx 容器的原因。目的是让它和两个 php 容器进行关联

nginx配置文件修改:
原来为:
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
修改为:
fastcgi_pass php7:9000;
去掉unix:,替换为: 容器名加端口号。