Docker的网络模式
Posted 小Pawn爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker的网络模式相关的知识,希望对你有一定的参考价值。
Docker常见的几种网络模式
docker network ls
查看使用了哪些网络
[root@centos8-nat-168-182-152 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
c0184302f6a8 bridge bridge local
420492e04276 host host local
fc5e9b954735 none null local
[root@centos8-nat-168-182-152 ~]# docker network inspect bridge(网络名称)
我们在使用 docker run 创建 Docker 容器时,可以用 –net 选项指定容器的网络模式,Docker 可以有以下 4 种网络模式:
-
bridge 模式:使用
--net=bridge
指定,默认设置。 -
host 模式:使用
--net=host
指定。 -
none 模式:使用
--net=none
指定。 -
container 模式:使用 --net=
container:NAME_or_ID
指定。
网络模式 | 含义 |
---|---|
Bridge(默认模式) | 此模式会为每一个容器分配,设置IP等,并将容器连接到一 docker0 虚拟网桥,通过 docker0网桥以及Iptables nat 表配置与宿主机通信。 |
Host | 容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的IP和端口 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享 IP,端口范围。 |
None | 该模式关闭了容器的网络功能,与宿主机,与其他容器都不连通的. |
1.Bridge
Bridge模式是启动容器时的默认模式,当Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥
网桥模式不太适用于生产环境,因为网桥背后涉及很多底层工作,会导致相当大的开销
--icc=false
表示把容器之间的通信关闭,--iptables=true --icc=false
已连接的容器才能通信
docker inspect jenkins
docker inspect --format='.NetworkSettings.NewtWork.IPAddress' jenkins
主机网络
容器内部网络
2.Host
Host:容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的IP和端口
不涉及网桥模式中底层开销,因此速度与常规的主机网络一样快,面向外部网络流量大的容器(例如代理和缓存)可以使用主机模式,而其他容器则使用内部网络模式
$ docker inspect jenkins
对比一下宿主机 / etc/hosts,一模一样
$ docker execjenkins cat /etc/hosts
$ cat /etc/hosts
3.Container
container创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享 IP,端口范围
# 创建容器
$ docker run --name=busybox_jenkins --net=container:bridge -td jenkins
# 查看新创建容器的IP,上面这种方式查不出来
$ docker inspect --format='.NetworkSettings.IPAddress' jenkins
# 通过ifconfig查询ip
$ docker exec busybox_jenkins ifconfig
4.None
$ docker run -dt --net=none --name busybox_jenkins jenkins
# 查看它的网络状态, 验证它仅有 lo 接口,不能与容器外通信
$ docker exec busybox_jenkins ip a
5.Docker实现内外网络通信
ip_forward: linux内核中用于开关内核的报文转发功能,只有这个开关被打开时,内核才会执行报文的转发
默认情况下,容器可以主动访问到外部网络的连接,但是外部网络无法访问到容器
# 临时修改
$ echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久修改
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
$ sysctl -p
查看默认路由
$ route -n
# 或者
$ ip route
添加路由映射
$ ip route add <container_ip_address> via <host_ip_address> dev <network_interface>
Docker 容器的网络模式
- 默认的三种网络模式
- bridge:桥接模式
- host:主机模式
- none:无网络模式
- 查看网络模式
- docker network ls
Docker 桥接网络模式
- 桥接模式是docker的默认网络设置,当Docker服务启动时,会在主机上创建一个名为docker-0的虚拟网桥,并选择一个和宿主机不同的IP地址和子网分配给docker-0网桥
- 桥接拓扑图
-
- 查看桥接情况
- 安装工具 yum install -y net-tools
- yum install -y bridge-utils
- brctl show
以上是关于Docker的网络模式的主要内容,如果未能解决你的问题,请参考以下文章