docker(3)——docker网络

本文详细介绍了Docker的网络功能,包括原生的bridge、host和none网络模式,强调了bridge模式的网络隔离性和host模式的直接通信。接着讨论了自定义网络,特别是如何创建自定义网桥以及容器间通信的方式,如通过容器名称和DNS解析。还探讨了如何使不同网桥的容器通信。最后,文章提到了跨主机容器网络的解决方案,如macvlan网络,展示了如何配置实现不同主机间的容器互通。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、docker原生网络

  • docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。
  • docker安装后会自动创建3种网络:bridge、host、none

Docker在启动时会开启一个Linux bridge(虚拟网桥设备)docker0,默认的地址为172.17.0.1/16,容器启动后都会被桥接到docker0上,并自动分配到一个ip地址.

实验:
1.查看docker的网络有哪些(发现有三种, bridge,host,none)

2.查看server2上的ip,发现docker0

[root@server2 docker]# yum install -y bridge-utils
[root@server2 docker]# brctl show	
[root@server2 docker]# docker images
[root@server2 docker]# docker run -d --name demo nginx
[root@server2 docker]# docker inspect demo
[root@server2 docker]# ip addr

1.docker网络中的bridge网络模式

bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。

 

[root@server2 docker]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.0242480d51fc	no		vethe8c0370
[root@server2 docker]# docker run -it --rm busybox

[root@server2 docker]# iptables -t nat -nL

 

Bridge桥接模式的缺陷:

        该模式下 Docker Container 不具有一个公有 IP,即和宿主机的 eth0 不处于同一个网段。导致的结果是宿主机以外的世界不能直接和容器进行通信。虽然 NAT 模式经过中间处理实现了这一点,但是 NAT 模式仍然存在问题与不便,如:容器均需要在宿主机上竞争端口,容器内部服务的访问者需要使用服务发现获知服务的外部端口等。另外 NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。

2. docker网络中的host网络模式

  • host网络模式需要在容器创建时指定–network=host
  • host 模式是 bridge 桥接模式很好的补充。采用 host 模式的 Docker Container,可以直接使用宿主机的 IP地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换。
  • host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

 创建host网络模式的一个容器并查看ip,会发现此时的ip与宿主机(docker0)中的ip一样

[root@server2 docker]# docker run -it --rm --network host busybox
/ # ip addr
/ # 
[root@server2 docker]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
98199ce260c1   nginx     "/docker-entrypoint.…"   8 minutes ago   Up 8 minutes   80/tcp    demo
[root@server2 docker]# docker rm -f demo
demo

[root@server2 docker]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
98199ce260c1   nginx     "/docker-entrypoint.…"   8 minutes ago   Up 8 minutes   80/tcp    demo
[root@server2 docker]# docker rm -f demo
demo
[root@server2 docker]# docker run -d --name demo --network host nginx  ##端口冲突
[root@server2 docker]# docker run -d --name demo2 --network host nginx
[root@server2 docker]# docker ps 
[root@server2 docker]# docker ps -a
[root@server2 docker]# netstat -antlp
[root@server2 docker]# docker rm -f demo2
demo2
[root@server2 docker]# 

3. docker网络中的none网络模式

none模式是指禁用网络功能,只有lo接口,在容器创建时使用–network=none指定。

创建一个none网络模

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值