docker ip地址_docker的网络连接

以下大部分信息采用此博客:

docker 之网络配置-13352895-51CTO博客​blog.51cto.com
908c57c4d6da06601ff20d7e770e3ffc.png

对于docker的了解仅停留在听说过的水平。最近在搞一个神经网络模型,用户发送一段信息,然后神经网络对信息进行处理,并返回结果。期间要用上很多个服务器。一台一台去部署环境要疯了。于是想到了用docker。

对于docker的安装部署暂且不谈,这个网上搜一下一大堆。现在仅就docker如何通过端口和宿主机进行交互记录一下今天学到的东西。

要实现网络通信,至少要有一个网络接口,无论他是物理接口还是虚拟机那样的虚拟接口。

在Docker中,网络接口默认都是虚拟接口。

Docker在创建容器的时候,一般不用你去特意关注接口,他会执行如下操作:

1、创建一对虚拟接口,分别放在宿主机和容器中

2、宿主机默认链接到docker0或者指定的桥上。

3、容器一端放到容器中,其名字为eth0,这个接口只在容器的名字空间中可见。

4、从网桥可用地址中获取一个空闲的地址分配给容器的eth0,并配置默认路由到桥接网卡veth65f9.

可以在 docker run 的时候通过 --net 参数来指定容器的网络配置,有4个可选值:

  • --net=bridge 这个是默认值,连接到默认的网桥。
  • --net=host 告诉 Docker 不要将容器网络放到隔离的名字空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其 它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true,容器会被允许直接配置主机的网络堆栈。
  • --net=container:NAME_or_ID 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 lo 环回接口通信。
  • --net=none 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。

1、bridge 模式

Docker 容器默认使用 bridge 模式的网络。其特点如下:

  • 使用一个 linux bridge,默认为 docker0
  • 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上
  • 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内
  • Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部
  • 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port
  • NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。
  • 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信

1c88b1ad3894d7aa743939babe9ce8e2.png

2、Host 模式

定义:

Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:

  • 这种模式下的容器没有隔离的 network namespace
  • 容器的 IP 地址同 Docker host 的 IP 地址
  • 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
  • host 模式能够和其它模式共存

2ab679b531b2634ca70cdca8ecbec8e8.png

3、container 模式

定义:

Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

6f0c0b942294f4dc260a1126a6b2999e.png

4、none 模式

定义:

网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。

docker run -it --name web ubuntu

7548060e3bb2c04c9f42e8b7e9afe22e.png

这时候我们看到容器的地址出现了是172.17.0.3 这时候我们宿主机ping一下此地址,发现ping的通。

同样,我们如果再run一个docker,同样查看其ip,发现他的ip变成了172.17.0.4。这也验证了容器通过容器的eth0这个口交换信息。那么我们再查看一下docker0的地址和宿主机的eth0:

41449d7bdf07d740d0930b52a5a989ed.png

发现docker0和宿主机的eth0是不变的。此时的docker0就相当于一个虚拟的路由交换器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值