云计算专题之容器自动化
五,网络管理5.1 容器网络模式
- Docker支持五种网络模式
- bridge
- 默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中
- host
- 容器不会获得一个独立的network namespace,而是与宿主机共用一个
- none
- 获取独立的network namespace,但不为容器进行任何网络配置
- container
- 与指定的容器使用同一个network namespace,网卡配置也都是相同的
- 自定义
- 自定义网桥,默认与brdge网络一样
- bridge
5.1.1 bridge网络类型
#安装bridge管理工具
[root@docker ~]# yum -y install bridge-utils
#查看网桥状态
[root@docker ~]# brctl show
bridge name bridge id STP enabled interfaces
br-576fa4020bee 8000.02420d792f02 no veth1a320f6 #网桥br-57绑定了两个虚拟网卡
veth40f19a1
br0 8000.000c291f17c8 no ens32
docker0 8000.024222b4956e no veth1a4e09b #网桥docker0绑定了一个虚拟网卡
vethb74cd44
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ee629711235f bridge bridge local #两个网桥类型的网络
eb35904fea23 host host local
576fa4020bee lnmp bridge local #两个网桥类型的网络
a51fee157db8 none null local
#查看容器进程
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
708d32343d71 centos "/bin/bash" 44 minutes ago Up 44 minutes test03
80efc6165b12 centos "/bin/bash" 47 minutes ago Up 47 minutes test02
fb5c81fa9396 richarvey/nginx-php-fpm "docker-php-entrypoi…" 2 hours ago Up 2 hours 443/tcp, 9000/tcp, 0.0.0.0:8001->80/tcp, :::8001->80/tcp lnmp-np
fb8723233240 mysql:5.6 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp lnmp-mysql
6a2a1da76923 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8890->80/tcp, :::8890->80/tcp ng-01
5bc0c919250b nginx:latest "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8888->80/tcp, :::8888->80/tcp ng-test
[root@docker ~]# docker inspect lnmp-mysql | grep -A 15 "Network"
"Networks": {
"lnmp": { #网络类型lnmp
"IPAMConfig": null,
"Links": null,
"Aliases": [
"fb8723233240"
],
"NetworkID": "576fa4020bee150eb08ede7c068873a84e92966b67e66375f4a03924db198b2c",
"EndpointID": "c8971cfaeebad8bc1ce797bd1794f5a29791bdfebc5db351d74d61781c146352",
"Gateway": "172.18.0.1", #网关172.18.0.1,这就是网桥br-576fa4020bee
"IPAddress": "172.18.0.2", #容器IP172.18.0.2
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:02",
"DriverOpts": null
}
}
}
}
]
[root@docker ~]# docker inspect lnmp-np | grep -A 15 "Network"
"Networks": {
"lnmp": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"fb5c81fa9396"
],
"NetworkID": "576fa4020bee150eb08ede7c068873a84e92966b67e66375f4a03924db198b2c",
"EndpointID": "c7c5b22a136497415505566732a8b620a27744062cacb4980067952c4896cf8b",
"Gateway": "172.18.0.1", #网关172.18.0.1,这就是网桥br-576fa4020bee
"IPAddress": "172.18.0.3", #容器IP172.18.0.2
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:12:00:03",
"DriverOpts": null
}
}
}
}
]
[root@docker ~]# docker inspect ng-test | grep -A 15 "Network"
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "ee629711235f22194c1276eaa2a65df7fcd180defb60231643e59ba2c1b83dea",
"EndpointID": "841e8c6b7a504787314a314981dcb2f48e5b00219ef50b5e2312199d6d30f49e",
"Gateway": "172.17.0.1", #网关172.17.0.1,这就是网桥docker0
"IPAddress": "172.17.0.2", #容器IP172.17.0.2
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
5.1.2 host网络类型
#启动一个host容器
[root@docker ~]# docker run -itd --name test01 --network host centos /bin/bash
[root@docker ~]# docker attach test 01
"docker attach" requires exactly 1 argument.
See 'docker attach --help'.
Usage: docker attach [OPTIONS] CONTAINER
Attach local standard input, output, and error streams to a running container
[root@docker ~]# docker attach test01
[root@docker /]# ip a #这就是网络类型为host的容器,IP地址和docker宿主机完全一样
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1f:17:c8 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.111/24 brd 192.168.100.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe1f:17c8/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:22:b4:95:6e 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:22ff:feb4:956e/64 scope link
valid_lft forever preferred_lft forever
5: vethb74cd44@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether d6:89:d3:b9:21:67 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::d489:d3ff:feb9:2167/64 scope link
valid_lft forever preferred_lft forever
7: veth1a4e09b@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 92:03:61:3e:72:44 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::9003:61ff:fe3e:7244/64 scope link
valid_lft forever preferred_lft forever
8: br-576fa4020bee: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:0d:79:2f:02 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-576fa4020bee
valid_lft forever preferred_lft forever
inet6 fe80::42:dff:fe79:2f02/64 scope link
valid_lft forever preferred_lft forever
10: veth40f19a1@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-576fa4020bee state UP group default
link/ether 66:90:3e:b8:5c:4e brd ff:ff:ff:ff:ff:ff link-netnsid 2
inet6 fe80::6490:3eff:feb8:5c4e/64 scope link
valid_lft forever preferred_lft forever
12: veth1a320f6@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-576fa4020bee state UP group default
link/ether 2a:7b:20:34:e1:10 brd ff:ff:ff:ff:ff:ff link-netnsid 3
inet6 fe80::287b:20ff:fe34:e110/64 scope link
valid_lft forever preferred_lft forever
[root@docker /]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.4) 56(84) bytes of data.
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=1 ttl=128 time=15.2 ms
64 bytes from 110.242.68.4 (110.242.68.4): icmp_seq=2 ttl=128 time=14.1 ms
^C
5.1.3 none网络类型(用于建立与宿主机的桥接模式)
[root@docker ~]# docker run -itd --name test02 --network none centos
[root@docker ~]# docker exec test02 hostname -I
查询后,什么ip都没有,none类型是暂时不给容器指定网卡的。
5.1.4 container网络类型
指定新容器使用指定容器的网卡
#启动一个容器,网络类型container,使用lnmp-np容器的网卡
[root@docker ~]# docker run -itd --name test03 --network container:lnmp-np centos /bin/bash
WARNING: IPv4 forwarding is disabled. Networking will not work.
708d32343d718228b797e67dd1efbc1fa53f04843d76d885d6c6b3d58f8851b0
[root@docker ~]# docker exec test03 hostname -I #test03没有网络设置,但ip地址和lnmp-np容器完全一样
172.18.0.3
[root@docker ~]# docker exec lnmp-np ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@docker ~]# cd /etc/sysconfig/network-scripts/
[root@docker network-scripts]# cat ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens32
UUID=43bc2d66-2c7e-429f-9175-17a6ca6f3cad
DEVICE=ens32
ONBOOT=yes
IPV6_PRIVACY=no
IPADDR=192.168.100.111
NETMASK=255.255.255.0
GATEWAY=192.168.100.2
DNS1=114.114.114.114
DNS2=8.8.8.8