1、概述

默认创建三种网络,可以通过docker network ls查看
image.png

网络模式 简介
bridge 为每一个容器分配、设置IP等,并将容器连接到一个docker0的虚拟网桥,默认为该模式。
host 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
none 容器有独立的Network namespace,但没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等。
container 新创建的容器不会创建自己的网卡和配置自己的IP,和一个指定的容器共享IP、端口范围
  1. # 查看网络数据转发是否开启
  2. sysctl net.ipv4.conf.all.forwarding

2、网络模式

2.1 bridge

  • Docker守护进程创建了一个虚拟以太网桥docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。
  • 默认情况下,守护进程会创建一对对等虚拟设备接口veth pair,将其中一个接口设置为容器的eth0接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似vethxxx这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网路上。
  • 守护进程还会从网桥docker0的私有地址空间中分配一个IP地址和子网给该容器,并设置docker0的IP地址为容器的默认网关

4、网络管理 - 图2

2.2 host

  • host网络模式需要在创建容器的时候通过参数--net host或者--network host指定。
  • 采用host网络模式的Docker Container,可以直接使用宿主机的Ip地址和外界进行通信,如果宿主机的eth0是一个共有IP,那么容器也拥有这个共有IP。同时容器内服务的端口也可以使用宿主机的端口,无须额外的进行NAT转换。
  • host网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机和容器直接通信,但是容器的网络缺少隔离性。

    2.3 none

  • none网络模式是指禁用网络功能,只有lo(local的缩写)接口,代表127.0.0.1,即localhost本地环回接口。在创建容器的时候通过参数--net none或者--network none指定。

  • none网络模式即不为Docker Container创建任何的网络环境,容器内部只能使用loopback网络设备,不会再有其他的网络资源。可以说none模式为Docker Container做了极少的网络设定,但是俗话说的好“少即是多”,在没有网络配置的情况下,作为Docker开发者,才能在这基础做其他的网络定制开发,这恰巧也体现了Docker设计理念的开放。

    2.4 container

  • container网络模式是Docker中一种较为特别的网络模式。在创建容器的时候通过参数--net container:已运行的容器名称|容器ID或者--network container:已运行的容器名称|容器ID指定。

  • 处于这个模式下的Docker容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

container网络模式.jpg

  • container网络模式即创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表还是隔离的。

    3、自定义网络

3.1 概述

  • 为了保证各容器中应用的安全性,更推荐使用自定义的网络进行容器管理,以及启用容器名称到IP地址的自动DNS解析
  • 从Docker 1.10版本开始,Docker Daemon实现了一个内嵌的DNS server,使得容器可以直接通过容器名称进行通信。方法很简单,只要在创建容器的时候使用--name作为容器名称即可。
  • 但是使用Docker DNS有个限制:只能在user-defined网络中使用。也就是说,默认的bridge网络是无法使用DNS的,所以我们需要自定义网络。

    3.2 创建网络

  1. # 我们可以自定义一个网络
  2. # --driver bridge 默认的桥接
  3. # --subnet 192.168.0.0/16 子网掩码,IP地址可以从192.168.0.2 到 192.168.255.254
  4. # --gateway 192.168.0.1 网关
  5. [root@hchost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
  6. # 查看docker网络
  7. docker network ls
  8. # 查看自定义网络
  9. docker network inspect mynet

3.3 连接网络

  • 通过docker network connect 网络名称 容器名称 为容器连接新的网络模式

连通之后就是将容器放到mynet网络下


即所谓 的 一个容器,两个IP地址,如 阿里云,有 公网IP和内网IP

3.4 断开网络

  • 通过docker network disconnect 网络名称 容器名称 命令断开网络

    3.5 移除网络

  • 可以通过docker network rm 网络名称移除自定义网络模式,网络模式移除成功会返回网络模式名称

  • 如果通过某个自定义网络模式创建了容器,则该网络模式无法删除。