非常教程

Docker 17参考手册

引擎 | Engine

开始使用多主机网络 | Get started with multi-host networking (Engine)

本文使用一个示例来解释创建多主机网络的基础知识。Docker 通过overlay网络驱动程序支持多主机网络。与bridge网络不同,覆盖网络需要一些预先存在的条件才能创建一个:

  • Docker以群集模式运行
  • 使用密钥值存储的主机群集

覆盖网络和群集模式

使用以群模式运行的 Docker,您可以在管理器节点上创建覆盖网络。

群体使覆盖网络只能用于群体中需要服务的节点。当您创建使用覆盖网络的服务时,管理器节点会自动将覆盖网络扩展到运行服务任务的节点。

要了解有关在群集模式下运行 Docker 的更多信息,请参阅群集模式概述。

下面的例子显示了如何创建一个网络并将其用于群中管理器节点的服务:

# Create an overlay network `my-multi-host-network`.
$ docker network create \
  --driver overlay \
  --subnet 10.0.9.0/24 \
  my-multi-host-network

400g6bwzd68jizzdx5pgyoe95

# Create an nginx service and extend the my-multi-host-network to nodes where
# the service's tasks run.
$ docker service create --replicas 2 --network my-multi-host-network --name my-web nginx

716thylsndqma81j6kkkb5aus

群集的覆盖网络不适用于非托管容器。有关更多信息,请参阅 Docker 群集模式覆盖网络安全模型。

另请参阅将服务附加到覆盖网络。

使用外部键值存储覆盖网络

要将 Docker 引擎与外部键值存储一起使用,您需要以下内容:

  • 访问键值存储。Docker 支持 Consul,Etcd 和 ZooKeeper(分布式存储)键值存储。
  • 连接到键值存储的主机集群。
  • daemon集群中每台主机上配置正确的引擎。
  • 集群中的主机必须具有唯一主机名,因为键值存储使用主机名来标识集群成员。

虽然 Docker Machine 和 Docker Swarm 不是强制性体验 Docker 多主机网络的关键值存储,但此示例使用它们来说明它们是如何集成的。您将使用 Machine 来创建键值存储服务器和主机群集。这个例子创建了一个swarm 集群。

注意:以群集模式运行的 Docker Engine 与外部键值存储的网络不兼容。

先决条件

在开始之前,请确保您的网络上安装了最新版本的 Docker Engine 和 Docker Machine。这个例子也依赖于VirtualBox。如果您使用 Docker Toolbox 安装在 Mac 或 Windows上,则已经安装了所有这些设备。

如果您尚未这样做,请确保将 Docker Engine 和 Docker Machine 升级到最新版本。

设置一个键值存储

覆盖网络需要键值存储。键值存储保存有关网络状态的信息,其中包括发现,网络,端点,IP 地址等。Docker 支持 Consul,Etcd 和 ZooKeeper键值存储。这个例子使用 Consul。

  1. 登录到使用先决条件 Docker Engine,Docker Machine 和 VirtualBox软件准备的系统。
  1. 配置名为的 VirtualBox 机器mh-keystore

$ docker-machine create -d virtualbox mh-keystore

当您供应新机器时,该流程会将 Docker Engine 添加到主机。这意味着不是手动安装 Consul,而是使用Docker Hub 的 consul镜像创建一个实例。你会在下一步做到这一点。

  1. 将您的本地环境设置为mh-keystore机器。$ eval“$(docker-machine env mh-keystore)”
  1. 启动progrium/consulmh-keystore机器上运行的容器。

$ docker run -d \ -p“8500:8500”\ -h“consul”\ progrium / consul -server -bootstrap

客户端启动progrium/consulmh-keystore机器中运行的映像。服务器被调用consul并正在侦听端口8500

  1. Run the docker ps command to see the consul container. $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4d51392253b3 progrium/consul "/bin/start -server -" 25 minutes ago Up 25 minutes 53/tcp, 53/udp, 8300-8302/tcp, 0.0.0.0:8500->8500/tcp, 8400/tcp, 8301-8302/udp admiring_panini Keep your terminal open and move onto the next step.Create a swarm clusterIn this step, you use docker-machine为您的网络配置主机。此时,您不会真正创建网络。您将在VirtualBox中创建多台机器。其中一台机器将作为swarm master; 你会先创建它。在创建每台主机时,您需要在overlay网络驱动程序所需的机器上传递引擎。
  1. 创建一个swarm主。

$ docker-machine create \ -d virtualbox \ --swarm --swarm-master \ --swarm-discovery =“consul:// $(docker-machine ip mh -keystore):8500”\ --engine-opt = “cluster-store = consul:// $(docker-machine ip mh -keystore):8500”\ --engine-opt =“cluster-advertise = eth1:2376”\ mhs-demo0

在创建时,您可以为引擎daemon提供--cluster-store选项。该选项告诉引擎overlay网络的键值存储位置。bash扩展$(docker-machine ip mh-keystore)解析为您在“步骤1”中创建的Consul服务器的IP地址。该--cluster-advertise选项通告网络上的机器。

  1. 创建另一个主机并将其添加到群集。$ docker-machine create -d virtualbox \ --swarm \ --swarm-discovery =“consul:// $(docker-machine ip mh -keystore):8500”\ --engine-opt =“cluster-store = consul :// $(docker-machine ip mh-keystore):8500“\ --engine-opt =”cluster-advertise = eth1:2376“\ mhs-demo1
  1. 列出您的机器以确认它们全部正常运行。

$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM default - virtualbox运行tcp://192.168.99.100:2376 mh -keystore * virtualbox运行tcp://192.168.99.103:2376 mhs-demo0 - virtualbox运行tcp://192.168 .99.104:2376 mhs-demo0(主)mhs-demo1 - virtualbox运行tcp://192.168.99.105:2376 mhs-demo0

此时,您的网络上正在运行一组主机。您已准备好使用这些主机为容器创建多主机网络。

将您的终端打开并继续下一步。

创建覆盖网络

创建覆盖网络

  1. 将 docker 环境设置为 swarm master。$ eval $(docker-machine env --swarm mhs-demo0)使用该--swarm标志docker-machine限制了docker单独集群信息的命令。
  1. 使用该docker info命令查看群。

$ docker info容器:3图像:2角色:主要策略:传播过滤器:亲和力,健康,约束,端口,依赖关系节点:2 mhs-demo0:192.168.99.104:2376└容器:2└保留的CPU:0/1└保留内存:0 B / 1.021 GiB└标签:executiondriver = native-0.2,kernelversion = 4.1.10-boot2docker,operatingsystem = Boot2Docker 1.9.0(TCL 6.4); master:4187d2c - Wed Oct 14 14:00:28 UTC 2015,provider = virtualbox,storagedriver = aufs mhs-demo1:192.168.99.105:2376└Containers:1└Reserved CPUs:0/1└Reserved Memory:0 B / 1.021 GiB└标签:executiondriver = native-0.2,kernelversion = 4.1.10-boot2docker,operatingsystem = Boot2Docker 1.9.0(TCL 6.4); master:4187d2c - Wed Oct 14 14:00:28 UTC 2015,provider = virtualbox,storagedriver = aufs CPUs:2总内存:2.043 GiB名称:30438ece0915

根据这些信息,您可以看到您正在 Master 上运行三个容器和两个图像。

  1. 创建您的overlay网络。$ docker network create --driver overlay --subnet = 10.0.9.0 / 24 my-net您只需要在集群中的单个主机上创建网络。在这种情况下,您使用了swarm master,但您可以轻松地在集群中的任何主机上运行它。 注意:强烈建议--subnet在创建网络时使用该选项。如果--subnet未指定,则docker守护进程会自动选择并为网络分配一个子网,并且可能会与您的基础架构中未由 docker 管理的另一个子网重叠。当容器连接到该网络时,这种重叠会导致连接问题或失败。
  1. 检查网络是否正在运行:

$泊坞窗网LS网络ID名称驱动程序412c2496d0eb MHS-demo1的/主机主机dd51763e6dd2 MHS-demo0 /桥桥6b07d0be843f b4234109bd9b MHS-demo0 /无空1aeead6dd890 MHS-demo0 /主机主机我的网覆盖d0bb78cbe7bd MHS-demo1的/桥桥1c0eb8f69ebb MHS -demo1 / null的无

当您处于 swarm master 环境中时,您会看到所有 swarm agent 上的所有网络:每个引擎上的默认网络和单个覆盖网络。注意每个NETWORK ID都是唯一的。

  1. Switch to each swarm agent in turn and list the networks. $ eval $(docker-machine env mhs-demo0) $ docker network ls NETWORK ID NAME DRIVER 6b07d0be843f my-net overlay dd51763e6dd2 bridge bridge b4234109bd9b none null 1aeead6dd890 host host $ eval $(docker-machine env mhs-demo1) $ docker network ls NETWORK ID NAME DRIVER d0bb78cbe7bd bridge bridge 1c0eb8f69ebb none null 412c2496d0eb host host 6b07d0be843f my-net overlay Both agents report they have the my-net network with the 6b07d0be843fID。您现在正在运行多主机容器网络!在网络上运行应用程序一旦创建了网络,您就可以在任何主机上启动容器,并且它自动成为网络的一部分。
  1. 将你的环境指向 swarm master。

$ eval $(docker-machine env --swarm mhs-demo0)

  1. mhs-demo0实例上启动一个Nginx Web服务器。$ docker run -itd --name = web --network = my-net --env =“constraint:node == mhs-demo0”nginx
  1. 在实例上运行 BusyBox 实例mhs-demo1并获取Nginx服务器主页的内容。

$ docker run -it --rm --network=my-net --env="constraint:node==mhs-demo1" busybox wget -O- http://web Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox ab2b8a86ca6c: Pull complete 2c5ac3f849df: Pull complete Digest: sha256:5551dbdfc48d66734d0f01cafee0952cb6e8eeecd1e2492240bf2fd9640c2279 Status: Downloaded newer image for busybox:latest Connecting to web (10.0.0.2:80) <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> - 100% |*******************************| 612 0:00:00 ETA

检查外部连接

如您所见,Docker 的内置覆盖网络驱动程序可在同一网络中多个主机上的容器之间提供开箱即用的连接。另外,连接到多主机网络的容器会自动连接到docker_gwbridge网络。该网络允许容器在群集外部具有外部连接。

  1. 将您的环境更改为swarm agent。$ eval $(docker-machine env mhs-demo1)
  1. docker_gwbridge通过列出网络来查看网络。

$ LS泊坞窗网络ID网络名称驱动程序6b07d0be843f我网覆盖dd51763e6dd2桥桥b4234109bd9b返回null 1aeead6dd890主机主桥e1dbd5dff8be docker_gwbridge

  1. 重复swarm master上的步骤1和2。$ eval $(docker-machine env mhs-demo0)$ docker network ls NETWORK ID NAME DRIVER 6b07d0be843f my-net overlay d0bb78cbe7bd bridge bridge 1c0eb8f69ebb none null 412c2496d0eb host host 97102a22e8d2 docker_gwbridge bridge
  1. 检查Nginx容器的网络接口。

00:00:00:00:00 brd 00:00:00:00:00:$ docker exec web ip addr 1:lo:<LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group默认链接/ 00 inet 127.0.0.1/8作用域主机lo valid_lft永远preferred_lft永远inet6 :: 1/128作用域主机valid_lft永远preferred_lft永远22:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue状态UP组默认链接/ ether 02:42:0a:00:09:03 brd ff:ff:ff:ff:ff:inet 10.0.9.3/24 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80 :: 42:aff:fe00:903/64 scope永久链接valid_lft preferred_lft forever 24:eth1:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link / ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff :ff inet 172.18.0。2/16范围全局eth1 valid_lft永远preferred_lft永远inet6 fe80 :: 42:acff:fe12:2/64范围链接valid_lft forever永远preferred_lft永远

eth0接口表示连接到my-net覆盖网络的容器接口。虽然eth1接口代表连接到所述容器的接口docker_gwbridge网络。

使用Docker撰写额外功劳

请参阅 Compose V2 格式中介绍的网络功能,并在上述群集中执行多主机网络场景。

相关信息

  • 了解 Docker 容器网络
  • 使用网络命令
  • Docker群集概述
  • Docker机器概述

示例,用法,网络,码头工具,文档,用户指南,多主机,群集

引擎 | Engine相关

1..NET核心应用程序(引擎) | .NET Core application (Engine)
2.关于图像,容器和存储驱动程序(引擎) | About images, containers, and storage drivers (Engine)
3.向swarm添加节点(Engine) | Add nodes to the swarm (Engine)
4.应用自定义元数据(引擎) | Apply custom metadata (Engine)
5.应用滚动更新(引擎) | Apply rolling updates (Engine)
6.apt-cacher-ng
7.编写Dockerfiles(引擎)的最佳实践 | Best practices for writing Dockerfiles (Engine)
8.二进制(引擎) | Binaries (Engine)
9.将容器端口绑定到主机(引擎) | Bind container ports to the host (Engine)
10.突破性变化(引擎) | Breaking changes (Engine)
11.建立自己的网桥 | Build your own bridge (Engine)
12.CentOS (Engine)
13.CentOS (Engine)
14.配置容器DNS(引擎) | Configure container DNS (Engine)
15.在用户定义的网络中配置容器DNS(引擎) | Configure container DNS in user-defined networks (Engine)
16.CouchDB (Engine)
17.创建基本映像(引擎) | Create a base image (Engine)
18.创建群(引擎) | Create a swarm (Engine)
19.自定义docker0网桥(引擎) | Customize the docker0 bridge (Engine)
20.Debian (Engine)
21.默认桥接网络 | Default bridge network
22.删除服务(引擎) | Delete the service (Engine)
23.部署服务(引擎) | Deploy a service (Engine)
24.将服务部署到一个群(引擎) | Deploy services to a swarm (Engine)
25.不推荐的引擎功能 | Deprecated Engine features
26.Docker容器网络(引擎) | Docker container networking (Engine)
27.Docker概述(引擎) | Docker overview (Engine)
28.Docker运行参考(引擎) | Docker run reference (Engine)
29.Dockerfile引用(引擎) | Dockerfile reference (Engine)
30.Dockerize应用程序 | Dockerize an application
31.排空节点(引擎) | Drain a node (Engine)
32.引擎 | Engine
33.FAQ(引擎) | FAQ (Engine)
34.Fedora (Engine)
35.开始 | Get started (Engine)
36.开始使用macvlan网络驱动程序 | Get started with macvlan network driver (Engine)
37.节点如何工作 | How nodes work (Engine)
38.服务如何运作(引擎) | How services work (Engine)
39.图像管理 | Image management (Engine)
40.检查服务(引擎) | Inspect the service (Engine)
41.安装Docker(引擎) | Install Docker (Engine)
42.IPv6与Docker(引擎) | IPv6 with Docker (Engine)
43.将节点加入群集(引擎) | Join nodes to a swarm (Engine)
44.旧容器链接(引擎) | Legacy container links (Engine)
45.锁定你的群(引擎) | Lock your swarm (Engine)
46.管理群中的节点(引擎) | Manage nodes in a swarm (Engine)
47.使用Docker机密管理敏感数据(引擎) | Manage sensitive data with Docker secrets (Engine)
48.使用PKI管理swarm安全性(引擎) | Manage swarm security with PKI (Engine)
49.管理群体服务网络(引擎) | Manage swarm service networks (Engine)
50.迁移到引擎1.10 | Migrate to Engine 1.10
51.可选的Linux安装后步骤(引擎) | Optional Linux post-installation steps (Engine)
52.总览 | Overview (Engine)
53.总览 | Overview (Engine)
54.PostgreSQL(引擎) | PostgreSQL (Engine)
55.群集模式中的筏共识(引擎) | Raft consensus in swarm mode (Engine)
56.Riak (Engine)
57.以群集模式运行Docker Engine | Run Docker Engine in swarm mode
58.扩展服务(引擎) | Scale the service (Engine)
59.SDKs (Engine)
60.选择一个存储驱动 | Select a storage driver (Engine)
61.设置教程(引擎) | Set up for the tutorial (Engine)
62.SSHd (Engine)
63.存储驱动总览 | Storage driver overview (Engine)
64.存储服务配置数据(引擎) | Store service configuration data (Engine)
65.Swarm管理指南(引擎) | Swarm administration guide (Engine)
66.Swarm模式关键概念(引擎) | Swarm mode key concepts (Engine)
67.Swarm模式覆盖网络安全模型(引擎) | Swarm mode overlay network security model (Engine)
68.群模式概述(引擎) | Swarm mode overview (Engine)
69.Ubuntu (Engine)
70.Ubuntu (Engine)
71.了解容器通信(引擎) | Understand container communication (Engine)
72.使用多阶段构建(引擎) | Use multi-stage builds (Engine)
73.使用swarm模式路由网格(引擎) | Use swarm mode routing mesh (Engine)
74.使用AUFS存储驱动程序(引擎) | Use the AUFS storage driver (Engine)
75.使用Btrfs存储驱动程序(引擎) | Use the Btrfs storage driver (Engine)
76.使用设备映射器存储驱动程序(引擎) | Use the Device mapper storage driver (Engine)
77.使用OverlayFS存储驱动程序(引擎) | Use the OverlayFS storage driver (Engine)
78.使用VFS存储驱动程序(引擎) | Use the VFS storage driver (Engine)
79.使用ZFS存储驱动程序(引擎) | Use the ZFS storage driver (Engine)
80.处理图像 | Work with images
81.使用网络命令(引擎) | Work with network commands (Engine)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06