Docker的网络模式有哪些,它们之间有什么区别?

Docker 支持以下几种网络模式:

  1. bridge:默认模式。每个容器都会连接到一个Linux网桥,并被分配一个可路由的IPv4地址。
  2. host:容器共享宿主机的网络。
  3. none:容器关闭网络。
  4. container:将多个容器连接到同一个网络段,彼此可以直接通信。
  5. overlay:覆盖网络,多主机的容器互联。

主要区别如下:

  1. bridge:相对隔离,通过端口映射访问,可配置 docker0 桥接器。
  2. host:不隔离,直接使用宿主机网络。
  3. none:完全隔离,关闭网络。
  4. container:连接指定容器,与连接容器在同一网段。
  5. overlay:跨主机容器互联,实现容器的高可用与伸缩。

举例:

  1. bridge:
    默认模式,使用 docker run -p 8080:80 nginx 映射端口访问。
  2. host:
    使用 docker run –network host nginx 直接使用宿主机 80 端口。
  3. none:
    使用 docker run –network none nginx 关闭容器网络。
  4. container:
    先运行一个容器 docker run -d –name nginx nginx
    再运行一个容器连接到它 docker run -d –network container:nginx ubuntu
  5. overlay:
    需要配置多个 Docker daemon 和 keys 才能使用。连接跨主机的容器。

理解各种网络模式的区别和用途,可以让我们为 Docker 容器选择恰当的网络设置。比如:

  1. 需要完全隔离时可以使用 none 网络。
  2. 多个容器需要互通时可以使用 container 网络。
  3. 需要跨主机互联时使用 overlay 网络。