Docker Zero Deployment and Secrets (二)
一. 健康检测:
(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: 10sfailure_action: rollback
monitor: 10shealthcheck:
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 (二)的更多相关文章
- Docker Zero Deployment and Secrets (一)
在本节中,主要介绍在Docker swarm中如何不中断应用高可靠性的情况下更新服务和stack.这也叫做zero downtime deployment.还有就是swam如何管理密钥,保证容器之间的 ...
- Docker入坑系列(二)
Docker入坑系列(二) 上一篇我们为Docker创造了一个良好的生活环境,这一篇我们就开始让Docker活起来. 安装Docker ok,原文地址在这里. 当然,我只是自己翻译了一下而已- -跟着 ...
- Docker Data Center系列(二)- UCP安装指南
本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 系统要求 1.1 硬件和软件要求 Linux内核版 ...
- Docker的使用初探(二):Docker与.NET Core的结合
目录 Docker的使用初探(二):Docker与.NET Core的结合 添加Dockefile 1. 在创建项目时添加 2. 手动添加 3. 容器业务流程协调控制程序支持 Dockefile语法 ...
- 使用gitlab构建基于docker的持续集成(二)
使用gitlab构建基于docker的持续集成(二) gitlab docker aspnetcore Centos配置gitlab镜像并且启动 Centos配置防火墙 windows上访问gitla ...
- 玩转Docker之安装篇(二)
按理说,安装软件最好是按照官方文档进行,但由于国内网络的局限性,使我们不得不搭梯子,但终究太麻烦.鉴于此情况,我推荐方案一,利用某公司的加速站点来安装,而且是傻瓜式的,非常方便. 方案一: 在linu ...
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- Docker: 安装配置入门[二]
一.安装配置启动 1.环境 [root@docker1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@d ...
- 安装Docker和配置加速器(二)
一. 安装 docker-ce 1. 访问 https://opsx.alibaba.com/mirror 2. 打开这条URL: 二.Ubuntu 系统安装 Docker 1. 使用apt-get进 ...
随机推荐
- 【node.js】函数、路由
Node.js中函数的使用与Javascript类似,一个函数可以作为另一个函数的参数.我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数. function say(word) { ...
- nodejs的expresss中post的req.body总是undefined的原因
1)因为express将body-parser分离了出来,所以你需要手动添加进下面的内容即可 var path = require('path'); var bodyParser = require( ...
- Mac app打包成dmg
1. 找到打包的app文件,在Xcode工程的Products目录下 2. 在桌面新建一个文件夹dmg,将app文件放进去. 3. 为了实现拖拽到Application的效果,需要在这个文件夹里放一个 ...
- 真机测试出现INSTALL_FAILED_USER_RESTRICTED安装错误
之前用小米测试的时候遇到一个问题,两个一样型号的手机一个能直接用Android Studio安装公司的项目一个却不可以,总是报INSTALL_FAILED_USER_RESTRICTED错误,具体见下 ...
- ajax和原生ajax、文件的上传
ajax理解: ajax发送的请求是异步处理的.也就是说如下形式: function f1(){ $.ajax( { ....... success:function(){ a= return a } ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
- JS-移动端判断上拉和下滑
一.手指触屏,利用touchstart和touchend计算前后滑动距离,判断是上拉还是下滑. 二.js中距离:pageY.clientY.offsetY的区别: offsetY:相对于父节点的偏移距 ...
- P1004 方格取数
题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...
- [图解tensorflow源码] MatMul 矩阵乘积运算 (前向计算,反向梯度计算)
- Linux下用mail 命令给163邮箱发送邮件!
linux上的邮件客户端比较多,找一个平时用的比较多mail命令来试试!! 环境 :centos7: 注意 : 服务器必须得有外网才行,qq邮箱作为在linux上的发送端邮箱,经过测试 163 和qq ...