docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker Network(网络)

docker Network(网络)详解

作者:南猿北者

这篇文章主要介绍了docker Network(网络),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

docker为什么需要网络管理?

容器的网络默认与宿主机及其他容器都是相互隔离, 但同时我们也要考虑下面的一些问题, 比如:

docker网络架构简介

Docker 容器网络是为应用程序所创造的虚拟环境的一部分,它能让应用从宿主机操作系统的网络环境中独立出来,形成容器自有的网络设备、IP 协议栈、端口套接字、IP路由表、防火墙等等与网络相关的模块。

Docker 为实现容器网络,主要采用的架构由三部分组成:CNM、Libnetwork 和驱动。

CNM:

Docker 网络架构采用的设计规范是 CNM(Container Network Model)。CNM 中规定了 Docker 网络的基础组成要素:Sandbox、Endpoint、Network。

在这里插入图片描述

如上图所示,容器 B 有两个 Endpoint 并且分别接入 Networkd A 和 Network B。那么容器 A 和容器 B 之间是可以实现通信的,因为都接入了 NetworkA。但是容器 A 和容器 C 不可以通过容器 B 的两个 Endpoint 通信。

Libnetwork:

驱动

常见的网络类型

1. bridge网络:

2. host网络:

3. container 网络:

4. none 网络:

5. overlay 网络:

在 Docker 安装时,会自动安装一块 Docker 网卡称为 docker0,它是一个网桥设备,主要用于 Docker 各容器及宿主机的网络通信:

在这里插入图片描述

docker网络管理命令

docker network create

语法: docker network create [OPTIONS] NETWORK 

功能: 创建一个网络,不指定-d选项,默认是桥接网络 

参数:

实战:

在这里插入图片描述

在这里插入图片描述

docker network inspect

语法: docker network inspect [OPTIONS] NETWORK [NETWORK…] 

功能: 查看一个或多个网络的详细信息 

参数:

实战:

在这里插入图片描述

docker network connect

语法: docker network connect [OPTIONS] NETWORK CONTAINER 

功能: 将一个容器连接进一个网络 

参数:

实战:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

docker network disconnect

语法: docker network disconnect [OPTIONS] NETWORK CONTAINER 

功能: 断开容器与网络的连接,并且在执行该命令的时候,容器必须正在运行; 

参数:

实战:

在这里插入图片描述

docker network prune

语法: docker network prune [OPTIONS] 

功能: 删除所有未被容器引用的网络; 

参数:

实战:

在这里插入图片描述

docker network rm

语法: docker network rm NETWORK [NETWORK…] 

别名: docker network remove 

功能: 删除一个或多个网络 

参数:

实战:

在这里插入图片描述

docker network ls

语法: docker network ls [OPTIONS] 

别名: docker network list 

功能: 列出所有的网络 

参数:

实战:

在这里插入图片描述

网络详解

docker bridge网络

Docker Bridge 网络采用内置的 bridge 驱动,bridge 驱动底层采用的是 Linux 内核中Linux bridge 技术。

就网络而言,bridge 网络是在网络段之间转发流量的链路层设备,而网桥可以是在主机内核中运行的硬件设备或软件设备;就 Docker 而言,桥接网络使用软件网桥 docker0,它允许连接到同一网桥网络的容器进行通信,同时提供与未连接到该网桥网络容器的隔离。

在这里插入图片描述

默认情况下,创建的容器在没有使用–network 参数指定要加入的 docker 网络时,

默认都是加入 Docker 默认的单机桥接网络,即下面的 name 为 bridge 的网络。

其中,容器、bridge和Host::eth0之间的之间的关系可以参考:手机、路由器、光猫之间的关系;

在日常的生活中,我们手机发出的数据包想要发送到外网的话,那么需要先将数据包发送给路由器,路由器的WAN口连接着光猫,因此路由器在拿到数据包过后,又会将其转发给光猫,再由光猫将数据转发到外网;

默认的 bridge 网络会被映射到内核中为 docker0 的网桥上。

Docker 默认的 bridge 网络和 Linux 内核中的 docker0 网桥是一一对应的关系。

bridge 是 Docker 对网络的命名,而 docker0 是内核中网桥的名字。

在这里插入图片描述

注意:

docker Host网络

Docker 容器运行默认都会分配独立的 Network Namespace 隔离子系统, 但是如果基于 host 网络模式,容器将不会获得一个独立的 Network Namespace,而是和宿主机共用同一个 Network Namespace,容器将不会虚拟出自己的网卡,IP 等,而是直接使用宿主机的 IP 和端口。

在这里插入图片描述

连接到 host 网络的容器共享宿主机的网络栈,容器的网络配置与宿主机完全一样。我

们可以通过 --network=host 指定使用 host 网络。

docker Container 网络

Docker Container 的 other container 网络模式是 Docker 中一种较为特别的网络的模式。之所以称为“other container 模式”,是因为这个模式下的 Docker Container,会使用其他容器的网络环境。之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于 bridge 桥接模式与 host 模式之间。Docker Container 共享其他容器的网络环境,则至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。

在这里插入图片描述

Docker Container 的 other container 网络模式实现逻辑如下:

心得:

docker none 网络

none 网络就是指没有网络。挂在这个网络下的容器除了 lo(本地回环),没有其他任何网卡。

心得:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文