学习优先级:★★★★★

易用性:★★★★☆

在 Docker Compose 中,每个服务可以运行在自己的隔离网络中。这提高了安全性,并允许更好地控制服务之间的通信流量。

以下是一个配置示例,展示了如何为每个服务定义特定的网络,以控制服务之间的通信并确保隔离。

示例代码

version: '3.8'

services:
  web:
    image: nginx
    networks:
      - frontend

  database:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    driver: bridge  # 为 Web 服务创建的网络
  backend:
    driver: bridge  # 为数据库服务创建的网络

执行结果

运行此配置后,Web 服务将在 frontend 网络中启动,数据库服务将在 backend 网络中启动。由于它们在不同的网络中,因此无法直接相互通信,除非明确连接。

在 Docker Compose 中使用单独的网络可以创建清晰的网络隔离。这提高了安全性,因为运行在不同网络中的服务无法直接通信,除非明确允许。默认的网络驱动 bridge 为同一宿主机上的容器创建隔离网络。还可以使用更高级的网络配置,如 overlay 用于多宿主机网络或 macvlan 为容器分配独立的 MAC 地址。

补充说明

网络隔离在生产环境中尤其重要,因为某些服务(如数据库或内部 API)不应对外公开。使用 Docker Compose,可以配置多个网络,以清晰地分离内部和外部通信。