理解Docker网络

docker0

Linux中输入 ip addr 查看网络
其中有一项网络

4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:7d:0c:ad:a7 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:7dff:fe0c:ada7/64 scope link 
       valid_lft forever preferred_lft forever

我们只要安装了Docker,就会有一个默认的网卡docker0桥接模式,使用的技术时veth-pair技术
docker每启动一个容器,网络就会增加一对
而且,docker的容器之间是可以ping通的
Docker中所有网络接口都是虚拟的,转发效率高

容器互联--link

注意: docker官方已不推荐使用docker run --link来链接2个容器互相通信,随后的版本中会删除--link

格式

--link <name or id>:alias 其中,name和id是源容器的name和id,alias是源容器在link下的别名

环境变量

当使用--link时,docker会自动在接收容器内创建基于--link参数的环境变量
<alias>_NAME=/接收容器名/源容器alias 接收容器能ping通源容器,但是源容器不能ping接收容器

自定义网络

网络模式

  1. 桥接模式:bridge
  2. 不配置网络:none
  3. 主机共享网络:host

使用方法

docker network COMMAND

# Commands:
  connect     # 将容器连接到网络中
  create      # 创造一个网络
  disconnect  # 断开一个容器与网络的连接
  inspect     # 显示一个或多个网络的详细信息
  ls          # 网络列表
  prune       # 移除所有未使用的网络
  rm          # 移除一个或多个网络

当运行一个镜像的时候默认有一个参数--net bridge

创建网络

docker network create [OPTIONS] NETWORK

# Options:
      --attachable           # 启用手动集装箱附件
      --aux-address map      # 网络驱动使用的辅助IPv4或IPv6地址
      --config-from string   # 要从其中复制配置的网络
      --config-only          # 创建仅配置网络
  -d, --driver string        # 管理网络的驱动程序(默认为“网桥”)
      --gateway strings      # IPv4或IPv6主子网网关
      --ingress              # 创建群路由-网格网络
      --internal             # 限制外部访问网络
      --ip-range strings     # 从子范围分配容器ip
      --ipam-driver string   # IP管理驱动(默认为“default”)
      --ipam-opt map         # 设置IPAM驱动程序的特定选项(默认map[])
      --ipv6                 # 启用IPv6网络
      --label list           # 在网络中设置元数据
  -o, --opt map              # 设置驱动程序特定选项(默认map[])
      --scope string         # 控制网络的范围
      --subnet strings       # CIDR格式的子网,表示一个网段

网络连通

实际上是将容器的信息添加到另一个网络中,这样就能通了,简单直接
docker network connect [OPTIONS] NETWORK CONTAINER

# Options:
      --alias strings           # 为容器添加网络范围的别名
      --driver-opt strings      # 字符串网络驱动选项
      --ip string               # IPv4地址(例如172.30.100.104)
      --ip6 string              # IPv6地址(例如,2001:db8::33)
      --link list               # 添加链接到另一个容器
      --link-local-ip strings   # 为容器添加链路本地地址