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

由上图可知,将 docker 内的 nginx 容器80端口直接暴露给wsl,再将wsl的ip地址映射到windows下的hosts文件内去即可实现宿主机访问docker.
而两个不同版本的php容器则是创建时将端口隐藏,在创建 nginx 容器时,将两个 php 容器与之关联。才实现的跨容器通信
在实现部署过程前,确保 docker desktop 已安装,下面来实现部署过程:
下载镜像
nginx
docker pull nginx
php8.0-fpm
docker pull bitnami/php-fpm:8.0.9
php7.1-fpm
docker pull bitnami/php-fpm:7.1
创建容器
php8
docker run -di --name php8 -v /home/df/docker/www:/var/www:rw bitnami/php-fpm:8.0.9
php7
docker run -di --name php7 -v /home/df/docker/www:/var/www:rw bitnami/php-fpm:7.1
nginx
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:,替换为: 容器名加端口号。
