docker 网络配置

本文详细介绍了Docker的网络配置,包括bridge、host、none和container四种网络模式的工作原理与实验验证。此外,还探讨了自定义网络、容器间通信、访问外网的策略,以及跨主机网络解决方案如macvlan。通过实验展示了如何配置容器网络,实现不同网络模式下的容器互访和外网通信,强调了网络隔离性和性能的重要性。
摘要由CSDN通过智能技术生成

一.基本网络配置–docker网络模式
docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。
docker安装后会自动创建3种网络:bridge、host、none
Docker在启动时会开启一个虚拟网桥设备docker0,默认的地址为172.17.0.1/16,容器启动后都会被桥接到docker0上,并自动分配到一个ip地址

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

[root@server1 ~]# docker network ls
1


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

[root@server1 ~]# ip addr
1


二.基本网络配置–容器的四种网络模式
(一)docker网络中的bridge网络模式
bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。


Bridge 桥接模式的实现步骤主要如下:

Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备,假设为veth0 和 veth1。而
veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。

Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0
网桥上。保证宿主机的网络报文可以发往 veth0;

Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为
eth0。如此一来,保证宿主机的网络报文若发往 veth0,则立即会被 eth0 接收,实现宿主机到Docker Container网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性

Bridge桥接模式的缺陷:

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

实验:
1.创建一个别名为vm1的容器并查看其ip,发现其ip为 172.17.0.3/16(这是因为当容器桥接docker0后,会自动分配ip地址,然后逐渐递增)

[root@server1 ~]# docker run -it --name vm1 ubuntu
root@6269c5f20354:/# ip addr
1
2

2.设备vethed03df5连接在了docker0上
#docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。

[root@server1 ~]# brctl show
1


3.查看真实物理机上的ip,发现多了一个虚拟网卡,且注意vethed03df5@if4与容器间的是成对的

[root@server1 ~]# ip addr show
1

4.查看vm1的情况中的Pid(每个容器都会有一个独立的Pid)

[root@server1 ~]# docker inspect vm1 | grep Pid
1


5.查看关于此Pid容器网络的文件(每一个独立的Pid都会在/proc目录下有一个相应的以Pid为名的目录,这个目录里面的ns目录有着关于这个Pid容器网络的文件):

[root@server1 ~]# cd /proc/12652/
[root@server1 1872]# ls
[root@server1 1872]# cd ns/
[root@server1 ns]# ll
1
2
3
4

注意:
veth设备是成双成对出现的,一端是容器内部命名为eth0,一端是加入到网桥并命名的veth(通常命名为veth),它们组成了一个数据传输通道,一端进一端出,veth设备连接了两个网络设备并实现了数据通信**

(二)docker网络中的host网络模式

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

Host 网络模式的缺陷:
最明显的是 Docker Container 网络环境隔离性的弱化。即容器不再拥有隔离、独立的网络栈。
另外,使用 host 模式的 Docker Container 虽然可以让容器内部的服务和传统情况无差别、无改造的使用,但是由于网络隔离性的弱化,该容器会与宿主机共享竞争网络栈的使用;
另外,容器内部将不再拥有所有的端口资源,原因是部分端口资源已经被宿主机本身的服务占用,还有部分端口已经用以 bridge 网络模式容器的端口映射。
实验:
1.重新创建host网络模式的一个容器vm2并查看ip,会发现此时的ip与宿主机(docker0)中的ip一样

[root@server1 ~]# docker run -it --name vm2 --network=host ubuntu
root@server1:/# ip addr
root@server1:/# [root@server1 ~]#
1
2
3


2.证明(容器vm2中的ip和宿主机(docker0)中的ip一样):

[root@server1 ~]# ip a
1


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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值