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或更高版本...

  • 获取Docker撰写。在Docker for Mac和Docker for Windows中,它已预先安装,所以你很好用。在Linux系统上,您需要直接安装它。在没有Hyper-V的 Windows 10系统之前,使用Docker Toolbox。

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

  • 了解如何在第二部分...

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

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

导言

在第3部分中,我们扩展了我们的应用程序并启用了负载平衡。要做到这一点,我们必须在分布式应用程序的层次结构中提升一级:服务...

  • 堆叠

  • 服务你在这里

  • 容器(第2部分涵盖)

关于服务

在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果您想象一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个用于在用户上传某些内容后在后台进行视频转换的服务,以及一个用于前端的服务,等等。

服务实际上只是“生产中的容器”。服务只运行一个映像,但它编码了映像的运行方式--应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,等等。扩展服务会改变运行该软件的容器实例的数量,为流程中的服务分配更多的计算资源。

幸运的是,使用Docker平台定义、运行和扩展服务非常容易--只需编写一个docker-compose.yml档案。

你的第一次docker-compose.yml档案

docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。

docker-compose.yml

将此文件保存为docker-compose.yml你想去哪里都行。确保你有推送图像你在第二部分到注册表,并更新以下内容.yml通过替换username/repo:tag还有你的图像细节。

version: "3"services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repository:tag
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:      - "80:80"
    networks:      - webnet
networks:
  webnet:

docker-compose.yml文件告诉Docker执行以下操作:

  • 拉我们在第2步上传的图像从登记处。

  • 运行该图像的5个实例作为所调用的服务web,限制每个实例使用最多10%的CPU(跨所有核心)和50MB的RAM。

  • 如果容器失败,立即重新启动容器。

  • 将主机上的端口80映射到web是80号港口。

  • web通过称为负载平衡的网络指示容器共享端口80 webnet。(在内部,容器本身将web在临时端口上发布到80端口。)

  • webnet使用默认设置定义网络(这是一个负载平衡覆盖网络)。

想知道撰写文件版本,名称和命令吗?请注意,我们将撰写文件设置为version: "3"。这基本上使得群集模式兼容。我们可以使用部署密钥(仅适用于Compose文件格式版本3.x或更高版本)及其子选项,以便为每个服务(例如web)负载均衡和优化性能。我们可以使用该docker stack deploy命令运行该文件(也仅在Compose文件版本3.x及更高版本上受支持)。您可以使用docker-compose up运行非swarm配置的版本3文件,但我们正在关注堆栈部署,因为我们正在构建一个swarm示例。您可以将撰写文件命名为任何您想使其对您具有逻辑意义的内容; docker-compose.yml只是一个标准名称。我们可以轻松地调用此文件docker-stack.yml 或者对我们的项目更具体的东西。

运行您的新负载平衡应用程序。

之前,我们可以使用docker stack deploy命令我们将首先运行:

docker swarm init

::我们会理解这个命令的意思第4部分.如果你不跑docker swarm init您将得到一个错误,即“此节点不是群集管理器”。

现在让我们运行它。你必须给你的应用程序一个名字。在这里,它被设置为getstartedlab*

docker stack deploy -c docker-compose.yml getstartedlab

我们的单个服务堆栈正在一个主机上运行我们部署的映像的5个容器实例。让我们调查一下。

获取应用程序中的一个服务的服务ID:

docker service ls

码头工人成群运行的任务,产生容器。任务有状态和它们自己的ID:

docker service ps <service>

:Docker对Swarms的支持是使用一个名为SwarKit的项目构建的。SwarkKit任务不需要是容器,但是Docker群集任务被定义为生成它们。

让我们检查一个任务,并将输出限制在容器ID上:

docker inspect --format='{{.Status.ContainerStatus.ContainerID}}' <task>

反之亦然,检查容器ID,并提取任务ID:

docker inspect --format="{{index .Config.Labels \"com.docker.swarm.task.id\"}}" <container>

现在列出所有5个容器:

docker container ls -q

你可以跑curl http://localhost连续几次,或者转到浏览器中的那个URL,然后点击刷新几次。无论哪种方式,您都会看到容器ID的变化,演示负载平衡;对于每个请求,将以循环的方式选择5个副本中的一个来响应。

在此阶段,容器可能需要30秒才能响应HTTP请求。这并不表示Docker或S批的性能,而是一个未满足的Redis依赖关系,我们将在本教程后面讨论。

缩放应用程序

您可以通过更改replicas价值docker-compose.yml,保存更改,并重新运行docker stack deploy指挥:

docker stack deploy -c docker-compose.yml getstartedlab

Docker将进行就地更新,无需先拆下堆栈或杀死任何容器。

现在,重新运行docker container ls -q若要重新配置已部署的实例,请执行以下操作。如果您扩展副本,那么会启动更多的任务,从而启动更多的容器。

把应用程序和蜂群取下来

docker stack rm*

docker stack rm getstartedlab

这会删除应用程序,但我们的单节点群仍在运行(如图所示docker node ls)。拿下群落docker swarm leave --force

站起来和用Docker扩展你的应用程序一样容易。您已经在学习如何在生产中运行容器方面迈出了一大步。接下来,您将学习如何在一组Docker机器上运行这个应用程序。

:编写这样的文件用于使用Docker定义应用程序,并且可以使用码头云,或者在您选择的任何硬件或云提供商上。码头企业版...

关于“第四部分”

简述和备忘单(可选)

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

总而言之,在打字docker run很简单的情况下,生产中容器的真正实现将其作为服务运行。服务在Compose文件中编写容器的行为,此文件可用于缩放,限制和重新部署我们的应用程序。可以在运行时使用与启动服务相同的命令对服务进行更改:docker stack deploy

在此阶段需要研究的一些命令:

docker stack ls                                            # List stacks or apps
docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
docker service ls                 # List running services associated with an app
docker service ps <service>                  # List tasks associated with an app
docker inspect <task or container>                   # Inspect task or container
docker container ls -q                                      # List container IDs
docker stack rm <appname>                             # Tear down an application
Previous article: Next article: