理解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接收容器
自定义网络
网络模式
- 桥接模式:bridge
- 不配置网络:none
- 主机共享网络: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 # 为容器添加链路本地地址