docker的三种原生网络(bridge,host,none)

docker自带的网络模式有bridge,none,host,
docker network ls #查看docker网络

一、bridge模式
docker的默认模式,docker进程第一次启动会创建一个docker0虚拟网桥,
此宿主机上启动的容器会默认连接到这个网桥上,容器通过这块网桥NAT访问外部网络,
当执行docker run 加入-p参数是,实际是在iptables中加入了对应的DNAT端口转发规则。
二、host模式
host模式的容器跟宿主机共用一个namespace,拥有一样的IP和路由,因此容器内的服务端口不能跟宿主机相同
三、none模式
none模式创建的容器没有添加网卡,需要自行配置
四、container模式
container模式创建一个跟指定容器共用网络的新容器

1. docker的三种原生网络

在这里插入图片描述
查看三种原生网络

在这里插入图片描述在这里插入图片描述
可以看到容器的宿主机server1上面多了一个网桥接口,这个桥接接口供容器和外界通信
类似于物理机和虚拟机的关系,虚拟机要上网就得通过物理机才可以

在这里插入图片描述(1)bridge模式

运行一个容器

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
可以看到这个容器的ip与桥接接口在一个网段,并且ip地址以网桥ip为基础递增,以网桥ip为网关

开启容器的时候宿主机就能ping通容器

在这里插入图片描述

以上就是基本的bridge模式,一般开启的容器默认使用的也是这种网络模式

注意:bridge模式只有宿主机才能与运行在其上面的容器进行通信

记住以下几点就可以:
宿主机上有桥接接口,上面有IP
开启的容器会自动分配和IP在一个网段的ip地址,并且开启的容器的ip以IP为基础递增
关闭容器之后,ip会自动释放

(2)host模式

在这里插入图片描述在这里插入图片描述
以host模式运行一个容器vm1

[root@server1 ~]# docker run -it --name vm1 --network host busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 52:54:00:dc:b7:52 brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.1/24 brd 172.25.254.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fedc:b752/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue 
    link/ether 02:42:d6:9a:3b:e7 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:d6ff:fe9a:3be7/64 scope link 
       valid_lft forever preferred_lft forever

在这里插入图片描述
可以看到容器vm1的网络与宿主机一模一样
但可以看到宿主机和容器的运行环境不一样,这就是容器共享宿主机的网络

在这里插入图片描述
接下来host模式运行一个nginx容器

[root@server1 ~]# docker run -d --name vm1 --network host nginx
a92b4b91a095077c37d9f98560df76c8d3f9d106fa9d1205b376349b02d5d962
[root@server1 ~]#

在这里插入图片描述
在真机上可以访问到宿主机的ip,看到nginx服务的默认页面,其实访问的是容器
因为容器的ip与宿主机的ip一模一样

在这里插入图片描述
不是bridge模式,因此桥接没有

[root@server1 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242d69a3be7	no		
[root@server1 ~]# 

(3)none模式

在这里插入图片描述
可以看到只有回环接口,宿主机禁止容器使用网络
对于那种比较机密的服务所在的容器可以使用这种网络模式

[root@server1 ~]# docker run -it --name vm2 --network none busybox
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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
/ # 

在这里插入图片描述

发布了260 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yrx420909/article/details/105416521