网络架构
Docker启动时会在主机上自动创建一个docker0
虚拟网桥,它会在挂载其上的接口之间进行网络转发,如下图所示:
同时,Docker随机分配一个本地未被占用的私有网段中的一个地址给docker0
接口。比如典型的172.17.42.1,掩码为255.255.255.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。
当创建一个Docker容器的时候,同时会创建一个veth pair
接口(veth pair,是一个成对的端口,所有从这对端口一 端进入的数据包都将从另一端出来,反之也是一样)。
这对veth pair
一端放在容器内,名称为eth0
,另一端在本地并被挂载到docker0
网桥,名称以veth开头(如上图所示)。
通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。如此一来,Docker就在主机和所有容器之间创建了一个虚拟共享网络。
配置参数
下面是Docker网络相关的命令参数。
-b BRIDGE or --bridge=BRIDGE
:指定容器挂载的网桥;--bip=CIDR
:定制docker0的掩码;-
H SOCKET ... or --host=SOCKET ...
:Docker服务端接收命令的通道;--icc=true|false
:是否支持容器之间进行通信;--ip-forward=true|false
:是否启用net.ipv4.ip_forward,即打开转发功能;--iptables=true|false
:是否允许Docker添加iptables规则;--mtu=BYTES
:容器网络中的MTU。--dns=IP_ADDRESS
:实验指定的DNS服务器;--dns_search=DOMAIN
:指定DNS搜索域;
下面这些参数只能在执行 docker run
时使用,因为它们是针对容器特性内容:
-
-h HOSTNAME or --hostname=HOSTNAME
:配置容器主机名; -
--link=CONTAINER_NAME:ALIAS
:添加到另一个容器的连接; -
--net=bridge|none|container:NAME_or_ID|host|user_defined_network
:配置容器的桥接模式; -
-p SPEC or --publish=SPEC
:映射容器端口到宿主机; -
-P or --pubish-all=true|false
:映射容器所有端口到宿主机。
网络相关命令
Docker网络相关命令都作为network的子命令出现。
$ docker network COMMAND --help
Usage: docker network COMMAND
Manage networks
Commands:
connect Connect a container to a network
create Create a network
disconnect Disconnect a container from a network
inspect Display detailed information on one or more networks
ls List networks
prune Remove all unused networks
rm Remove one or more networks
1.列出网络
命令格式为:docker network ls [OPTIONS]
支持的参数包括:
- -f:指定输出过滤器;
- --no-trunc:不截断输出内容。
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
93462b021a93 bridge bridge local
b960b18f0b3e host host local
f92adf7c5957 none null local
- 创建网络
命令格式:docker network create [OPTIONS] NETWORK
支持的参数包括:
-
--aux-address
:辅助的IP地址; -
-d, --driver
:网络驱动类型,如bridge或overlay; -
--gateway
:网关地址; -
--internal
:禁止外部对创建网络的访问; -
--ip-range
:分配IP地址范围; -
--ipam-driver
:IP地址管理插件类型; -
--ipam-opt
:IP地址管理插件的选项; -
--ipv6
:支持IPv6地址; -
--label
:为网络添加元标签信息; -
-o, --opt
:网络驱动支持的选项; -
--subnet
:网络地址段。
3.删除网络
命令格式:docker network rm NETWORK [NETWORK ...]
4.接入容器
将一个容器连接到一个已存在的网络上。
命令格式:docker network connect [OPTIONS] NETWORK CONTAINER
支持的参数包括:
-
--alias
:为容器添加一个别名,此别名仅在所添加网络可见; -
--ip
:指定IP地址; -
--ip6
:指定IPv6地址; -
--link
:添加链接到另外一个容器; -
--link-local-ip
:为容器添加一个链接地址。
- 卸载容器
将一个连接到网络上的容器从网络上移除。
命令格式:docker network disconnect [OPTIONS] NETWORK CONTAINER
支持的参数:
-
-f or --force
:强制把容器从网络上移除。
6.查看网络信息
查看已存在网络的具体信息。
命令格式:docker network inspect [OPTIONS] NETWORK [NETWORK ...]
支持的参数:
-
-f or --format
:给到一个golang模板字符串,对输出结果进行格式化。
有疑问加站长微信联系(非本文作者)