第八章-网络

1. Docker为什么需要网络

参考:比特就业课

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

上述的这些问题都需要我们对容器的网络进行合理的管理才能解决,这就体现出了容器网络管理的重要性。

2. Docker网络架构模型

CNM

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

3. 常见Docker网络类型

3.1 bridge 网络

bridge 驱动会在 Docker 管理的主机上创建一个 Linux 网桥。默认情况下,网桥上的容器可以相互通信。也可以通过 bridge 驱动程序配置,实现对外部容器的访问。Docker 容器的默认网络驱动.当我们需要多个容器在同一个 Docker 主机上通信时,桥接网络是最佳选择。

3.2 host 网络

对于独立容器,移除容器和 Docker 主机之间的网络隔离,并直接使用主机的网络。当网络堆栈不应该与 Docker 主机隔离,但是希望容器的其他资源被隔离时,主机网络是最佳选择。

3.3 container 网络

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

3.4 none 网络

Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。容器完全网络隔离。

3.5 overlay 网络

借助 Docker 集群模块 Docker Swarm 搭建的跨 Docker Daemon 网络。将多个Docker 守护进程连接在一起,使集群服务能够相互通信。当我们需要运行在不同Docker 主机上的容器进行通信时,或者当多个应用程序使用集群服务协同工作时,覆盖网络是最佳选择。

4. 命令详解

4.1 命令清单

命令功能
docker network create创建网络
docker network connect连接网络
docker network disconnect断开网络
docker network ls列出网络
docker network prune删除不使用的网络
docker network inspect查看网络详情
docker network rm删除1个或多个网络

4.2 docker network create

一创建出来就自带了三个网络。

关键参数。

默认给的就是bridge驱动。

4.3 docker network inspect

参数

4.4 docker network connect

于将容器连接到网络。可以按名称或 ID 连接容器。 一旦连接,容器可以与同一网络中的其他容器通信。

关键参数。

实操。

启动一个容器,然后看他的ip。

连上网,ifconfig就可以看到了。

4.5 docker network disconnect

参数。

4.6 docker network prune

删除不使用的网络。

参数。

4.7 docker network rm

删除一个或多个网络。

参数。

4.8 docker network ls

遍历所有网络。

5. Docker Bridge 网络

5.1 bridge网络详解

5.1.1 什么是bridge网络

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

5.1.2 操作案例一

启动两个镜像。

在第一个容器ping第二个,在第二个容器ping第一个。

这两个就是两个容器的ip地址。

第一个ping第二个,ping成功了。

第二个ping第一个,也ping到了。

5.1.3 操作案例二

默认情况下,如操作案例一所示。我们默认创建的容器都会连接在docker0这个bridge上。但是我们也可以用我们自定义的bridge来通信。

先创建一个网络。

看一下这个桥的信息。

启动两个容器。

可以ping通。

5.2 DNS解析

Docker 自定义桥接网络是支持通过 Docker DNS服务进行域名解析的, 也就是说我们可以直接使用容器名进行通信,因为 DNS 服务可以解析容器名到 IP 地址的映射, 但是默认的 bridge网络是不支持 DNS 的。

实验很简单,就是用容器名字来ping就行了,其他步骤和#5.1的是一样的。

结论:

5.3 端口的暴露和转发

先启动一个nginx容器。

6. Docker Host 网络

6.1 什么是host网络

意思就是,根本就不需要虚拟的网卡,直接连宿主机的网卡,直接用宿主机的。

6.2 操作案例

创建两个容器,分别用不同的网络类型。

这个默认用的是bridge网络。

这个指定用host网络。

分别查看这两个容器网络的差异。

我们分别查看这两个网络的信息。

第一个容器里面只查到两个。

第二个容器里面能查到很多个,毕竟第二个容器直接连了宿主机的网卡。

7. Docker Container 网络

这种网络也是用别人的网卡,只不过是,使用的是另外一个容器的网卡(虚拟的),而不是使用宿主机的网卡。

7.2 操作案例

b1和上面一样,b2就是这样创建。

发现两个的私网ip是一样的。

如果此时直接把b1停掉,b2会怎样呢?

发现此时外部的ip直接没了。

8. Docker None 网络

8.1 none 网络介绍

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

反正就是没有网络。

8.2 操作案例