Docker 是开发人员构建和运行应用程序的绝佳工具。
有趣的事实:DotCloud 是一家平台即服务 (PaaS) 公司,实际上将其创建为内部工具。
然而,该公司很快意识到其真正潜力,并于 2013 年将其作为开源项目提供。现在的 Docker Inc 是Docker Inc.。它很快就流行起来,拥有数以万计的用户,并与红帽、IBM、微软、谷歌和思科系统等公司建立了广泛的合作伙伴关系。
当今的软件开发需要敏捷性和对变化的快速响应。我们通过故事点评估我们的工作,参与站立会议,并使用 Scrum 等方法。 Docker 支持我们的敏捷性。
您必须意识到软件开发的部署阶段涉及大量成本。这就是 Docker 平台发挥作用的地方。 Docker 平台通过使用操作系统级虚拟化将软件放入容器中来简化部署。

这个平台的伟大之处在于,您的应用程序及其所有依赖项(二进制文件、库、配置文件、脚本、jar 等)都捆绑到一个易于使用的包中。这是一种简单、标准化的方法,可以让世界各地的软件开发人员的生活变得更加轻松。
Docker 简化了跨平台协作和网络
在 Docker 出现之前,通过开发管道管理软件的移动需要结合虚拟机、配置管理工具、包管理系统和复杂的库依赖关系网络等技术。维护和管理这些工具需要熟练的工程师。最必要的自定义设置。
Docker 改变了这一点,允许参与此过程的所有工程师以单一语言进行交流,从而简化了协作。
Docker 容器使用 Docker 网络通过主机相互通信并与外界通信。容器网络模型 (CNM) 使用多种不同的网络驱动程序控制 Docker 网络。网络选择标准基于容器的功能和用途。
它们非常强大,因为它们允许您将其他平台的工作负载连接到 Docker 服务和容器。无论您运行的是 Windows 还是 Linux,您都可以使用 Docker 以独立于平台的方式管理 Docker 主机。
Docker 网络是如何工作的?
Docker 指定了一个基本网络模型,称为容器网络模型 (CNM),其中包含实现容器网络的软件必须满足的规范。 CNM 在控制台式分布式键/值存储中维护网络配置。

CNM 的三个组件是沙箱、端点和网络。
- 沙箱:沙箱存储容器的网络配置。在容器内部,它充当网络堆栈。
- 端点:端点是通常成对出现的网络接口。通过将一端放置在您选择的网络中并将另一端放置在沙箱中来配置该对。此外,一个端点仅参与一个网络,而一个网络沙箱可以包含多个端点。
- 网络:由具有直接通信功能的端点集合组成。
在沙箱中,即使存在多个端点,每个端点也只能有一个网络连接。网络是一组多个互连的端点。
Docker Networking的网络驱动程序将CNM的思想付诸实践。 Docker 使用两种类型的网络驱动程序:本机网络驱动程序和远程网络驱动程序。本机网络驱动程序(通常称为内置驱动程序)由 Docker 提供并随 Docker Engine 一起提供。另一方面,来自供应商的第三方驱动程序称为远程网络驱动程序。
可以设计包含特定功能的驱动程序。

码头网络
Docker 有五个主要网络:bridge、host、overlay、none 和 macvlan。
桥接网络是docker的默认网络。我们在之前有关 Docker 架构的文章中概述了这些网络。
本文介绍了 Docker 网络的实用部分。了解如何详细了解 Docker 网络、连接到网络、创建网络等。那么让我们开始吧。
当您运行 Docker 容器时,除非指定了另一个网络,否则默认桥接网络调用docker0会与该容器关联。例如,运行ifconfig命令将检索桥接类型的 docker0 网络详细信息以及其他网络详细信息。
osboxes@worker2:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:f6:59:4a:5f txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::763e:c0b4:14df:b273 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:68:64:9a txqueuelen 1000 (Ethernet)
RX packets 2157 bytes 2132896 (2.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 952 bytes 151610 (151.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.102 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::20a:6c57:839d:2652 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:53:45:82 txqueuelen 1000 (Ethernet)
RX packets 10597 bytes 1497146 (1.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12058 bytes 1730219 (1.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1196 bytes 105396 (105.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1196 bytes 105396 (105.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 
列出网络
运行ls命令查看当前主机上运行的所有网络。可以看到,目前有7个网络,包括网桥、主机,安装Docker时都不会自动创建。根据您过去运行的容器,还可能包括其他自定义网络详细信息。
@:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local 
网络巡检
您可以通过运行inspect命令来获取有关网络类型的所有详细信息。提供有关网络的信息,包括名称、ID、创建时间、范围、驱动程序和配置详细信息(例如子网和网关地址)。如果容器正在运行,还需提供容器详细信息。否则,返回空字符串。
@:~$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",
"Created": "2019-08-01T10:30:27.595054009-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]创建网络
您可以使用create命令创建自己的网络。您必须使用--driver标志指定驱动程序类型。下面的示例使用桥接类型。
@:~$ docker network create --driver bridge _network
08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409运行ls命令检查网络是否创建。
@:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
08e0da91f6de _network bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local接下来,在您创建的网络上运行 Docker 容器。我正在使用以下命令运行一个简单的 Apache 服务器容器。
@:~$ docker run -it -d --network=_network httpd
38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002运行Inspection命令查看_network的所有信息。这次,您可以通过检查输出来查看有关容器的更多详细信息。容器名称为Completed_dubinsky 。
@:~$ docker network inspect _network
[
{
"Name": "_network",
"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Created": "2019-09-03T13:56:36.244295204-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {
"Name": "determined_dubinsky",
"EndpointID": "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",
"MacAddress": "02:42:ac:15:00:02",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]网络断线
要disconnect容器与网络的连接,请运行以下命令:您必须在disconnect 命令中指定网络名称和容器名称。
@:~$ docker network disconnect _network determined_dubinskydependent_dubinsky 容器将不再在此网络上运行。容器字段将为空。
@:~$ docker network inspect _network
[
{
"Name": "_network",
"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Created": "2019-09-03T13:56:36.244295204-04:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.21.0.0/16",
"Gateway": "172.21.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]如果创建非桥接网络,则必须包含非桥接驱动程序名称。要创建overlay网络,请运行以下命令:
@manager1:~$ docker network create --driver overlay _network_2
ynd2858eu1cngwhpc40m3h1nx
@manager1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
08e0da91f6de _network bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local
ynd2858eu1cn _network_2 overlay swarm要创建host网络,请使用 -driver 标志指定主机。下面的示例返回错误,因为只允许一个先前已运行的主机网络实例。因此,此命令不会创建另一个主机网络。
@manager1:~$ docker network create --driver host _network_3
Error response from daemon: only one instance of "host" network is allowed结论
到目前为止,我们已经解释了 Docker 网络以及如何连接、断开、创建和检查它们。尝试以下命令来熟悉 Docket 网络。如果您有兴趣学习 Net DevOps,请查看此Udemy 课程。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

