Home » docker » 搭建PHP+Nginx环境并加入Docker网络

搭建PHP+Nginx环境并加入Docker网络

编 辑:Y ┊ 时 间:2023年09月07日 ┊ 访问: 22 次

这里是搭建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

说明

  1. 在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。您可以根据喜好选择。如果您在配置或使用中遇到任何问题,请告诉我。我们可以继续一起分析和实践,让服务成功加入网络。




Copyright © 2026 Y 版权所有.网站运行:13年238天21小时25分