Docker 网络是 Docker 容器之间以及容器与外部世界之间通信的机制。Docker 提供了多种网络驱动,允许容器以不同的方式进行通信:
Docker 网络工作原理:
-
网络命名空间:Docker 使用 Linux 的网络命名空间来隔离容器的网络堆栈。每个容器都有自己的网络命名空间,这意味着每个容器都有自己的网络接口和 IP 地址。
-
网络驱动:Docker 使用不同的网络驱动来管理容器的网络。这些驱动定义了容器如何连接到网络以及如何与其他容器通信。
-
用户定义的网络:用户可以创建自己的网络,这些网络可以跨越多个 Docker 主机,允许容器在不同的主机上进行通信。
-
内置网络:Docker 提供了一些内置的网络类型,如桥接网络、主机网络和无网络模式。
常用的 Docker 网络类型:
-
桥接网络(Bridge):
- 默认的网络类型。
- 容器连接到一个虚拟的以太网桥上。
- 容器可以相互通信,但与外部网络隔离。
- 可以通过配置端口映射来访问外部网络。
-
主机网络(Host):
- 容器共享宿主机的网络命名空间。
- 容器可以直接使用宿主机的网络接口。
- 容器之间以及容器与外部网络之间的通信没有隔离。
-
无网络(None):
- 容器有自己的网络命名空间,但没有进行任何网络配置。
- 需要手动配置网络设置。
-
覆盖网络(Overlay):
- 用于跨多个 Docker 主机的容器通信。
- 通常与 Docker Swarm 一起使用,支持容器服务的集群化。
-
Macvlan:
- 使容器看起来像是宿主机上的物理设备。
- 容器有自己的 MAC 地址,可以直接在物理网络上进行通信。
- 可以配置为桥接模式或路由模式。
-
IPVLAN:
- 类似于 Macvlan,但使用 L3 路由而不是 L2 桥接。
- 提供了更好的隔离性。
创建和管理网络:
-
创建网络:
docker network create --driver bridge my_bridge
-
列出网络:
docker network ls
-
查看网络详情:
docker network inspect [network_name_or_id]
-
删除网络:
docker network rm [network_name_or_id]
-
连接容器到网络:
docker network connect [network_name_or_id] [container_id_or_name]
-
断开容器与网络的连接:
docker network disconnect [network_name_or_id] [container_id_or_name]
Docker 网络提供了灵活的配置选项,可以根据不同的应用场景和安全需求选择合适的网络类型。