首先,我们来看看Docker默认的网络模式,即docker0网桥。

每当你安装Docker时,它会创建一个名为docker0的虚拟网桥,并设置一个IP地址范围供它进行端口映射等工作。所有Docker容器在创建时,都会自动连接到这个docker0网桥,并分配一个虚拟IP地址。这样,容器与主机之间,以及容器与容器之间就可以相互通信了。

centos7删除docker0 网卡_docker

centos7删除docker0 网卡_centos7删除docker0 网卡_02

但是,docker0网桥存在一些限制:容器之间的连接不够安全,IP地址也可能会发生冲突等问题。因此,Docker引入了自定义网络的概念,来解决这些问题。

当你使用docker-compose.yml文件定义一个networks参数时,Docker会基于该参数创建一个自定义网络。比如:

version: '3'
services:
  web:
    build: .
    networks:
      - frontend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

在这个例子中,我们定义了两个独立的网络frontendbackendweb服务连接到frontend网络,而db服务连接到backend网络。这样,webdb服务之间就无法直接通信了,从而增加了一层隔离和安全性。

除了隔离的好处,自定义网络还可以互通于docker0网桥。这一过程是自动完成的。

当一个容器连接到自定义的网络时,Docker会在该网络与docker0网桥之间创建一个"网桥连接"。因此,即使容器位于不同的自定义网络,它们也可以通过连接到docker0网桥来实现互通。

当然,这种自动的互通有一定的安全隐患。如果你想禁止某些容器直接互通,你可以将它们分配到不同的自定义网络中。

此外,Docker还支持hostoverlay等多种网络模式,可以用于满足不同的场景。它们的工作原理也不尽相同。

总之,Docker的网络设计灵活多样,可以满足绝大部分需求。合理地规划和配置网络有利于提高容器应用的安全性、可靠性和维护性。

常用命令:

ip a 显示网络接口信息,包括 IP 地址、MAC 地址、状态等。

docker network ls  列出所有docker网络

docker network inspect 展示docker网络详情

docker network prune  删除所有未使用的网络

后续更深层次的内容还需继续学习...