一. 健康检测:

(1)定义检测信息如下(案例,在Dockerfile中定义)

FROM alpine:3.6

...

HEALTHCHECK --interval=30s \
     --timeout=10s
     --retries=3
     --start-period=60s
     CMD curl -f http://localhost:3000/health || exit 1

...

(2)定义检测信息(案例,在Stackfile中定义)

version: "3.5"

services:
   web:
     image: example/web:1.0
     healthcheck:
       test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
       interval: 30s
       timeout: 10s
       retries: 3
       start_period: 60s

...

2. 案例1

(1)创建stack-health.yaml文件内容如下:

version: "3.5"

services:
   web:
     image: nginx:alpine
     healthcheck:
       test: ["CMD", "wget", "-qO", "-", "http://localhost"]
       interval: 5s
       timeout: 2s
       retries: 3
       start_period: 15s

(2)进行部署

xiodi@c720131:~/docker$ sudo docker stack deploy -c stack-health.yaml myapp

[sudo] password for xiodi:

Creating network myapp_default

Creating service myapp_web

(3) 查看服务所运行在哪个节点上

xiodi@c720131:~/docker$ sudo docker stack ps myapp

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS

rrjsvx4ox1j4        myapp_web.1         nginx:alpine        ubuntu              Running             Running about a minute ago

(4)在服务运行的节点查看容器状态,可以看到我们创建的服务所在的容器后面的状态有(healthy)

二. Rollback (回退)

1. stack-rollback.yaml文件内容如下, 相比之前的部署应用,此次多了failure_action:rollback 和monitor: 10s选项。

version: "3.5"

services:
   web:
     image: nginx:1.12-alpine
     ports:
       - 80:80
     deploy:
       replicas: 10
       update_config:
         parallelism: 2
         delay: 10s

failure_action: rollback
         monitor: 10s

healthcheck:
       test: ["CMD", "wget", "-qO", "-", "http://localhost"]
       interval: 2s
       timeout: 2s
       retries: 3
       start_period: 2s

2. 第1步文件定义了,rolling update的详细信息、健康检测、和回退的行为。

并定义了在检测多少秒后,认为不健康,开始回退。

三.  Blue-green deployment

简单的可以这样理解,前端使用一个负载均衡器,当更新时,将worker1置于失效状态,将所有服务都转发于worker2.

当worker更新完成后,进行上线,将所有服务都转发到worker1;再将worker2置于失效状态,进行更新。如下图所示:

四. Canary releases

该方法更新可以看成rolling update的一个变种,它是先更新一小部分服务器,然后将百分之10%的客户流量引入到新更新的服务器,如果没有问题,再渐渐的加大客户的流量 。直到完全切换完成。

五. 密钥

1. 创建密钥

(1)使用命令创建密钥

root@c720131:~# echo "sample secret value" | docker secret create sample-secret -

8mv1d8emvauy4zfnip807tbx1

(2)使用文件来创建密钥

root@c720131:~# docker secret create other-secret ~/my-secrets/secret-value.txt

1jvidw2ilzq3a2mh9goaobvg2

(3)列出所有密钥

root@c720131:~# docker secret ls

ID                          NAME                DRIVER              CREATED             UPDATED

1jvidw2ilzq3a2mh9goaobvg2   other-secret                            40 seconds ago      40 seconds ago

8mv1d8emvauy4zfnip807tbx1   sample-secret                           2 minutes ago       2 minutes ago

(4)检查密钥的详细信息

root@c720131:~# docker secret inspect other-secret

[
     {
         "ID": "1jvidw2ilzq3a2mh9goaobvg2",
         "Version": {
             "Index": 252
         },
         "CreatedAt": "2018-06-06T15:01:35.150023544Z",
         "UpdatedAt": "2018-06-06T15:01:35.150023544Z",
         "Spec": {
             "Name": "other-secret",
             "Labels": {}
         }
     }

]

2. 使用密钥

(1)创建一个服务,并关联一个密钥给它

root@c720131:~# docker service create --name web \

> --secret api-secret-key \

> --publish 8000:8000 \

> fundamentalsofdocker/whoami:latest

secret not found: api-secret-key

从上面报错信息看到,由于我们提前没有创建api-secret-key 密钥,所以报错。

(2)创建一个所需的密钥

root@c720131:~# echo "my secret key" | docker secret create api-secret-key -

umrr30un8bixwt1iq2aevw3xx

(3) 再次执行创建服务并关联密钥

root@c720131:~# docker service create --name web --secret api-secret-key --publish 8000:8000 fundamentalsofdocker/whoami:latest

vfwjk0nt1sg8i65w1w7rgfgj7

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converged

(4)可以在服务所在的容器查看密钥信息

xiodi@c720132:~$ sudo docker container exec -it afd89b8000e0 cat /run/secrets/api-secret-key

my secret key

(5)假如想要改密钥挂载在容器中的位置,可以通过以下方式进行更改。

root@c720131:~# docker service create --name web --name web -p 8000:8000 --secret source=api-secret-key,target=/run/my-secrets/api-secret-key fundamentalsofdocker/whoami:latest

cz7edxdfeggyw5nx9e2ws0k1m

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converged

3. 更新密钥(改变密钥)

(1)创建密钥

root@c720131:~# echo "newPass0rD" | docker secret create db-password-v2 -

nj3kwya8bc25kgm2sjz2d647r

(2)原先的服务创建时如下所示:使用的密钥是db-passwd

root@c720131:~# docker service create --name web --publish 80:80 --secret db-password nginx:alpine

pqetnrds6mr1n63abz3qz81im

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converged

(3)删除老的密钥

root@c720131:~# docker service update --secret-rm db-password web

web

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converged

(4)添加新的密钥

root@c720131:~# docker service update \

> --secret-add source=db-password-v2,target=db-password \

> web

web

overall progress: 1 out of 1 tasks

1/1: running   [==================================================>]

verify: Service converge

Docker Zero Deployment and Secrets (二)的更多相关文章

  1. Docker Zero Deployment and Secrets (一)

    在本节中,主要介绍在Docker swarm中如何不中断应用高可靠性的情况下更新服务和stack.这也叫做zero downtime deployment.还有就是swam如何管理密钥,保证容器之间的 ...

  2. Docker入坑系列(二)

    Docker入坑系列(二) 上一篇我们为Docker创造了一个良好的生活环境,这一篇我们就开始让Docker活起来. 安装Docker ok,原文地址在这里. 当然,我只是自己翻译了一下而已- -跟着 ...

  3. Docker Data Center系列(二)- UCP安装指南

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...

  4. Docker的使用初探(二):Docker与.NET Core的结合

    目录 Docker的使用初探(二):Docker与.NET Core的结合 添加Dockefile 1. 在创建项目时添加 2. 手动添加 3. 容器业务流程协调控制程序支持 Dockefile语法 ...

  5. 使用gitlab构建基于docker的持续集成(二)

    使用gitlab构建基于docker的持续集成(二) gitlab docker aspnetcore Centos配置gitlab镜像并且启动 Centos配置防火墙 windows上访问gitla ...

  6. 玩转Docker之安装篇(二)

    按理说,安装软件最好是按照官方文档进行,但由于国内网络的局限性,使我们不得不搭梯子,但终究太麻烦.鉴于此情况,我推荐方案一,利用某公司的加速站点来安装,而且是傻瓜式的,非常方便. 方案一: 在linu ...

  7. Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  8. Docker: 安装配置入门[二]

    一.安装配置启动 1.环境 [root@docker1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@d ...

  9. 安装Docker和配置加速器(二)

    一. 安装 docker-ce 1. 访问 https://opsx.alibaba.com/mirror 2. 打开这条URL: 二.Ubuntu 系统安装 Docker 1. 使用apt-get进 ...

随机推荐

  1. Day10 MVC

    经典三层 表述层(表示层):  前台交互,调用后台   web 业务逻辑层:   处理业务              service 数据持久层:   与数据库之间进行交互  dao 面向对象原则 面 ...

  2. virtualbox+vagrant学习-3-Vagrant Share-3-SSH Sharing

    SSH Sharing vagrant share通过向vagrant share提供--SSH标志,使远程SSH访问vagrant环境变得非常容易. 如果你想让同事访问你的SSH,以便对ops问题进 ...

  3. Python自动化之modelform和原生ajax

    modelform验证 `views.py` from django.shortcuts import render,HttpResponse from app01 import models fro ...

  4. 集合之HashSet

    在前篇博文中(java提高篇(二三)-----HashMap)详细讲解了HashMap的实现过程,对于HashSet而言,它是基于HashMap来实现的,底层采用HashMap来保存元素.所以如果对H ...

  5. 优化方法:SGD,Momentum,AdaGrad,RMSProp,Adam

    参考: https://blog.csdn.net/u010089444/article/details/76725843 1. SGD Batch Gradient Descent 在每一轮的训练过 ...

  6. 代码中会话同步(同步redis)导致的异常问题

    背景: 第一天拷贝了一份tomcat(配置了redis会话同步),部署了erp-rocketmq应用(用作给顾客发送消息).            第二天早晨,整个erp系统出现异常情况: 1> ...

  7. C#中的结构体与类的区别 (转载)

    经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字str ...

  8. Ext4文件系统架构分析(二)

    接着上一篇博文,继续分析Ext4磁盘布局中的元数据. 1.7 超级块 超级块记录整个文件系统的大量信息,如数据块个数.inode个数.支持的特性.管理信息,等待. 如果设置sparse_super特性 ...

  9. OpenGL ES天空盒子效果

    一.理解 利用GLKBaseEffect,自定义顶点着色器和片元着色器,结合天空盒子,展示效果 二.技术代码 CCSkyBoxEffect:天空盒子效果类: CCSkyboxShader.vsh:顶点 ...

  10. 阿里云服务器+宝塔环境+LNMP+tp5.1安装和调试

    1.首先肯定得有个阿里云服务器,楼主是用来自己测试用得,所以就买了个1年得突发性实例,虽然网上都说别买这种,不过个人测试还是没有多少要求得 2.买了服务器之前可以顺带买个域名,再顺带去备案一下,阿里云 ...