CodeGym /课程 /Docker SELF /使用自定义网络

使用自定义网络

Docker SELF
第 17 级 , 课程 4
可用

5.1 自定义网络的主要类型

Docker中的自定义网络提供了灵活的功能,用于配置和管理容器之间的网络交互。它们允许隔离容器、组织它们的交互并创建复杂的网络拓扑。在这次讲座中,我们将探讨如何在Docker中创建和配置自定义网络,以及它们的使用示例。

自定义网络的主要类型

Docker支持几种类型的自定义网络,每种类型都有自己的特性和适合不同的使用场景:

  1. Bridge (桥接网络): 提供在单个主机上的容器之间的隔离和通信。这种网络类型默认用于本地应用程序,这些应用程序不需要与主机之外的内容交互。
  2. Overlay (覆盖网络): 用于连接在不同主机上运行的容器,比如在Docker Swarm集群或Kubernetes中。它们为分布式应用提供高扩展性和安全性。
  3. Macvlan: 允许容器直接使用主机的物理网络接口。这对于性能要求高的网络应用程序以及需要绑定特定MAC地址的场景非常有用。在Macvlan网络中的容器可以与物理网络中的其他设备作为独立节点进行交互。
  4. Host (主机网络): 容器使用主机的网络堆栈,这可以消除网络虚拟化的开销,但减少了隔离性。这种网络类型适用于需要最大网络性能的应用程序。

5.2 创建和使用桥接(bridge)网络

桥接网络(bridge)是最常见的用户自定义网络类型,通常用于在一个主机上隔离容器。连接到同一bridge网络的容器可以通过IP地址和主机名相互通信。

创建用户自定义的bridge 网络

要创建用户自定义的bridge 网络,使用以下命令 docker network create:

Terminal

docker network create --driver bridge my_bridge_network

在用户自定义网络中启动容器

启动连接到该网络的容器:

Terminal

docker run -d --name container1 --network my_bridge_network nginx

docker run -d --name container2 --network my_bridge_network busybox sleep 1000

检查容器之间的连接

你可以使用ping命令检查容器之间的连接:

Terminal

docker exec container2 ping -c 4 container1

如果容器正确连接到my_bridge_network网络,ping命令会成功运行。

5.3 在 Docker Compose 中使用自定义网络

Docker Compose 中使用自定义网络的例子

Docker Compose 简化了为多容器应用程序创建和管理网络的过程。你可以在 docker-compose.yml 文件中定义自定义网络。

docker-compose.yml 文件的例子:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network

  app:
    image: myapp:latest
    networks:
      - my_bridge_network

networks:
  my_bridge_network:
    driver: bridge

运行 Docker Compose:

Terminal

docker compose up -d

在这个例子中,两个服务 (webapp) 都连接到了自定义网络 my_bridge_network

5.4 配置和使用 macvlan 网络

macvlan 网络让容器可以直接使用主机的物理网络接口,这对需要高网络性能的应用很有用。处于这种网络中的容器会获得属于指定子网的独立 IP 地址,使它们能在和主机相同的网络中可见。

创建 macvlan 网络

Terminal

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my_macvlan_network

在这个命令中:

  • --subnet: 指定容器所在的子网。
  • --gateway: 为容器设置网关。
  • -o parent: 指定主机绑定网络的物理接口。

macvlan 网络中运行容器

Terminal

docker run -d --name container1 --network my_macvlan_network nginx

docker run -d --name container2 --network my_macvlan_network busybox sleep 1000

在这个例子中,两个容器都连接到了 my_macvlan_network 网络,并能通过物理接口 eth0 访问外部网络。

5.5 在 Docker Compose 中的使用示例

你也可以在 Docker Compose 中使用 macvlan 网络。比如:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_macvlan_network
        
networks:
  my_macvlan_network:
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

启动 Docker Compose

Terminal

docker compose up -d

在这个例子中,网络 my_macvlan_network 允许服务 web 与网段 192.168.1.0/24 内的设备(包括主机)进行交互。

实际建议:

  • 访问配置: 确保你的路由器或网络管理员允许使用 macvlan 配置中指定的子网。
  • 隔离: 如果安全性很重要,可以使用 VLAN 来分隔网络,这样容器只能访问需要的资源。
  • 测试: 配置完成后,使用 pingcurl 命令测试容器与外部网络的连接。

5.6 使用网络为微服务提供支持的示例

我们来看一个示例,这里有前端、后端和数据库,分别隔离在不同的网络中,但通过网络交叉实现彼此的交互。

文件 docker-compose.yml

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier
        
  backend:
    image: mybackend:latest
    networks:
      - back-tier
      - db-tier
        
  database:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    networks:
      - db-tier
        
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
  db-tier:
    driver: bridge

启动 Docker Compose:

Terminal

docker compose up -d 

在这个示例中:

  • 服务 frontend 连接到网络 front-tierback-tier,这使得它既能与外部客户端交互,也能与后端交互。
  • 服务 backend 连接到网络 back-tierdb-tier,这使得它既能与前端交互,也能与数据库交互。
  • 服务 database 仅连接到网络 db-tier,确保数据库与外部访问隔离。

实践建议:

  • 使用隔离: 网络分离有助于限制服务对数据库或其他关键资源的访问。
  • 检查连接: 使用 pingcurl 命令,确保服务可以通过共享网络相互交互。
  • 优化: 如果你的项目需要在集群或多个主机上运行,使用 overlay 网络更优。

这个示例展示了如何创建网络隔离,同时在应用程序的不同层级间实现交互。

1
Опрос
Docker网络设置,  17 уровень,  4 лекция
недоступен
Docker网络设置
Docker网络设置
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION