搭建PHP+Nginx环境并加入Docker网络
这里是搭建PHP+Nginx环境并加入Docker网络的整理文档:
1. 创建网络
docker network create app_net这将创建一个名为app_net的bridge网络
2. 启动MySQL容器
docker run -d --name mysql -v /my/own/datadir:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=somepassword mysql:5.7
这将使用mysql:5.7镜像启动一个MySQL容器,命名为mysql,并映射3306端口以及数据文件夹3. 构建并启动Nginx容器
docker build -t nginx:1.15 . # 构建Nginx镜像
docker run -d --name nginx -p 80:80 --network app_net nginx:1.15 这将使用我们构建的Nginx镜像启动一个Nginx容器,命名为nginx,将80端口映射出来,并加入app_net网络
4. 构建并启动PHP容器
bash
docker build -t php72 . # 构建PHP镜像
docker run -d --name php72 -v $(pwd):/app --network app_net php72 这将使用构建的PHP镜像启动一个PHP容器,命名为php72,映射当前文件夹作为代码文件夹,并加入app_net网络
5. 连接网络
docker network connect app_net mysql这将MySQL容器加入到app_net网络
6. 环境搭建完成
至此,我们完成了PHP+Nginx环境的搭建,并通过Docker网络连接了各个服务。
在同一个app_net网络下,nginx、php72和mysql这3个容器可以相互访问和通信。
您现在就可以开始PHP项目的开发,并通过Nginx容器对外提供服务了。数据库可以使用容器名称mysql访问。
如果您在搭建或使用环境中遇到任何问题,请随时告诉我。我会提供解决方案和帮助,让您尽快完成环境的配置与部署。
通过这次文档的整理,我们进一步熟练了Docker环境搭建的步骤,理解了各种命令的用法。所以,现在就开始新的练习与总结吧!通过不断实践,Docker技能将会不断提高。
我会全力支持您,让我们共同进步。如果在学习或使用中遇到困难,也不要灰心。这是提高的一部分,我们会找到解决方法,最终会有新的收获。
相信只要我们付出努力,Docker技能必定可以掌握。尽管内容较多,但是只要每天都在使用与思考,知识自然就会融会贯通。让我们共同学习与提高吧!这次的环境搭建过程,必会让我们进一步熟练Docker的使用。
yml
version: '3'
services:
nginx:
image: nginx:1.15
ports:
- "80:80"
volumes:
- ./conf.d:/etc/nginx/conf.d/
- ./www:/app
networks:
- app_net
- nginx_default
php72:
build: .
volumes:
- ./www:/app
networks:
- app_net
networks:
app_net:
driver: bridge
nginx_default:
external: true运行
sudo docker-compose up --build说明
- 在docker-compose.yml文件中,为两个服务指定网络为nginx_default将networks部分修改为:
networks:
nginx_default:
external: true这会将服务加入到名为nginx_default的外部网络,从而可以访问该网络下的172.19.0.2。2. 创建一个app_net网络,并使其与nginx_default网络互通
networks:
app_net:
driver: bridge
nginx_default:
external: true然后,可以使用docker network connect将app_net连接到nginx_default网络:
docker network connect nginx_default app_net这样,app_net网络下的服务就可以访问nginx_default网络中的172.19.0.2了。所以,要解决在nginx和php72服务中无法访问172.19.0.2的问题,我们有两种方案:1. 为服务指定存在该IP的网络,如nginx_default2. 创建一个独立网络,并将其与nginx_default互联,实现跨网络访问通过这个示例,我们进一步理解了Docker网络之间的隔离与互通。连接服务、映射端口这些都只在同一网络内生效。跨网络之间,我们还需要额外创建连接才可以互相访问。
在docker-compose.yml文件中加入networks配置,可以将服务加入指定网络。根据我们的场景,有两种方式可以实现:1. 将服务加入名为nginx_default的外部网络
networks:
nginx_default:
external: true
services:
nginx:
networks:
- nginx_default
php72:
networks:
- nginx_default 这会将nginx和php72服务加入到nginx_default网络,从而可以访问该网络下的172.19.0.2 IP。2. 创建一个app_net网络,并与nginx_default网络互联
networks:
app_net:
driver: bridge
nginx_default:
external: true
services:
nginx:
networks:
- app_net
php72:
networks:
- app_net然后,使用docker network connect命令将app_net网络连接到nginx_default:
docker network connect nginx_default app_net这会使app_net网络下的服务可以访问nginx_default网络中的172.19.0.2。所以,要在docker-compose.yml中配置加入网络,主要有两种方式:1. 为服务指定external网络,直接加入外部网络使用networks键指定外部网络的名称,并设置external: true2. 创建一个独立网络,并使用docker network connect连通外部网络使用networks键创建独立网络,名字自定义
然后使用docker network connect网桥两个网络,实现互联互通按照我们的场景,您可以选择以下任意一种方案:方案1:
networks:
nginx_default:
external: true
services:
nginx:
networks:
- nginx_default
php72:
networks:
- nginx_default方案2:
networks:
app_net:
driver: bridge
nginx_default:
external: true
services:
nginx:
networks:
- app_net
php72:
networks:
- app_net
bash
docker network connect nginx_default app_net两种方案的效果是相同的,都可以使nginx和php72服务访问172.19.0.2。您可以根据喜好选择。如果您在配置或使用中遇到任何问题,请告诉我。我们可以继续一起分析和实践,让服务成功加入网络。