五、Docker网络(network)
- 桥接
- NET
- Overlay Network 叠加网络,IP承载IP的隧道通信
# docker network ls
NETWORK ID NAME DRIVER SCOPE
f0867978e324 bridge bridge local #net桥接式网络(默认)
f2ecf4873c28 host host local #容器使用宿主机的名称空间
07123e30eddb none null local #只有lo网卡
# yum install bridge-utils
# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02420a3bea55 no vethd1d80f0
# docker network inspect bridge #查看网络的详细信息
# docker run --name centos --network host -it dongfeimg/mycentos:v0.1 #使用host网络
# rpm -q iproute
iproute-4.11.0-14.el7.x86_64
# ip netns add r1 #创建网络名称空间
# ip netns add r2
# ip netns list
# ip netns exec r1 ifconfig -a #在网络名称空间中执行命令
# ip link add name veth1.1 type veth peer name veth1.2 #创建一对虚拟网卡
# ip link show
# ip link set dev veth1.1 netns r1 #将veth1.1网卡移动到网络名称空间r1中
# ip link set dev veth1.2 netns r2
# ip netns exec r1 ifconfig veth1.1 10.0.0.1/24 up
# ip netns exec r2 ifconfig veth1.2 10.0.0.2/24 up
# ip netns exec r1 ping 10.0.0.2
1. 封闭式容器:只有lo网卡
# docker run --name centos7 -it --network none --rm dongfeimg/mycentos:v0.1
2. 联盟式容器:两个容器使用一个名称空间
# docker run --name b1 -it --rm busybox
/ # echo "hello" > /tmp/index.html
/ # httpd -h /tmp/
# docker run --name b2 -it --rm --network container:b1 busybox
/ # wget -O - -q 127.0.0.1
3. 连接docker0网桥的桥接容器
- 创建桥接式容器并且创建时注入主机名、DNS和hosts
# docker run --name centos7 -it --network bridge --rm --hostname mydocker.dongfei.com --dns 8.8.8.8 --add-host www.dongfei.com:192.168.0.111 dongfeimg/mycentos:v0.1
# docker run --name web01 --rm -p 80 nginx:1.14 #将容器的80映射至宿主机上的随机端口
# docker run --name web01 --rm -p 192.168.100.9::80 nginx:1.14 #指定映射宿主机地址
# docker run --name web01 --rm -p 80:80 nginx:1.14 #将容器的80映射至宿主机的80端口
# docker run --name web01 --rm -p 192.168.100.9:80:80 nginx:1.14 #指定映射端口和地址
# docker port web01 #查看映射关系
# iptables -t nat -vnL |grep DNAT
# docker inspect bc337aa4d9fc |grep HostPort
# vim /etc/docker/daemon.json
{
"bip": "10.0.0.254/16",
"fixed-cidr": "10.0.0.0/16",
"mtu": 1500,
"default-gateway": "10.0.0.1",
"dns": ["114.114.114.114","8.8.8.8"]
}
# docker network create --driver bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" docker1
# docker network ls
# ip link set br-0a9309aaa170 down
# ip link set br-0a9309aaa170 name docker1 #修改接口名字
# ip link set docker1 up
# docker network rm docker1 #删除网桥
4. 共享宿主机网络容器
# docker run --name b1 -it --rm --network host busybox