docker 构建带健康检查的redis镜像
Posted 粽先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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镜像的主要内容,如果未能解决你的问题,请参考以下文章
用于 pentaho 数据集成 (pdi) 的 docker-compose 健康检查