directory search
Compose About versions and upgrading (Compose) ASP.NET Core + SQL Server on Linux (Compose) CLI environment variables (Compose) Command-line completion (Compose) Compose(组成) Compose command-line reference(组合命令行参考) Control startup order (Compose) Django and PostgreSQL (Compose) Docker stacks and distributed application bundles (Compose) docker-compose build(docker-compose构建) docker-compose bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .NET Core application (Engine) About images, containers, and storage drivers (Engine) Add nodes to the swarm (Engine) Apply custom metadata (Engine) Apply rolling updates (Engine) apt-cacher-ng Best practices for writing Dockerfiles (Engine) Binaries (Engine) Bind container ports to the host (Engine) Breaking changes (Engine) Build your own bridge (Engine) Configure container DNS (Engine) Configure container DNS in user-defined networks (Engine) CouchDB (Engine) Create a base image (Engine) Create a swarm (Engine) Customize the docker0 bridge (Engine) Debian (Engine) Default bridge network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (Engine) Fedora (Engine) Get started (Engine) Get started with macvlan network driver (Engine) Get started with multi-host networking (Engine) How nodes work (Engine) How services work (Engine) Image management (Engine) Inspect the service (Engine) Install Docker (Engine) IPv6 with Docker (Engine) Join nodes to a swarm (Engine) Legacy container links (Engine) Lock your swarm (Engine) Manage nodes in a swarm (Engine) Manage sensitive data with Docker secrets (Engine) Manage swarm security with PKI (Engine) Manage swarm service networks (Engine) Migrate to Engine 1.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale the service (Engine) SDKs (Engine) Select a storage driver (Engine) Set up for the tutorial (Engine) SSHd (Engine) Storage driver overview (Engine) Store service configuration data (Engine) Swarm administration guide (Engine) Swarm mode key concepts (Engine) Swarm mode overlay network security model (Engine) Swarm mode overview (Engine) Understand container communication (Engine) Use multi-stage builds (Engine) Use swarm mode routing mesh (Engine) Use the AUFS storage driver (Engine) Use the Btrfs storage driver (Engine) Use the Device mapper storage driver (Engine) Use the OverlayFS storage driver (Engine) Use the VFS storage driver (Engine) Use the ZFS storage driver (Engine) Engine: Admin Guide Amazon CloudWatch logs logging driver (Engine) Bind mounts (Engine) Collect Docker metrics with Prometheus (Engine) Configuring and running Docker (Engine) Configuring logging drivers (Engine) Control and configure Docker with systemd (Engine) ETW logging driver (Engine) Fluentd logging driver (Engine) Format command and log output (Engine) Google Cloud logging driver (Engine) Graylog Extended Format (GELF) logging driver (Engine) Journald logging driver (Engine) JSON File logging driver (Engine) Keep containers alive during daemon downtime (Engine) Limit a container's resources (Engine) Link via an ambassador container (Engine) Log tags for logging driver (Engine) Logentries logging driver (Engine) PowerShell DSC usage (Engine) Prune unused Docker objects (Engine) Run multiple services in a container (Engine) Runtime metrics (Engine) Splunk logging driver (Engine) Start containers automatically (Engine) Storage overview (Engine) Syslog logging driver (Engine) tmpfs mounts Troubleshoot volume problems (Engine) Use a logging driver plugin (Engine) Using Ansible (Engine) Using Chef (Engine) Using Puppet (Engine) View a container's logs (Engine) Volumes (Engine) Engine: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor security profiles for Docker (Engine) Automation with content trust (Engine) Content trust in Docker (Engine) Delegations for content trust (Engine) Deploying Notary (Engine) Docker security (Engine) Docker security non-events (Engine) Isolate containers with a user namespace (Engine) Manage keys for content trust (Engine) Play in a content trust sandbox (Engine) Protect the Docker daemon socket (Engine) Seccomp security profiles for Docker (Engine) Secure Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver options and operating system defaults (Machine) Drivers overview (Machine) Exoscale (Machine) Generic (Machine) Get started with a local VM (Machine) Google Compute Engine (Machine) IBM Softlayer (Machine) Install Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (Machine) Oracle VirtualBox (Machine) Provision AWS EC2 instances (Machine) Provision Digital Ocean Droplets (Machine) Provision hosts in the cloud (Machine) Rackspace (Machine) VMware Fusion (Machine) VMware vCloud Air (Machine) VMware vSphere (Machine) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

  • 1:概况介绍

  • 2:集装箱

  • 3:服务

  • 4:成群

  • 5:堆叠

  • 6:部署应用程序

先决条件

  • 安装Docker版本1.13或更高版本。

  • 按照第3部分的先决条件中所述获取Docker撰写。

  • 获取预装Docker for Mac和Docker for Windows的 Docker Machine,但在Linux系统上需要直接安装它。在没有Hyper-V的 Windows 10系统之前以及Windows 10 Home中,使用Docker Toolbox。

  • 阅读第1部分中的方向。

  • 学习如何在第2部分中创建容器。

  • 确保您已经发布了friendlyhello你创造的形象将其推送到注册表我们将在这里使用共享的图像。

  • 确保你的图像作为一个部署的容器。运行此命令,在您的信息开槽usernamerepotagdocker run -p 80:80 username/repo:tag,然后访问http://localhost/

  • 有一份你的docker-compose.yml从第3部分手巧。

导言

在第3部分,你拿了一个你在里面写的应用程序第二部分,并定义了如何在生产中运行,将其转化为服务,在流程中将其扩展到5倍。

在第4部分中,您将这个应用程序部署到一个集群上,在多台机器上运行它。多容器、多机器应用程序通过将多台机器连接到一个名为蜂群...

理解群集

Swarm是一组运行Docker并加入到集群中的机器。发生这种情况后,您将继续运行您习惯的Docker命令,但现在它们将由群集管理器在群集上执行。群体中的机器可以是物理的或虚拟的。加入群体后,他们被称为节点

群管理器可以使用几种策略来运行容器,比如“最空的节点”--即用容器填充利用率最低的机器。或“全局”,它确保每台机器都得到指定容器的一个实例。您指示群管理器在撰写文件中使用这些策略,就像您已经使用过的策略一样。

群管理器是群集中唯一能够执行命令或授权其他机器加入群集的机器。工人.工人只是为了提供能力,没有权力告诉任何其他机器它能做什么和不能做什么。

到目前为止,您一直在本地计算机上以单一主机模式使用Docker。但是码头工人也可以群模式,这就是为什么可以使用蜂群。启用群集模式立即使当前机器成为群管理器。从那时起,Docker将在您正在管理的群集上运行命令,而不仅仅是在当前的机器上运行。

建立你的蜂群

群集由多个节点组成,可以是物理的,也可以是虚拟机。基本概念非常简单:运行docker swarm init若要启用群集模式并使当前机器成为群集管理器,请运行docker swarm join在其他机器上,让它们作为工人加入蜂群。在下面选择一个选项卡,看看这在不同的上下文中是如何进行的。我们将使用VM快速创建一个双机集群,并将其转化为一个集群。

创建集群

  • 本地VM(Mac,Linux,Windows 7和8)

  • 本地虚拟机(Windows 10 / Hyper-V)

本地计算机上的虚拟机(Mac,Linux,Windows 7和8)

首先,您需要一个可以创建VM的虚拟机管理程序,所以安装VirtualBox你机器的操作系统。

:如果您在安装了Hyper-V的Windows系统上,如Windows 10,则不需要安装VirtualBox,而应该使用Hyper-V。通过单击上面的Hyper-V选项卡查看超级V系统的说明。

现在,使用docker-machine,使用VirtualBox驱动程序:

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

你现在有两个虚拟机创建,命名myvm1myvm2(如docker-machine ls显示)。第一个将作为经理,执行docker命令和认证工人加入群体,第二个将是一个工人。

您可以使用docker-machine ssh.指示myvm1成为一名群经理docker swarm init你会看到这样的输出:

$ docker-machine ssh myvm1 "docker swarm init"Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command:

  docker swarm join \  --token <token> \  <ip>:<port>

有关于需要使用的错误--advertise-addrmyvm1通过运行复制IP地址docker-machine ls,然后docker swarm init再次运行该命令,使用该IP并指定port 2377(swarm连接的端口)--advertise-addr。例如:docker-machine ssh myvm1“docker swarm init --advertise-addr 192.168.99.100:2377”

如您所见,对docker swarm init包含预先配置的docker swarm join命令,以便在要添加的任何节点上运行。复制此命令,并将其发送到myvm2通孔docker-machine sshmyvm2加入你的新蜂群作为一个工人:

$ docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"This node joined a swarm as a worker.

恭喜你,你创造了你的第一群。

::您也可以运行docker-machine ssh myvm2没有附加任何命令来打开该VM上的终端会话。类型exit当您准备返回到主机shell提示符时。以这种方式粘贴Join命令可能更容易。

使用ssh连接到(docker-machine ssh myvm1),并运行docker node ls在该群查看节点:

docker@myvm1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd     myvm2               Ready               Active              
rihwohkh3ph38fhillhhb84sk *   myvm1               Ready               Active              Leader

类型exit从机器里出来。

或者,将命令包装在docker-machine ssh以避免直接登录或退出。例如:

docker-machine ssh myvm1 "docker node ls"

本地机器上的虚拟机(Windows 10)

首先,快速创建一个虚拟交换机供您的VM共享,这样它们就能够相互连接。

  1. 发射超V管理器

  1. 点击虚拟开关管理器在右边的菜单中

  1. 点击创建虚拟开关类型外部

  1. 给它起个名字myswitch,并选中此复选框以共享主机的活动网络适配器

现在,使用我们的节点管理工具创建几台虚拟机,docker-machine*

$ docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1
$ docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2

你现在有两个虚拟机创建,命名myvm1myvm2(如docker-machine ls显示)。第一个将作为经理,执行docker命令和认证工人加入群体,第二个将是一个工人。

您可以使用docker-machine ssh.指示myvm1成为一名群经理docker swarm init你会看到这样的输出:

$ docker-machine ssh myvm1 "docker swarm init"Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command:

  docker swarm join \  --token <token> \  <ip>:<port>

有关于需要使用的错误--advertise-addrmyvm1通过运行复制IP地址docker-machine ls,然后docker swarm init再次运行该命令,使用该IP并指定port 2377(swarm连接的端口)--advertise-addr。例如:docker-machine ssh myvm1“docker swarm init --advertise-addr 192.168.99.100:2377”

如您所见,对docker swarm init包含预先配置的docker swarm join命令,以便在要添加的任何节点上运行。复制此命令,并将其发送到myvm2通孔docker-machine sshmyvm2加入你的新蜂群作为一个工人:

$ docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"This node joined a swarm as a worker.

恭喜你,你创造了你的第一群。

::您也可以运行docker-machine ssh myvm2没有附加任何命令来打开该VM上的终端会话。类型exit当您准备返回到主机shell提示符时。以这种方式粘贴Join命令可能更容易。

使用ssh连接到(docker-machine ssh myvm1),并运行docker node ls在该群查看节点:

docker@myvm1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd     myvm2               Ready               Active              
rihwohkh3ph38fhillhhb84sk *   myvm1               Ready               Active              Leader

类型exit从机器里出来。

或者,将命令包装在docker-machine ssh以避免直接登录或退出。例如:

docker-machine ssh myvm1 "docker node ls"

在集群上部署应用程序

困难的部分结束了。现在,您只需重复您在其中使用的过程。第3部分部署到你的新蜂群上。记住,只有一群经理喜欢myvm1执行Docker命令;工作人员只是为了容量。

使用以下命令docker-compose.yml将第3部分中创建的文件复制到swarm管理器myvm1的主目录(别名:):~docker-machine scp

docker-machine scp docker-compose.yml myvm1:~

现在有myvm1使用它作为群管理器的功能,通过发送同样的命令来部署应用程序。docker stack deploy在第3部分中使用的命令myvm1使用docker-machine ssh*

docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"

就是这样,应用程序部署在一个集群上。

将第3部分中使用的所有命令打包到docker-machine ssh它们都会像你所期望的那样工作。只是这一次,您将看到容器在两个myvm1myvm2...

$ docker-machine ssh myvm1 "docker stack ps getstartedlab"ID            NAME        IMAGE              NODE   DESIRED STATE
jq2g3qp8nzwx  test_web.1  username/repo:tag  myvm1  Running
88wgshobzoxl  test_web.2  username/repo:tag  myvm2  Running
vbb1qbkb0o2z  test_web.3  username/repo:tag  myvm2  Running
ghii74p9budx  test_web.4  username/repo:tag  myvm1  Running
0prmarhavs87  test_web.5  username/repo:tag  myvm2  Running

访问群集

您可以从任一 myvm1两个的IP地址访问您的应用程序myvm2。您创建的网络在它们之间共享并负载平衡。运行docker-machine ls以获取虚拟机的IP地址,然后在浏览器中访问其中的任意一个,并刷新(或者只是curl它们)。您将看到五个可能的容器ID,它们都是随机循环的,展示了负载平衡。

两个ip地址工作的原因是群集中的节点参与了入口。路由网格这可以确保部署在集群中某个端口的服务始终保留在自己的端口上,而不管实际运行的是哪个节点。下面是一个服务的路由网格是如何被称为my-web在港口发表8080在一个三节点群中,可以看到:

二次

二次

连接有问题吗? 请记住,为了在群集中使用入口网络,在启用群集模式之前,需要在群节点之间打开以下端口:

  • 端口7946 TCP/UDP用于容器网络的发现。

  • 端口4789 UDP用于集装箱入口网络。

迭代和缩放应用程序

从这里开始,您可以完成在第3部分中了解到的所有内容。

通过更改docker-compose.yml档案。

通过编辑代码来改变应用程序的行为。

在任何一种情况下,只需运行docker stack deploy再次部署这些更改。

您可以使用相同的方法将任何机器,无论是物理机器还是虚拟机器,加入到这个群集中。docker swarm join你用的命令myvm2,则将将容量添加到群集中。快跑docker stack deploy之后,你的应用程序将利用新的资源。

清理

你可以用docker stack rm例如:

docker-machine ssh myvm1 "docker stack rm getstartedlab"

保持群或删除它?在某个时候,如果你想要docker-machine ssh myvm2 "docker swarm leave"在工人和docker-machine ssh myvm1 "docker swarm leave --force"经理身上工作,你可以删除这个群体,但是你需要这个群体的第5部分,所以请保留它

关于第5部分

简述和备忘单(可选)

这是本页所涵盖内容的终端记录*

在第4部分中,您了解了群集是什么,集群中的节点如何成为管理人员或工作人员,如何创建群集,并在其上部署应用程序。您看到核心Docker命令与第3部分并没有改变,它们只是为了在群主上运行而成为目标。您还看到了Docker网络的强大功能,即使它们在不同的机器上运行,也能保持跨容器的负载平衡请求。最后,您学习了如何在集群上迭代和缩放应用程序。

下面是一些您可能希望运行的命令,以便与群集进行交互:

docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
docker-machine env myvm1                # View basic information about your node
docker-machine ssh myvm1 "docker node ls"         # List the nodes in your swarm
docker-machine ssh myvm1 "docker node inspect <node ID>"        # Inspect a node
docker-machine ssh myvm1 "docker swarm join-token -q worker"   # View join token
docker-machine ssh myvm1   # Open an SSH session with the VM; type "exit" to end
docker-machine ssh myvm2 "docker swarm leave"  # Make the worker leave the swarm
docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
docker-machine start myvm1            # Start a VM that is currently not running
docker-machine stop $(docker-machine ls -q)               # Stop all running VMs
docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
docker-machine scp docker-compose.yml myvm1:~     # Copy file to node's home dir
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"   # Deploy an app
Previous article: Next article: