Docker网络

简介: Docker网络

从docker的架构和运行流程来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。


Docker运行的基本流程为:


1.用户是使用Docker Client 与 Docker Daemon建立通信,并发送请求给后者。

2.Docker Daemon 作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。

3.Docker Engine 执行Docker内部的一系列工作,每一项工作都是一个Job形式得存在。

4.Job得运行过程中,当需要容器镜像时,则从Docker Registry 中下载镜像,并通过镜像管理驱动Graph将下载的驱动以Graph的形式存储。

5.当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。

6.当需要限制Docker容器运行资源或执行用户指令等操作时,则通过Execdriver来完成。

7.Libcontainer是一项独立的容器管理包,Network driver以及Execdriver 都是通过Libcontainer来实现具体对容器的操作。


我们安装和运行docker后,运行ifconfig命令查看一下网络,会产生一个名为docker0的虚拟网桥:


5195faf5ce5f44d88f57cf7caf99ac2b.png


我们查看一下docker网络模式:


docker network ls


f7a28289c80f41c0990a1259059f51b9.png


docker会默认创建3大网络模式。

下面来学习一下docker network的常用命令


fc24b086929841ca9af6fd4ff80591c9.png


命令不多,就那么几个。


查看网络的命令


docker network ls


查看网络数据源的命令:


docker network inspect xxx网络名称


删除网络的命令:


docker network rm xxx网络名称


案例:

ecad1261f3f1469a930ce6c46d254e47.png


好的,上面了解过docker的一些常用命令后,接下来就来看看docker network 能干什么?


所有网络的访问,要在同一网段。如果要做docker网络管理和容器调用之间的规划、容器间的互联和通信以及端口映射,就涉及到docker network的知识了。


网络模式


70e0497fb8214dc99cda869d322582c0.png


none和container几乎不会用,主要使用前两种。


5f5b02d9ad454de39e59cda7d0b8cf7c.png


容器实例内默认网络IP的生产规则:


先启动两个ubuntu容器实例


d1fe1380ec8546c09b1b7e3bc13bee21.png


docker inspect 容器ID or 容器名字


a1536eebe04e445e969c8a734895c858.png


上面可以知道,目前的网络属于桥接网络,网关是127.0.0.1 ,u1的IP是127.0.0.2,u2的IP是127.0.0.3。


关闭u2实例,新建u3,查看ip变化


1bf56f09b8b04544863f05dcf8ae0d22.png


会发现u3的IP是127.0.0.3,这个地址不是之前u2的吗,居然变成了u3的IP地址。这说明了docker容器内部的IP是有可能发生改变的。


bridge模式

Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机和容器之间可以通过网桥相互通信。


网桥docker0创建一对对等虚拟设备接口,一个叫veth,另一个叫eth0,成对匹配。


decdd362c0e94f2cb50cbcfcf2db06b7.png


查看 bridge 网络的详细信息,并通过 grep 获取名称项


docker network inspect bridge | grep name


1534a99bdd9d4cf2bbab864147aa661e.png

ifconfig | grep docker


host模式

直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。他的网络就和主机的eth0(ens33)在同一个网络了。


4481fbbf93434816b29b39a5a4890430.png


问题:


 docke启动时总是遇见标题中的警告


原因:


docker启动时指定--network=host或-net=host,如果还指定了-p映射端口,那这个时候就会有此警告,


并且通过-p设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。

解决:


解决的办法就是使用docker的其他网络模式,例如--network=bridge,这样就可以解决问题,或者不指定端口映射,又或者直接无视。。O(∩_∩)O哈哈~
相关文章
|
2月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
34 5
|
2月前
|
调度 Docker 容器
docker swarm创建覆盖网络
【10月更文挑战第16天】
30 5
|
2月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
30 4
|
2月前
|
应用服务中间件 nginx Docker
docker swarm创建覆盖网络
【10月更文挑战第14天】
20 3
|
2月前
|
数据安全/隐私保护 Docker 容器
docker swarm创建网络
【10月更文挑战第15天】
26 1
|
2月前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
27 2
|
20天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
20天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。
|
20天前
|
Kubernetes Docker 容器
【赵渝强老师】Docker的Container网络模式
Docker容器在网络环境中彼此隔离,但可通过配置不同网络模式实现容器间通信。其中,container模式使容器共享同一网络命名空间,通过localhost或127.0.0.1互相访问,提高传输效率。本文介绍了container模式的特点及具体示例。
|
20天前
|
Linux Docker 容器
【赵渝强老师】Docker的Bridge网络模式
本文介绍了Docker容器的网络隔离机制及其四种网络模式:bridge、container、host和none。重点讲解了默认的bridge模式,通过示例演示了如何创建自定义bridge网络并配置容器的网络信息。文中还附有相关图片和视频讲解,帮助读者更好地理解Docker网络的配置和使用方法。