Docker高级网络功能
source link: https://www.tuicool.com/articles/IzURNvU
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
网络架构
Docker启动时会在主机上自动创建一个 docker0
虚拟网桥,它会在挂载其上的接口之间进行网络转发,如下图所示:
Docker网络
同时,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 -d, --driver --gateway --internal --ip-range --ipam-driver --ipam-opt --ipv6 --label -o, --opt --subnet
3.删除网络
命令格式:docker network rm NETWORK [NETWORK ...]
4.接入容器
将一个容器连接到一个已存在的网络上。
命令格式:docker network connect [OPTIONS] NETWORK CONTAINER
支持的参数包括:
--alias --ip --ip6 --link --link-local-ip
-
卸载容器
将一个连接到网络上的容器从网络上移除。
命令格式:docker network disconnect [OPTIONS] NETWORK CONTAINER
支持的参数:
-
-f or --force
:强制把容器从网络上移除。
6.查看网络信息
查看已存在网络的具体信息。
命令格式:docker network inspect [OPTIONS] NETWORK [NETWORK ...]
支持的参数:
-
-f or --format
:给到一个golang模板字符串,对输出结果进行格式化。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK