zoukankan      html  css  js  c++  java
  • 一步步创建第一个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.





  • 相关阅读:
    矩阵的阶
    python中'0b111'中的b 是什么意思
    Python字节码介绍
    多版本python共存,安装三方库到指定python版本
    关于python 中的__future__模块
    解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
    python常用魔法函数
    MySQL binlog
    MySQL start and stop
    Mysql 源码安装
  • 原文地址:https://www.cnblogs.com/zhxshseu/p/8cb5c671b237b69f69c56d3e85c72f06.html
Copyright © 2011-2022 走看看