一、说明
本文叙述Docker网络,介绍关于Docker网络、网桥网络、网桥网络、自定义网桥网络、主机网络、无网络 MACVLAN 和 IPVLAN 网络、叠加网络等网络模式。Docker 是一个用于开发、发布和运行应用程序的开放平台。
二、 什么是 Docker Networking?
Docker 网络是 Docker 容器连接到同一主机或不同主机上的其他容器以及外部世界(即通过互联网)的一种方式。
Docker 的网络子系统可以使用驱动程序进行插拔。默认情况下存在多个驱动程序,并提供核心网络功能。
有各种各样的Docker网络,例如:
- 网桥网络
- 主机网络
- 无网络
- MACVLAN和IPVLAN网络
- 叠加网络
三、关于 Docker 网络
在本文中,我们将讨论各种可用的 docker 网络,并尝试实现这些网络,以便在开始使用各种网络类型方面具有实践经验。
所以,让我们开始吧。
要查看系统上的所有可用网络,请使用给定的命令:
docker network ls
3.1 网桥网络
3.1.1 默认网桥网络
每当我们安装 docker 时,它都会创建一个默认的桥接网络,所有没有定义网络的容器都可以连接到该网络。
它是一种将容器与底层主机网络隔离的解决方案。
如果我们检查此网络,我们会发现以下内容:
docker inspect bridge
这是输出中最重要的部分之一。
我们看到使用特定的子网和网关创建了一个单独的接口(docker0)。在此网络中启动的任何 docker 容器将仅占用指定网络中的 IP 地址。
我们启动一个没有指定网络的nginx容器:
docker run -d -p 8080:80 --name mynginx1 nginx
— 名称 => 它定义了容器的名称。
-p => 此选项将容器的端口 80 映射到主机的端口 8080。它允许您通过访问主机来访问容器内运行的 NGINX Web 服务器。localhost:8080
-d => 这在分离或守护程序模式下运行容器,即后台。
nginx => 它是我们使用的图像的名称。
现在,让我们类似地启动另一个容器:
docker run -d -p 8081:80 --name mynginx2 ngin
docker inspect mynginx1 mynginx2 | grep IPAddress
查看他们的 IP 地址。
mynginx1 的 IP 为 172.17.0.2,mynginx2 的 IP 为 172.17.0.3。这证明已连接到默认主机网桥。
但这有缺点。但是,网桥是与主机网络的隔离解决方案。如果未指定网络,则无法隔离,因为所有容器将仅连接到此默认网桥。Docker在自定义桥接网络的帮助下解决了这个问题。
3.1.2 自定义网桥网络
创建自定义网桥网络将创建其自己的单独网络 ID、接口、子网和网关。
这将有助于创建隔离的基础结构。
docker network create custom
让我们检查一下以查看上述详细信息:
docker inspect custom
在此网络中启动容器,并查看其 IP 是否位于自定义网桥的子网中。
要启动,请使用 — 网络标记:
docker run -d -p 8082:80 --name mynginx3 --network custombridge nginx
可以登录到一个容器并ping同一网络中的其他容器以测试实现。
3.2 主机网络
有时我们不需要与主机隔离,我们可以简单地在主机网络上启动容器并直接使用主机网络。
docker run -d --name hostnginx --network host nginx
我们在这里不使用 -p 标签,因为没有连接到任何其他网络。这将在主机网络中启动容器。
3.3 无网络None Net
当存在需要与任何类型的网络完全隔离的容器时,此网络非常有用。
使用 — 在这种情况下为网络。
3.4 MACVLAN和IPVLAN网络
它们通常用于在主机上运行的应用程序,但它们需要与物理网络不同的单独 IP 地址。
可以使用 MACVLAN 网络驱动程序为每个容器的虚拟网络接口分配 MAC 地址,使其看起来像是直接连接到物理网络的物理网络接口。
如果我们在系统上运行一些服务(具有明确定义的端口),并且我们想启动这些服务,但不能要求容器将其公开给未明确定义的端口。例如,如果我们已经在端口 80(nginx 定义良好的端口)上运行 nginx,并且我们想要一个新的 nginx 服务,我们将不得不将其公开给主机上的不同端口。但是由于这样做很麻烦,我们可以在这里使用 MACVLAN。
要创建一个,我们可以使用:
docker network create -d macvlan --subnet x.x.x.x/20 --gateway x.x.x.x -o parent=eth0 macnetwork
我从在我的 Linux 容器上运行 ifconfig 获得的子网。
现在,我们可以在这个创建的MAC网络上启动不同的服务。
docker run -d --name macnginx --network macnetwork nginx
在检查网络和容器时,我们发现:
苹果网络-
麦克金克斯 -
MACVLAN和IPVLAN之间的基本区别在于,MACVLAN为每个连接的docker容器分配不同的MAC地址,IPVLAN为每个连接到它的所有容器分配相同的MAC地址。
3.5 叠加网络
在 Docker Swarm 集群的情况下使用覆盖网络。
它是连接在一起的几个节点,以创建一个集群来管理运行在其上的容器数量。因此,所有节点之间需要有某种网络连接。
覆盖网络用于为 Docker Swarm 集群中的 Docker 节点创建内部专用网络。
这将是一个通用网络,将存在于 Swarm 集群中的所有节点上。
四、结论
我相信这篇文章将有助于理解Docker网络的基础知识,并且读者可以通过这种理解来轻松改进他们的Docker基础架构。Docker是一个非常深入的话题,一开始就了解Docker网络将使学习曲线相对不那么陡峭,当一个人转向高级主题时。