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

要在 Docker Engine 处于群集模式时部署应用程序映像,请创建一个服务。在某些更大的应用程序中,服务通常会成为微服务的图像。服务示例可能包括 HTTP 服务器,数据库或您希望在分布式环境中运行的任何其他类型的可执行程序。

在创建服务时,您可以指定要使用哪个容器映像以及要在正在运行的容器中执行哪些命令。您还可以定义该服务的选项,包括:

  • 群体将在群体外提供服务的端口

  • 该服务的覆盖网络连接到群中的其他服务

  • CPU和内存限制和保留

  • 滚动更新政策

  • 要在群中运行的图像副本的数量

服务,任务和容器

将服务部署到群集时,群集管理器接受服务定义作为服务的所需状态。然后它将该群中的节点上的服务作为一个或多个副本任务进行调度。这些任务在群中的节点上彼此独立运行。

例如,假设您想要在 HTTP 侦听器的三个实例之间进行负载平衡。下图显示了具有三个副本的 HTTP 侦听器服务。监听者的三个实例中的每一个都是群中的一个任务。

容器是一个孤立的过程。在群模式模型中,每个任务只调用一个容器。任务类似于调度程序放置容器的“插槽”。一旦容器处于活动状态,调度程序就会识别出该任务处于运行状态。如果容器未通过健康检查或终止,则任务将终止。

任务和计划

任务是群体中的调度的原子单位。当您通过创建或更新服务来声明所需的服务状态时,协调器通过调度任务来实现所需的状态。例如,您可以定义一个服务,指示协调器始终保持运行 HTTP 侦听器的三个实例。协调者通过创建三个任务来做出响应。每个任务都是调度程序通过产生容器来填充的插槽。容器是任务的实例化。如果 HTTP 侦听程序任务随后失败其运行状况检查或崩溃,则该协调器会创建一个新的副本任务,以生成一个新的容器。

任务是一个单向机制。它通过一系列状态单调进行:分配,准备,运行等。如果任务失败,则协调器删除任务及其容器,然后创建一个新任务以根据服务指定的期望状态进行替换。

Docker 群集模式的基础逻辑是通用调度器和协调器。服务和任务抽象本身并不知道它们实现的容器。假设你可以实现其他类型的任务,例如虚拟机任务或非集装箱化的任务。调度程序和协调器对于任务的类型是不可知的。但是,当前版本的 Docker 仅支持容器任务。

下图显示了 swarm 模式如何接受服务创建请求并为工作节点调度任务。

待定服务

服务可以被配置为使得群中当前没有节点可以运行其任务。在这种情况下,服务保持在状态pending。以下是一些服务可能保持在状态的几个示例pending

注意:如果您的唯一目的是阻止部署服务,请将服务扩展为0而不是尝试将其配置为保留在服务中pending

  • 如果所有节点都处于暂停或耗尽状态,并且您创建了一个服务,它将处于等待状态,直到某个节点可用。实际上,第一个可用的节点将获得所有的任务,因此在生产环境中这不是一件好事。

  • 您可以为服务保留特定数量的内存。如果群中没有节点具有所需的内存量,则该服务将保持等待状态,直到有可用节点运行其任务。如果你指定一个非常大的值,比如500 GB,那么这个任务将永远处于等待状态,除非你真的有一个可以满足它的节点。

  • 您可以对服务实施布局约束,并且在给定的时间内约束可能无法得到遵守。此行为说明您的任务的要求和配置与群体的当前状态并不紧密相关。作为群体的管理员,您声明群体的期望状态,并且经理与群体中的节点一起工作以创建该状态。您不需要微管理群集上的任务。复制和全局服务有两种类型的服务部署,即复制和全局。对于复制服务,指定要运行的相同任务的数量。例如,您决定部署一个具有三个副本的HTTP服务,每个副本服务于相同的内容。全局服务是在每个节点上运行一项任务的服务。没有预先指定的任务数量。每次将节点添加到swarm中时,编排器都将创建一个任务,并且调度程序将该任务分配给新节点。全球服务的良好候选者是监控代理,要在群集中的每个节点上运行的防病毒扫描程序或其他类型的容器。下图显示了三个服务的黄色副本和灰色的全局服务。

了解更多

  • 了解群集模式节点如何工作。

  • 了解PKI如何在群集模式下工作。

Previous article: Next article: