【Docker】Docker网络

本文深入探讨了Docker的网络实现原理,包括Host、Container、none、bridge和自定义网络模式。此外,还详细介绍了如何通过Cgroup对Docker容器的CPU、内存和磁盘I/O进行资源控制。


一、Docker 网络实现原理

  Docker使用Limux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个地址,称为 Container-IP。同时Docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

  Docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法直接通过Container-IP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即 docker run创建容器时候通过 –p-P参 数来启用,访问容器的时候就通过 [宿主机IP]:[容器端口] 访问容器。

docker run -d --name test1 -P nginx				#随机映射端口(从32768开始)
docker run -d --name test2 -p 43000:80 nginx	#指定映射端口
docker ps -a

在这里插入图片描述

浏览器访问: http://192.168.145.15:43000、http://192.168.145.15:32768

在这里插入图片描述

#查看容器的输出和目志信息
docker logs 容器的ID/名称

docker logs test1

在这里插入图片描述

二、Docker 的网络模式

网络模式 功能
Host 容器不会虚拟出自己的网卡,配置主机的IP等,而是使用宿主机的IP和端口
Container 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口的范围。
None 该模式关闭了容器的网络功能。
Bridge 默认为该模式,此模式会为每一个容器分配,设置IP等,并将容器连接到一个docker0的虚拟网桥,通过docker0 网桥以及iptables nat表配置与宿主机通信。
自定义网络 可以基于Bridge创建网络进行通信

  安装Docker时,它会自动创建三个网络:bridge(创建容器默认连接到此网络)、none、host。

#查看docker网络列表
docker network ls
或
docker network list

在这里插入图片描述

  使用docker run创建容器时,可以用 --net--network 选项指定容器的网络模式。

  • host模式:使用–net=host 指定。
  • none模式:使用–net=none指定。
  • container模式:使用–net=container:NAME_or_ID指定。
  • bridge模式:使用–net=bridge指定,默认设置,可省略。

1. Host 模式

  相当于VMware中的桥接模式,与宿主机在同一个网络中,但是没有独立IP地址。

  Docker 使用了Linux 的Namespace 技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace 隔离网络等。一个Network Namespace 提供了一份独立的网络环境,包括网卡、路由、iptable 规则等都与其他Network Namespace 隔离。

  一个Docker 容器一般会分配一个独立的Network Namespace。但是如果启动容器的时候使用host 模式,那么这个容器将不会获得一个独立的Network Namespace ,而是和宿主机共用一个Network Namespace 。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
在这里插入图片描述

2. Container 模式

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-usE1XgR6-1689840587494)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230720143808387.png)]

docker run -itd --name test1 centos:7 /bin/bash			#--name 选项可以给容器创建一个自定义名称

docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
1688881f7c69   centos:7   "/bin/bash"   4 seconds ago   Up 3 seconds             test1

docker inspect -f '{
   
   {.State.Pid}}' 1688881f7c69		#查看容器进程号
12950

在这里插入图片描述

ls -l /proc/12950/ns					#查看容器的进程、网络、文件系统等命名空间编号
lrwxrwxrwx 1 root root 0 720 14:26 ipc -> ipc:[4026532452]
lrwxrwxrwx 1 root root 0 720 14:26 mnt -> mnt:[4026532450]
lrwxrwxrwx 1 root root 0 720 14:24 net -> net:[4026532455]
lrwxrwxrwx 1 root root 0 7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的宝贝大唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值