一步步创建第一个Docker App —— 1. 背景介绍

原文:https://docs.docker.com/engine/getstarted-voting-app/#/docker-stacks-and-services

你将会学习什么

   本文创建了一个基于web的投票voting应用,会收集,匹配,并返回投票结果(你选择的是cats,dogs还是其他)。这个投票app包括多个服务,每个都在独自的container容器中运行。

   我们会将app部署为一个stack,从而介绍一些在Compose Version 3中的新概念,并且使用swarm mode

   本文中我们会学习:
  1. 使用 docker machine 创建多个虚拟本地主机或 dockerized 云服务器
  2. 使用 docker 命令,配置运行具有manager 和 worker的集群(swarm)
  3. 通过 feeding docker-stack.yml 文件到docker stack deploy 命令,将 vote app 服务部署在两个nodes上
  4. 测试 app,观察结果
  5. 使用 visualizer 来探索和理解 app 运行过程
  6. 更新 docker-stack.yml文件,并使用一个不同的 vote 镜像(image)重新部署 app,获得不同的民意调查结果
    
 

服务(Services)和镜像(images)概况

   service的定义是:一个用来完成特定task的可执行code。一个 service可以运行在一个或者多个容器containers中。配置service的configuration文件,可以让你将app部署为一个集群swarm,并且管理它以 distributed,multi-container应用的形式。

   voting app you由多个services组成,每个都基于一个镜像 image:
   

   每一个service都会在各自的container中运行。通过使用 集群模式(swarm mode),我们还能够将将应用扩展,部署副本到多个nodes中。 

   下面是一个例子:
vote:
  image: dockersamples/examplevotingapp_vote:before
  ports:
    - 5000:80
  networks:
    - frontend
  depends_on:
    - redis
  deploy:
    replicas: 2
    update_config:
      parallelism: 2
    restart_policy:
      condition: on-failure
image 定义了我们将会用到哪一个service
depends_on 让我们指定在某个service部署以后,该service才部署。这里是在redis部署之后,vote service才开始部署
deploy 则指定了集群部署(swarm deployment)

docker-stack.yml 部署配置文件

   除了在Dockerfile中定义一系列build和run命令,我们还可以在一个 Compose file 文件中定义services,这里面还包括 services 将要如何并在哪里运行的信息。所以,我们可以使用 Compose file 来替代 多个Dockerfiles的配置方法,亦或者,Compose file也可以独立于 Dockerfiles使用。

   在之前的 Getting Started with Docker tutorial 中,我们为 whalesay app 创建了一个 Dockerfile ,并使用它来build了一个image,并运行在一个container中。

   在本文教程,images 则是 pre-build 的,我们将要使用 docker-stack.yml (a Version 3 Compose file)来替代 Dockerfile来运行 images。当我们开始部署时候,每一个image 都会以service的形式在一个container中运行(或者运行在多个container中)。

为了进行本文的示例,这里我们先直接复制如下的 docker-stack.yml 配置,并运行 Docker。该文件已经定义了所有上文需要的 services,配置信息,如:ports, networks, volumes, application dependencies 和 swarm configuration。
version: "3"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - 5000:80
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - 5001:80
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:

Compose Version 3 特性和功能

为了部署 voting app,我们需要调用 docker stack deploy命令,并使用 docker-stack.yml文件。从而 pull 相关的 images到本地,并在swarm集群中调用 services,就如在 .yml 文件配置的那样。

注意到 socker-stack.yml 文件的顶部,版本被定义为 version: "3" 。该文的 voting app 是基于 Compose version 3的,它和 Compose 以及 Docker Engine swarm mode 相互兼容。

在正是开始之前,我们来看一下 Compose files 和一些在Compose Version 3中,新的部署特性。

docker-stack.yml

docker-stack.yml 是 Compose file 中的一个新文件类型,只和Compose Version 3兼容。

--deploy key and swarm mode

deploy 关键字,允许我们指定一个集群部署(swarm deployment)的各种特性。

比如,voting app 配置中,使用这个关键字,创建了 vote 和 result services 的副本(每个service有两个 container,被部署到swarm集群中).

voting app 同样使用 deploy 约束某些services只能够在manager node中执行。

docker stack deploy command

docker stack deploy 是一条使用 docker-stack.yml 文件来部署系统的命令。
  • 该命令只支持 version: "3" 的Compose files.

  • 不支持关键字 build ,这之前是在标准 Compose files中被支持的, 而Compose file则是基于 Dockerfile的。为了使用 docker stack deploy,我们需要使用 pre-built image

  • 它可以替代命令 docker compose up 来运行与 Version 3 兼容的 applications.





原文地址:https://www.cnblogs.com/zhxshseu/p/8cb5c671b237b69f69c56d3e85c72f06.html