5.1 Docker 的四种网络模式
网络模式 | 网络配置 | 说明 |
---|---|---|
host(开放式网络模式) | –network host | 容器和宿主机共享 Network namespace |
container(联合挂载式网络模式) | –network container | 多个容器共享一个 Network namespace |
none(封闭式网络模式) | –network none | 将容器放置在它自己的网络栈中,但是并不进行任何配置,该模式关闭了容器的网络功能 |
bridge(桥接式网络模式) | –network bridge | Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等 |
- docker network 查看 docker 网络模式
[root@docker ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
15791bf83278 bridge bridge local
df75b40e39f6 host host local
f89ee64125bc none null local
- docker run --network 命令可以指定使用的网络模式
5.2 host 模式
5.2.1 host 模式介绍
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 。但是, 容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的 。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
5.2.2 host 模式演示
- 以 host 网路模式运行容器centos
[root@docker ~]# docker run -itd --name centos --network host centos:latest
- 查看该容器的网络模式
[root@docker ~]# docker inspect 40c4e28bd29c | grep -i network
"NetworkMode": "host",
"NetworkSettings": {
"Networks": {
"NetworkID": "df75b40e39f671cbc4d287fefce8b7b64819fcad453cfe7f34831f6490480760",
- 查看容器 IP
[root@docker ~]# docker exec -it $(docker ps -q) hostname -I
192.168.117.130 172.17.0.1
5.3 container 模式
5.3.1 container 模式介绍
这个模式指定 新创建的容器和已经存在的一个容器共享一个 Network Namespace ,而不是和宿主机共享。 新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围 等。同样, 两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的 。两个容器的进程可以通过 lo 网卡设备通信。