什么是 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. Angular5.0之 安装指定版本Angular CLI

    我们可能会发现按照网上的方式下载安装后,使用Angular CLI生成的项目并不是我们想要的Angular的版本,因为在我们没有指定安装版本的前提下,默认会下载最新的版本安装,然而不同的Angular ...

  2. Less相关的用法以及Vue2.0 中如何使用Less

    (一)less的用法: (二)vue 2.0中如何使用less插件 1:vue先安装less插件 npm install less less-loader --save 2:修改webpack.bas ...

  3. Java-数据类型与编码(ASCII、Unicode 和 UTF-8)

    机械硬盘硬件结构(了解)https://diy.pconline.com.cn/cpu/study_cpu/1009/2215404_all.html 一.数据储存单位 1.bit(位) https: ...

  4. Win10 的微软输入法输入稍快竟然会导致死机

    一周前,新装机器一次,竟然死机两三次,多发生在敲字时,最近逐步排查发现的这个问题,查阅了一下网上方案,果断采用了第三方输入法,至今没再死机过. 不过第三方输入法也不安分,是不是推送点头条新闻过来,和驱 ...

  5. go get命令在go mod目录下与正常目录执行的区别

    转载自https://www.jianshu.com/p/0a2ebb07da54 非$GOPATH目录下的go mod项目 $ go mod init test $ cat go.mod modul ...

  6. win10下用Anaconda安装TensorFlow | 后附JetBrains测试

    从意识上认识Anaconda(音标:[ˌænəˈkɑ:ndə])/(拼读:安娜康达). Anaconda:水蟒的意思,如图logo像不像水蟒.其最后五个字母是conda(包管理器),而Anaconda ...

  7. C++输入输出流加速器,关闭同步流,ios::sync_with_stdio(false)和 cin.tie(0)

    leetcode练习时,总会发现运行时间短的代码都会有类似: static int x=[](){ std::ios::sync_with_stdio(false); cin.tie(NULL); ; ...

  8. Ceph osd故障硬盘更换

    正常状态: 故障状态: 实施更换步骤: (1)关闭ceph集群数据迁移: osd硬盘故障,状态变为down.在经过mod osd down out interval 设定的时间间隔后,ceph将其标记 ...

  9. MySQL递归查询父子节点

    1.表结构 CREATE TABLE folder( id BIGINT(20) NOT NULL, parent_id BIGINT(20) DEFAULT NULL, PRIMARY KEY id ...

  10. jquery中this与$(this)的用法区别

    jquery中this与$(this)的用法区别.先看以下代码: $("#textbox").hover( function() { this.title = "Test ...