zoukankan      html  css  js  c++  java
  • 111、什么是stack (Swarm18)

     
    什么是 stack ? 
     
    在将这个之前先回顾一下前面部署WordPress的过程:
        1、创建secret
        2、创建mysql service
        3、创建WordPress service
     
    也就是说,这个应用包含了两个service ; mysql + wordpress 。他们之间有明确的依赖关系,必须先启动mysql。
     
    为了保证这个依赖关系,我们控制了 docker secret 和 docker service 命令的执行顺序,只不过这个过程是手工完成的。
     
    假如我们需要频繁的在不同环境中部署WordPress应用,如果每次都手工执行效率就太低了,而且容器出错误。这是自动化的一个好机会,首先我们把这个工程写成一个自动化的脚本。
     
    openssl rand -base64 20 | docker secret create mysql_root_password -
     
    openssl rand -base64 20 | docker secret create mysql_password -
     
    docker network create --driver overlay mysql_private
     
    docker service create --name mysql --network mysql_private --secret source=mysql_root_password,target=mysql_root_password --secret source=mysql_password,target=mysql_password -e MYSQL_ROOT_PASSWORD_FILE='/run/secrets/mysql_root_password' -e MYSQL_PASSWORD_FILE='/run/secrets/mysql_password' -e MYSQL_USER='wordpress' -e MYSQL_DATABASE='wordpress' mysql:5.7
     
    docker service create --name wordpress --network mysql_private --publish 80:80 --secret source=mysql_password,target=wp_db_password -e WORDPRESS_DB_HOST='mysql:3306' -e WORDPRESS_DB_NAME='wordpress' -e WORDPRESS_DB_USER='wordpress' -e WORDPRESS_DB_PASSWORD_FILE='/run/secrets/wp_db_password' wordpress
     
     
    这个脚本大体上能够工作,实现了自动化,但是有两个缺点:
     
        1、目前只有两个service,还比较简单,现在的应用通常包含多个service,特别是采用 microservices 架构的应用,几十个service是很正常。用shell脚本启动和管理如此多的service将是一件非常有挑战的任务。
     
        2、我们还要维护service之间的依赖关系,比较容易出错。而且如何判断service正常运行也不是一件容易的事情,不光要看service是否存在,还要考虑service的实际运行状态。
     
    我们希望有一种更高效和可靠的方法来部署基于service的应用,这就是stack。
     
    stack 包含一系列service,这些service组成了应用。stack通过一个YAML文件定义每个service,并描述service使用资源和各种依赖。
     
    WordPress的stack版本
     
    version: '3.1'
     
    services:
        db:
            image: mysql:5.7
            volumes:
              - db_data:/var/lib/mysql
            environment:
                MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
                MYSQL_DATABASE: wordpress
                MYSQL_USER: wordpress
                MYSQL_PASSWORD_FILE: /run/secrets/db_password
            secrets:
              - db_root_password
              - db_password
     
        wordpress:
            depends_on:
              - db
            image: wordpress:latest
            ports:
              - "80:80"
            environment:
                WORDPRESS_DB_HOST: db:3306
                WORDPRESS_DB_USER: wordpress
                WORDPRESS_DB_PASSWORD_FILE: /run/secrets/db_password
            secrets:
              - db_password
    secrets:
        db_password:
            file: db_password.txt
        db_root_password:
            file: db_root_password.txt
    volumes:
        db_data:
     
    1、service 中定义了两个 service : db 和 wordpress
    2、secret 定义了两个 secret: db_password 和 db_root_password ,在 service db 和 wordpress 的定义中引用了这两个secret
    3、volume定义了一个volume: db_data ,service db 使用了这个volume
    4、wordpress 通过了 depends_on 指定自己依赖 db 这个 service 。 Docker 会保证 当 db 正常运行后再启动 wordpress
     
    可以在YAML 中定义的元素远不止这些,完成的列表和使用方法可参考文档 https://docs.docker.com/compose/compose-file/
     
  • 相关阅读:
    【Leetcode】23. Merge k Sorted Lists
    【Leetcode】109. Convert Sorted List to Binary Search Tree
    【Leetcode】142.Linked List Cycle II
    【Leetcode】143. Reorder List
    【Leetcode】147. Insertion Sort List
    【Leetcode】86. Partition List
    jenkins 配置安全邮件
    python 发送安全邮件
    phpstorm 同步远程服务器代码
    phpUnit 断言
  • 原文地址:https://www.cnblogs.com/www1707/p/10880848.html
Copyright © 2011-2022 走看看