docker网络
Host模式
Host 模式,使用参数 –net=host 指定。
启动的容器如果指定了使用host模式,那么新创建的容器不会创建自己的虚拟网卡,而是直接使用宿主机的网卡和IP地址,因此在容器里面查看到的IP信息就是宿主机的信息,访问容器的时候直接使用宿主机IP+容器端口即可,不过容器的其他资源们必须文件系统、系统进程等还是和宿主机保持隔离。
此模式的网络性能最高,但是各容器之间端口不能相同,适用于运行容器端口比较固定的业务。
为避免端口冲突,先删除所有的容器:
[root@xiaomao ~]# docker run --name tingweb2 -it --rm --network host xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:53:F2:A2:ED
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
ens33 Link encap:Ethernet HWaddr 00:0C:29:57:76:BE
inet addr:192.168.146.133 Bcast:192.168.146.255 Mask:255.255.255.0
/ # hostname
xiaomao
/ # httpd -h /data/web/html/
/ # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::80 :::*
宿主机访问web服务
none模式
None模式,使用参数 –net=none 指定
在使用none 模式后,Docker 容器不会进行任何网络配置,其没有网卡、没有IP也没有路由,因此默认无法与外界通信,需要手动添加网卡配置IP等,所以极少使用,
[root@xiaomao ~]# docker run --name tinyweb2 -it --rm --network none xiaomao/mying:v0.5 /bin/sh
/ # ifconfig -a
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
bridge模式
docker的默认模式即不指定任何模式就是bridge模式,也是使用比较多的模式,此模式创建的容器会为每一个容器分配自己的网络 IP等信息,并将容器连接到一个虚拟网桥与外界通信。
[root@xiaomao ~]# docker run --name tingweb2 -it --rm --network bridge xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
/ # hostname
fef4b6398a4c
/ # ping 192.168.146.133
PING 192.168.146.133 (192.168.146.133): 56 data bytes
64 bytes from 192.168.146.133: seq=0 ttl=64 time=0.211 ms
64 bytes from 192.168.146.133: seq=1 ttl=64 time=0.065 ms
#查看网络模式的详细信息
[root@xiaomao ~]# docker network inspect bridge
# 批量关闭正在运行的容器
[root@xiaomao ~]# docker stop $(docker ps -a -q)
#批量删除已退出容器
[root@xiaomao ~]# docker rm -f `docker ps -aq -f status=exited`
Container模式
Container模式,使用参数 –net=container:名称或ID 指定。
使用此模式创建的容器需指定和一个已经存在的容器共享一个网络,而不是和宿主机共享网,新创建的容器不会创建自己的网卡也不会配置自己的IP,而是和一个已经存在的被指定的容器东西IP和端口范围,因此这个容器的端口不能和被指定的端口冲突,除了网络之外的文件系统、进程信息等仍然保持 相互隔离,两个容器的进程可以通过lo网卡社保通信。
[root@xiaomao ~]# docker run --name joinedc1 -it --rm --network container:tingweb2 xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0
/ # hostname
fef4b6398a4c
#启容器时给容器加上主机名
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname bbox.xiaomao.com busybox
/ # hostname
bbox.xiaomao.com
#给容器和宿主机之间配置hosts解析
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname bbox.xiaomao.com --add-host xiaomao:192.168.146.140 busybox
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.146.140 xiaomao
172.17.0.2 bbox.xiaomao.com bbox
#指定容器DNS
[root@xiaomao ~]# docker run --name bbox2 -it --rm --hostname bbox.xiaomao.com --add-host xiaomao:192.168.146.140 --dns 192.168.140.133 --dns 114.114.114.114 --dns-search ilinux.io busybox
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.146.140 xiaomao
172.17.0.2 bbox.xiaomao.com bbox
/ # cat /etc/resolv.conf
search ilinux.io
nameserver 192.168.140.133
nameserver 114.114.114.114
指定端口映射
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80 xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01ea0095f256 xiaomao/mying:v0.5 "/bin/sh -c '/bin/ht…" 7 seconds ago Up 5 seconds 0.0.0.0:32768->80/tcp tinyweb3
[root@xiaomao ~]# docker kill tinyweb3
tinyweb3
[root@xiaomao ~]# docker rm tinyweb3
tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80:80 xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b141c2c0a4a3 xiaomao/mying:v0.5 "/bin/sh -c '/bin/ht…" 15 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 80:80 xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b141c2c0a4a3 xiaomao/mying:v0.5 "/bin/sh -c '/bin/ht…" 15 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp tinyweb3
[root@xiaomao ~]# docker run --name tinyweb3 -d --network bridge -p 192.168.146.133:82:80 xiaomao/mying:v0.5
[root@xiaomao ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7aec2755994a xiaomao/mying:v0.5 "/bin/sh -c '/bin/ht…" 8 seconds ago Up 6 seconds 192.168.146.133:82->80/tcp tinyweb3
#一次性映射多个端口+协议
[root@xiaomao ~]# docker run --name tinyweb4 -d --network bridge -p 80 -p 443 xiaomao/mying:v0.5
[root@xiaomao ~]# docker container port tinyweb4
443/tcp -> 0.0.0.0:32769
80/tcp -> 0.0.0.0:32770
#指定docker的网段
[root@xiaomao ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
04b6cbca66b7 mybr0 bridge local
#宿主机上查看
[root@xiaomao ~]# ip add
59: br-04b6cbca66b7: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:cb:d0:79:4e brd ff:ff:ff:ff:ff:ff
inet 10.10.0.1/24 brd 10.10.0.255 scope global br-04b6cbca66b7
valid_lft forever preferred_lft forever
[root@xiaomao ~]# docker run --name tinyweb5 --rm --network mybr0 -p 80 -p 443 -it xiaomao/mying:v0.5 /bin/sh
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:0A:00:02
inet addr:10.10.0.2 Bcast:10.10.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1086 (1.0 KiB) TX bytes:0 (0.0 B)
#修改docker0网桥的信息
[root@xiaomao ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://wlwmxdoi.mirror.aliyuncs.com"],
"bip": "172.31.0.1/16"
}
[root@xiaomao ~]# systemctl restart docker
[root@xiaomao ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.31.0.1 netmask 255.255.0.0 broadcast 172.31.255.255
inet6 fe80::42:53ff:fef2:a2ed prefixlen 64 scopeid 0x20<link>