CodeGym /课程 /Docker SELF /容器之间的关系

容器之间的关系

Docker SELF
第 17 级 , 课程 2
可用

3.1 bridge网络基础

Bridge网络是Docker中的默认网络驱动,用于创建一个隔离的网络,容器可以在其中相互通信。这个网络允许容器通过IP地址和主机名进行交流,为多容器应用程序的不同组件之间提供了一种方便的交互方式。

Bridge网络在主机层面创建了一个私有的内部网络,该网络与主机的外部网络隔离。连接到此网络的容器可以彼此通信,但如果没有配置端口转发,则无法直接从外部访问这些容器。

自动创建bridge网络

默认情况下,Docker在安装时会自动创建bridge网络,而未指定特定网络的容器会自动连接到该网络。

bridge网络中创建和使用容器的示例

1. 在bridge网络中运行容器:

在这个示例中,我们运行两个容器:运行Nginx的container1和运行Busybox的container2。两个容器都连接到了默认的bridge网络。

Terminal

docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000

2. 检查容器的IP地址:

使用docker inspect命令检查容器的IP地址。

这些命令会返回容器的IP地址,可以用来实现容器间的通信。

Terminal

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2

3. 通过IP地址实现容器之间的通信:

使用ping命令container2中ping container1,以检查容器之间的连接。

如果容器正确地连接到了bridge网络ping命令会成功。

Terminal

docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>

说明: Bridge网络为局部应用程序提供了一种简单的解决方案,在这种场景中,容器需要彼此通信,同时与外部网络保持隔离。通过IP地址ping是检查网络连接的基础方式,不过对于更复杂的应用,可能需要配置DNS或额外的网络驱动。

3.2 使用主机名

使用主机名连接容器

除了使用IP地址外,Docker还支持使用容器的名称来连接容器之间的通信。这简化了配置,因为容器的名称是固定的,而IP地址在容器重新启动时可能会更改。

通过主机名连接的示例

1. 使用bridge网络模式启动容器:

Terminal

docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
    

2. 验证通过主机名的连接:

使用ping命令appserver容器中pingwebserver

Terminal

docker exec appserver ping -c 4 webserver 
    

创建自定义的bridge网络

与其使用默认的bridge网络,你也可以创建一个自定义的bridge网络,以更好地控制容器间的交互。

创建自定义网络的示例

1. 创建自定义网络:

Terminal

docker network create --driver bridge my_bridge_network 
    

2. 在自定义网络中启动容器:

Terminal

docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000 
    

3. 验证通过主机名的连接:

Terminal

docker exec appserver ping -c 4 webserver 
    

3.3 多主机示例

实际使用示例

示例 1: Web服务器和数据库

创建文件 docker-compose.yml 用于Web服务器和数据库:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

启动 Docker Compose:

Terminal


docker compose up -d 

检查容器之间的连接:

Terminal


docker compose exec web ping -c 4 db 

示例 2: 微服务架构

创建文件 docker-compose.yml 用于微服务应用程序:

Yaml

version: '3.8'

services:
  frontend:
    image: nginx:latest
    networks:
      - my_bridge_network
        
  backend:
    image: mybackend:latest
    networks:
      - my_bridge_network
        
  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - my_bridge_network
        
networks:
  my_bridge_network:
    driver: bridge

启动 Docker Compose:

Terminal

        
docker compose up -d 

检查容器之间的连接:

Terminal

docker compose exec backend ping -c 4 db

docker compose exec frontend ping -c 4 backend 
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION