什么是 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/
 

111、什么是stack (Swarm18)的更多相关文章

  1. C语言- 基础数据结构和算法 - 栈的顺序存储

    听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...

  2. 什么是 stack?- 每天5分钟玩转 Docker 容器技术(111)

    什么是 stack ?在回答这个问题之前我们先回忆一下前面部署 WordPress 应用的过程: 首先创建 secret. 然后创建 MySQL service,这是 WordPress 依赖的服务. ...

  3. C# 集合类 :(Array、 Arraylist、List、Hashtable、Dictionary、Stack、Queue)

    我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类.我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和 ...

  4. HDU 3328 Flipper (stack)

    最近着手打基础,做做STL的题目,虽然一般STL题目难度不大,但需要加快速度的准确率............................. 本题有N张牌,一开始每个位置一张(正面朝上或者朝下),有 ...

  5. Lab 11-1

    Analyze the malware found in Lab11-01.exe. Questions and Short Answers What does the malware drop to ...

  6. Elastic Stack之Redis集群使用

    Elastic Stack之Redis集群使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客数据流走向:FileBeat ===>Redis  ===>lo ...

  7. HashTable Queue Stack SortedList BitArray

    HashTable 由于是非泛型集合,因此存储进去的都是object类型,不管是键还是值. Hashtable不允许排序 key不允许重复 键不允许为null Queue和Queue<T> ...

  8. spfa+剪枝 或者 dij+手写堆+剪枝 UOJ 111

    http://uoj.ac/problem/111 好像NOIP里面的题目...有好多都是...能通过xjbg剪枝来...AC题目的? 得好好学一下这些剪枝黑科技了... 思路:我觉得这位大佬说的很完 ...

  9. HDU 3485【101】 51nod 1668【010】 joj 2171【111】动态规划

    有一个只含0和1的长度为n的串,问不含有101的所有串的个数. ——不存在连续的101.010.111的字符串数量 HDU:https://cn.vjudge.net/problem/HDU-3485 ...

随机推荐

  1. php项目权限系统设计

    原文地址:https://blog.csdn.net/u013090676/article/details/77893237 说起php的权限,很多人都容易想起rbac,这里不多介绍.下面介绍一种通用 ...

  2. cropper.js

    https://github.com/fengyuanchen/cropper/blob/master/README.md Options See the available options of C ...

  3. 五、Jmeter中提取JSON响应中数组的长度

    json响应如下: { "code":0, "data":{ "data":[ { "amount":50000, &q ...

  4. linux读xml文件问题

    由于从配置文件中读取到的路径名的最后多了个0x0A,害我折腾了半天. 提示也很奇葩: I/O warning : failed to load external entity 关键是从这个提示看不出是 ...

  5. MEF部件的生命周期(PartCreationPolicy)

    一.演示概述 本演示介绍了MEF的生命周期管理,重点介绍了导出部件的三种创建策略,分别是:CreationPolicy.Any.CreationPolicy.Shared.CreationPolicy ...

  6. druid连接池各属性说明

    转: druid连接池各属性说明 2018年10月17日 04:56:57 ht_kasi 阅读数:374   版权声明: https://blog.csdn.net/ht_kasi/article/ ...

  7. redis的日常操作(1)

    一.简介 [概述] redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string ...

  8. 科学论文写作 Tips

    感觉还是课程中给的英文描述会比较好,所以笔记大多数还是以老师的原英文 PPT 为主 1 Steps in the Writing Process 如何开展论文写作以及各个步骤的时间分配 1-1 Pre ...

  9. 读取 .properties文件到数据库

    最近有一个这样的需求,将原本配置文件 .properties文件改到数据库当中,这样不用每次修改都重启服务器 java自带有处理 .properties文件的专有类 Properties,处理也很不错 ...

  10. 关于Linux下的连接文件学习总结

    1.连接文件区分为两种,一种类似windows下快捷方式,使用户能够快速连接到目标文件或目录. 另一种则通过文件系统中的inode连接来产生新文件名,而不是产生新文件. 两种方式分别称为符号/硬连接. ...