如何开始docker - 网络管理
docker网络
当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机分配一个本地未占用的私有网段中的一个地址给 docker0 接口。比如典型的 172.17.42.1 ,掩码为255.255.0.0 。此后启动的容器内的网口也会自动分配一个同一网段( 172.17.0.0/16 )的地址。
当创建一个 Docker 容器的时候,同时会创建了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 开头(例如 veth090b7e1@if18 )。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker 就创建了在主机和所有容器之间一个虚拟共享网络。
网络管理
1、查看docker网络
docker network ls
2、创建docker网络
docker network create network1
3、将docker网络链接到容器里面
docker network connect network1 e9f8f4abb08a
4、将docker网络与容器链接断开
docker network disconnect network e9f8f4abb08a
5、删除指定的docker网络
docker network rm network1
6、删除未被使用的docker网络
docker network prune
7、查看网络详情
docker inspect network1
8、创建自定义网段的网络
docker network create --subnet 172.30.0.0/16 network1
设置容器网络
在docker run的时候,可以指定要链接到的网络,如果没有指定就是链接的默认的bridge,也就是docker0网口。
docker network create nginx_network
docker run -itd --network=nginx_network -P nginx:latest
如果容器里面不需要设置网络,可以指定--network=none。
docker_gwbridge 网络
在本质上还是一个local的bridge网络,但是它是我们实现多个host之间的container通信的基础。通常情况下,当我们在链接swarm nodes的时候,docker_gwbridge 网络就会被在每一个swarm节点上自动创建出来。
docker network create --subnet 172.30.0.0/16 --opt com.docker.network.bridge.name=docker_gwbridge --opt com.docker.network.bridge.enable_icc=false docker_gwbridge
容器访问外部网络
容器所有到外部网络的连接,源地址都会被NAT成本地系统的IP地址。这是使用iptables 的源地址伪装操作实现的。
可以通过iptables查看nat表的规则
iptables -nL -t nat --verbose
设置主机名
容器在启动的时候,如果没有指定主机名,就谁随机分配一个主机名,设置主机名有利于应用分类等。
使用-h HOSTNAME 要么 --hostname=HOSTNAME
docker run -itd -h nginx.example.com nginx:latest
设置DNS
如果没有手动设置 ,容器里面的DNS是一个宿主机是一样的。
这个设置是直接修改容器里面的/etc/resolv.conf
--dns-opt 设置DNS参数的
--dns 修改nameserver
--dns-search 设置查找域
docker run -itd --dns-opt='timeout:1 attempts:1' --dns=8.8.8.8 --dns-search=example.com centos