docker网络模式

本文详细介绍了Docker中的四种网络模式:host、container、none和bridge,包括它们的工作原理、特点以及如何创建和管理网络。还涵盖了外部访问容器的方法,如端口映射和容器间通信的link方式。
摘要由CSDN通过智能技术生成

四种网络模式

host模式 --net=host 容器和宿主机共享Network,namespace

container模式 --net=container:NAME_or_ID 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace

none模式 --net=none 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置IP等。

bridge模式 --net=bridge 默认为该模式

可以通过docker network ls进行查看

可以通过docker network inspect 来查看相关信息

Bridge网络模式

安装docker时会自动创建一个docker0网桥,运行容器时,可以使用docker run --network=选项指定容器应连接到哪个网络,否则Docker守护进程默认将容器连接到docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

Docker随机分配一个本地未占用的私有网段(在PFC1918中定义)中的一个地址给docker0接口。此后启动容器内的网口也会自动分配一个同一网段的地址。docker0的IP地址则为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中(bridge模式示意如下图所示),可以通过brctl show查看。

通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。Docker就创建了在主机和容器之间一个虚拟共享网络。

注:bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看

也可以自定义网桥:

docker network create -d bridge my-bridge

Host网络模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口,但是,容器的其他方面,如文件系统、进程、列表等还是和宿主机隔离的。Host模式示意图如下所示。

docker run --network=host

Container网络模式

docker run --network container:b1

这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他如文件系统、进程列表等还是隔离的,两个容器的进程可以通过lo网卡设备通信

None网络模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息,只有lo网络接口,需要我们自己为Docker容器添加网卡、配置等。

不参与网络通信,运行于此类容器中的进程仅能访问本地环回接口;仅适用于进程无须网络通信的场景中,例如:备份、进程诊断及各种离线任务等。None模式示意图如下所示。

docker run --network=none

外部访问Docker容器(docker run -p/-P指令)

1.当使用-P标记时,Docker会随机映射一个49000~49000的端口到内部容器开放的网络端口。

2.-p则可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器。支持的格式有hostPort:containerPort、ip:hostPort:containerPort、ip::containerPort。

将容器的5000端口映射到指定地址127.0.0.1的5000端口上

docker run -it -d -p 127.0.0.1:5000:5000 docker.io/centos:latest /bin/bash

将容器的4000端口映射到127.0.0.1的任意端口上

docker run -it -d -p 127.0.0.1::4000 docker.ip/centos:latest /bin/bash

将容器的80端口映射到宿主机的8000端口上

docker run -itd -p 8000:8000 docker.ip/centos:latest /bin/bash

查看映射端口配置:docker port CONTAINER_ID

Docker容器间通信

使用link方式使容器间可以相互通信

docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以相互通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量

docker run --name bbs -p 80:80 --link MySQL:mysql -d --restart=always docker.io/y109/discuz

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值