当前位置: 代码网 > 服务器>服务器>云虚拟主机 > docker network_mode: "host" 网络配置方式

docker network_mode: "host" 网络配置方式

2024年06月02日 云虚拟主机 我要评论
docker network_mode: "host" 网络配置[root@ecs02 ~]# cat /etc/hostnameecs02[root@ecs02 ~]# cat

docker network_mode: "host" 网络配置

[root@ecs02 ~]# cat  /etc/hostname
ecs02

[root@ecs02 ~]# cat /etc/hosts
127.0.0.1       localhost       localhost.localdomain   localhost4      localhost4.localdomain4
::1     localhost       localhost.localdomain   localhost6      localhost6.localdomain6
172.18.150.42   ecs02   ecs02

[root@ecs02 ~]# cat /etc/sysconfig/network
# created by anaconda

docker network 模式

docker network 有五种模式:

  • host 模式
  • container 模式
  • none 模式
  • bridge 模式
  • 用户 自定义

host 模式

docker run -it --name myubuntu --net=host ubuntu /bin/bash

众所周知,docker使用了linux的namespaces技术来进行资源隔离,如pid namespace隔离进程,mount namespace隔离文件系统,network namespace隔离网络等。一个network namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的network namespace隔离。

一个docker容器一般会分配一个独立的network namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的network namespace,而是和宿主机共用一个network namespace。容器将不会虚拟出自己的网卡,配置自己的ip等,而是使用宿主机的ip和端口。

例如,如果宿主机的ip地址是192.168.1.100,使用host模式新建一个容器,加入容器中运行的是nginx应用,绑定在容器的80端口上,外部主机可以直接通过192.168.1.100:80访问容器中的web应用,而使用docker run运行容器时不需要指定-p参数.即在使用host模式时,容器中的应用都直接绑定在宿主机的端口上,没有nat转换.但容器的其他如文件系统等还是隔离的.

这种模式下,在容器中运行ifconfig命令会显示宿主机eth0的信息.

container 模式

docker run -it --name myubuntu --net=container:name_or_id ubuntu /bin/bash

container模式,顾名思义,就是在运行容器时通过--net指定另一个已经在运行的有单独network namespace的容器,然后与这个容器共享一个network namespace.在这种情况下,新建的容器没有自己的网卡,也不会给它分配ip,而是两个容器共享ip和端口空间.

此时,在当前容器中执行ifconfig命令会显示container指定的容器的eth0信息.

none 模式

docker run -it --name myubuntu --net=none ubuntu /bin/bash

none模式下,docker会为新创建的容器分配自己的network namespace,但不会为这个容器的网络进行任何配置,容器也没有自己的ip网卡等信息,需我们为其配置.

bridge 模式

这是docker的默认模式.

当docker服务启动时,docker会在宿主机上建立一个虚拟网桥docker0,宿主机上启动的容器会连接到这个虚拟网桥上.

docker会在一个可用网段(一般是172.17.0.0/16这个网段)中为docker0分配一个ip地址(一般是172.17.0.1),而每创建一个使用bridge网络模式的新的容器,docker就会在上面的网段中选择一个尚未分配的ip地址分配给容器的eth0网卡.

实际的网络配置过程是这样的:

docker在主机上创建一对veth pair虚拟网卡设备,veth设备总是成对出现,它的工作模式类似于管道,数据从一头进去,从另一头出来.docker将这对虚拟网卡的一段连接到容器的eth0端口上,另一端与docker0网桥相连.这样,docker容器就能与宿主机通信了.

在给docker容器分配ip时,默认将docker0的地址作为容器的网关.

用户自定义网络

用户可以通过docker网络驱动器或其他的网络驱动器自定义网络。你可以将许多容器连接到同一个网络上,一旦连接到了自定义的网络上,容器之间就可以通过对方的ip地址和主机名来进行通信了。

如果容器连接到了用户自定义的网络上,容器的/etc/hosts文件会加入在同一个网络中的其他所有容器的ip地址。

由于容器有可能随时改变/etc/hosts文件,容器中的程序可能会读取到不完整的甚至空的/etc/hosts文件。通常重新读取可以解决这个问题。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com