docker 构建带健康检查的redis镜像
===============================================
2018/11/5_第1次修改 ccb_warlock
===============================================
这里简单提下为什么要花力气去构建带健康检查的镜像:docker的容器有2个自我检查的机制,一个是进程的检查,就是服务的进程运行是否正常;另一层就是业务的检查,就是在进程运行的情况下,业务是否正常提供服务。
以redis举例,正常情况配置正确,资源给够的情况,redis进程可以正常运行,但是由于连接redis的程序连接过多(达到了redis的连接数上线,一般单redis是1W不到点,redis服务就开始拒绝新的连接)。像这种情况进程的检查是捕获不到异常的,那就得配合健康检查增加一个维度判断redis是否正常。
一、准备工作
redis官方版本:4.0.11(虽然现在刚出了5.X,但是新东西很多都还未知,故保守在生产环境还是设计使用4.X)
示例redis的密码为:123456
存放密码的环境变量:redisPWD
二、构建带有健康检查的新镜像
mkdir -p /opt/build/redis
# 进入目录
cd /opt/build/redis
2.2 编辑healthcheck脚本
vi healthcheck
# 将下面的内容添加到healthcheck文件内,wq保存。
#!/bin/bash
set -eo pipefail
host="$(hostname -i || echo '127.0.0.1')"
if ping="$(redis-cli -h "$host" ping)" && [ "$ping" = 'PONG' ]; then
exit 0
elif ping="$(redis-cli -h "$host" -a "$redisPWD" ping)" && [ "$ping" = 'PONG' ]; then
exit 0
fi
exit 1
vi dockerfile
# (基于redis镜像)将下面的内容添加到dockerfile文件内,wq保存。
# basic image
FROM redis:4.0.11 COPY healthcheck /usr/local/bin/ RUN chmod +x /usr/local/bin/healthcheck HEALTHCHECK --interval=10s --timeout=10s --retries=6 CMD ["healthcheck"]
docker build --rm -t redis:4.0.11-chk .
至此,带有健康检查的redis镜像(redis:4.0.11-chk)构建完成。
三、 启动redis
由于我习惯使用swarm、docker compose部署,下面就是使用了健康检查后的compose该怎么写。
version: '3.6'
services: redis:
image: redis:4.0.11-chk
environment:
- TZ=Asia/Shanghai
- redisPWD=123456
volumes:
# 配置文件
- /usr/docker-vol/redis/conf/redis.conf:/etc/redis.conf
# 持久化
- /usr/docker-vol/redis/data:/data
command:
redis-server /etc/redis.conf
deploy:
replicas: 1
restart_policy:
condition: any
resources:
limits:
cpus: "0.3"
memory: 256M
update_config:
parallelism: 1
delay: 5s
monitor: 5s
max_failure_ratio: 0.1
order: start-first
ports:
- 6379:6379
networks:
- my-net networks:
my-net:
external: true
参考资料:
docker 构建带健康检查的redis镜像的更多相关文章
- ASP.NET CORE在docker中的健康检查(healthcheck)
在使用docker-compose的过程中,很多程序都提供了健康检查(healthcheck)的方法,通过健康检查,应用程序能够在确保其依赖的程序都已经启动的前提下启动,减少各种错误的发生,同时,合理 ...
- Docker构建nginx的nginx-rtmp-module视频服务器镜像
文章地址:https://www.cnblogs.com/linyilong3/p/5862595.html GitHub nginx-rtmp-module 及配置 Dockerfile构建配置: ...
- Java应用在docker环境配置容器健康检查
在<极速体验docker容器健康>一文已体验了docker容器健康检查功能,今天就来给java应用的容器加入健康检查,使应用的状态随时都可以被监控和查看. 实战环境信息 操作系统:macO ...
- Docker学习6:使用docker构建Jekyll服务和java服务
写在前面 ## 文章Dockerfile中涉及apt-get 等操作需更换镜像 在Dockerfile中添加下列 Dockerfile源码,见下面作者githubhttps://github.com/ ...
- nginx的健康检查功能将挂掉的Tomcat舍弃
1.Ngninx自带健康检查功能,能将挂掉的服务器舍弃,不在访问路径里 2.Nginx还有URL重写功能,能将接收到的请求,进行改写,再将新的URL分发到后端服务器上
- ASP.NET CORE 使用Consul实现服务治理与健康检查(1)——概念篇
背景 笔者所在的公司正在进行微服务改造,这其中服务治理组件是必不可少的组件之一,在一番讨论之后,最终决定放弃 Zookeeper 而采用 Consul 作为服务治理框架基础组件.主要原因是 Consu ...
- docker:打包node+npm+pm2运行环境镜像
最近公司有一个外包项目需要在不能连外网的情况下部署node项目到甲方公司内部.直接使用node官网的安装包可以获得node运行环境,但像pm2这种工具要离线装就会比较费劲,所以最终选择了使用docke ...
- 使用Docker构建PHP7.4 + Swoole + Redis镜像
使用Docker构建PHP7.4 + Swoole + Redis镜像 Docker是一个用于开发,交付和运行应用程序的开放平台.开发者可以利用Docker来快速交付,测试和部署代码,从而大大减少编写 ...
- 使用Docker构建redis集群--最靠谱的版本
1集群结构说明 集群中有三个主节点,三个从节点,一共六个结点.因此要构建六个redis的docker容器.在宿主机中将这六个独立的redis结点关联成一个redis集群.需要用到官方提供的ruby脚本 ...
随机推荐
- ElasticSearch 2 (33) - 信息聚合系列之聚合过滤
ElasticSearch 2 (33) - 信息聚合系列之聚合过滤 摘要 聚合范围限定还有一个自然的扩展就是过滤.因为聚合是在查询结果范围内操作的,任何可以适用于查询的过滤器也可以应用在聚合上. 版 ...
- week4
History:Commercialization and Growth course Explosive Growth of the Internet and Web The Year of the ...
- Activiti的ACT_GE_PROPERTY表初始化
create table ACT_GE_PROPERTY ( NAME_ ), VALUE_ ), REV_ integer, primary key (NAME_) ) ENGINE=InnoDB ...
- OneZero第三次站立会议(2016.3.23)
会议时间:2016年3月23日 13:00~13:15 会议成员:冉华,张敏,王巍,夏一鸣. 会议目的:汇报前一天工作,全体成员评论并修改. 会议内容:以下为会议插图 1.界面原型方面,夏在统计界面中 ...
- 一本通1669S-Nim
1669:S-Nim [输入样例] 2 2 5 3 2 5 12 3 2 4 7 4 2 3 7 12 5 1 2 3 4 5 3 2 5 12 3 2 4 7 4 2 3 7 12 0 [输出样例] ...
- SPFA最短路算法
SPFA是改良后的BellmanFord(在刘汝佳的入门经典2上,甚至直接将SPFA归为BellmanFord的队列优化版本). 这是算法的伪代码 d[s] = 0, 其余d[?] = INF; 将s ...
- 【BZOJ4477】[JSOI2015]字符串树(Trie树)
[BZOJ4477][JSOI2015]字符串树(Trie树) 题面 BZOJ 题解 对于每个点维护其到根节点的所有字符串构成的\(Trie\),显然可持久化一下就很好写了. 然后每次询问就是\(u+ ...
- 【Luogu1344】追查坏牛奶(最小割)
[Luogu1344]追查坏牛奶(最小割) 题面 洛谷 题解 裸的最小割,但是要求边的数量最小. 怎么办呢?给每条边的权值额外加上一个很大的值就了. #include<iostream> ...
- 【UOJ#67】新年的毒瘤(Tarjan)
[UOJ#67]新年的毒瘤(Tarjan) 题面 UOJ 题解 一棵\(n\)个节点的树显然有\(n-1\)条边,在本题中意味着删去一个点之后还剩下\(n-2\)条边.那么找到所有度数为\(m-(n- ...
- 包学会之浅入浅出Vue.js:升学篇
包学会之浅入浅出Vue.js:升学篇 蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门>书籍的翻译工作.目前专注前端图片优化与新技术的探研. ...