Docker网络的学习

  • 用户是使用Docker Client与 Docker Daemon建立通信,并发送请求给后者
  • Docker Daemon作为Docker架构中主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求
  • Docker Engine执行Docker内部的一系列工作,每一项工作都是以Job的形式存在
  • Job的运行过程中,当需要容器镜像时则从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储
  • 当需要为Docker创建网络环境时,通过网络管理驱动Network driver 创建并配置Docker容器网络环境
  • 当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Exec driver来完成
  • Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作

操作系统本身网络

  • 桥接模式 - 直接连接物理网络
  • NAT模式 - 用于共享主机的IP地址
  • 仅主机模式 - 与主机共享的专用网络
  • 用户自定义模式 - 特定的虚拟网络

docker 不启动 默认网络情况

docker 启动后 网络情况
docker 启动后会产生一个名为docker0的虚拟网桥

ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:e9ff:fee5:668a  prefixlen 64  scopeid 0x20<link>
        ether 02:42:e9:e5:66:8a  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 266 (266.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker 网络的常用命令

默认创建3大网络模式
bridge 网桥模式
host  主机网络
none 无网络
还有两种:
容器模式
自定义模式
共计5种

docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
f14cce59440e   bridge    bridge    local
b171456906be   host      host      local
73342418fb83   none      null      local

查看命令帮助
docker network --help 
创建网络
docker network create a_network
删除网络 
docker network rm a_network
查看网络数据源
docker network inspect bridge

Docker 网络能干啥

容器间的互联和通信以及端口映射
容器IP变动的时候可以通过服务名直接网络通信而不收到影响

Docker 网络模式

默认三大网络模式 共计5种
bridge 网桥模式
host 主机网络
none 无网络
容器模式
自定义模式

bridge

为每个容器分配、设置IP等,并将容器连接到一个docker0的虚拟网桥,默认为该模式
bridge模式:使用--network bridge 指定,默认使用docker0

host

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
host模式:使用--network host 指定

none

容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,IP等
none模式:使用--network none指定

container

新创建的容器不会创建自己的网卡和配置自己的IP,而是和一个指定的容器共享IP、端口范围等。
container模式:使用--network container:NAME或者容器ID指定

自定义模式