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/
     
  • 相关阅读:
    Nginx配置SSL证书实现https访问及端口映射
    Nginx动静分离实现
    Nginx+Keepalived实现高可用部署
    Linux环境Nginx反向代理实现负载均衡
    Linux环境Nginx安装
    merlin矿池被攻击详情
    CVE-2021-26855 Exchange Server RCE
    C语言博客作业04--数组
    第四次作业
    SpringBoot集成多数据源-----基于数据库维护
  • 原文地址:https://www.cnblogs.com/www1707/p/10880848.html
Copyright © 2011-2022 走看看