docker封装redis镜像

本文介绍如何从头创建一个配置丰富的Redis Docker镜像,包括自定义配置文件、持久化存储设置及安全措施。通过调整maxmemory参数优化服务器资源使用,并实现服务重启策略,确保Redis服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

线上使用的redis版本为 3.2.13,但是dockerhub没有此版本的镜像。只有3.2.12
但是默认的镜像启动时,是没有redis.conf的,如果需要加配置,需要自己定义配置文件。

 

二、封装镜像

创建目录

# dockerfile目录
mkdir -p /opt/dockerfile/redis
# 持久化目录
mkdir -p /data/redis

 

/opt/dockerfile/redis目录结构如下:

./
├── dockerfile
├── redis.conf
└── run.sh

 

dockerfile

FROM redis:3.2.12
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf"]

 

redis.conf

dir /data
pidfile /data/redis.pid
logfile "/data/redis.log"
repl-disable-tcp-nodelay yes
no-appendfsync-on-rewrite yes
maxmemory 2048m
maxmemory-policy allkeys-lru
requirepass 123456

注意:调整maxmemory参数。我这里的服务器内存是4g,所以调整为2g

 

run.sh

#!/bin/bash
docker run -d -it --name redis_prod --restart=always -p 6379:6379 -v /data/redis:/data redis_prod:3.2.12

 

生成镜像

cd /opt/dockerfile/redis
docker build -t redis_prod:3.2.12 .

 

启动镜像

bash run.sh

 

三、测试

# docker exec -it redis_prod /bin/bash
# redis-cli
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> info
# Server
redis_version:3.2.12
...

 

 

### 解决Docker容器中Redis服务频繁断开连接的方法 当遇到Docker中的Redis服务频繁断开连接的情况时,可以考虑以下几个方面来解决问题。 #### 配置持久化存储 为了防止数据丢失以及减少因主机资源不足而导致的服务中断现象,在创建Redis实例时应设置持久化的卷挂载。通过指定本地路径映射到容器内部的数据目录,能够有效提高稳定性[^2]: ```bash -v /mydata/redis/data:/data \ ``` #### 设置合理的内存限制 如果宿主机物理内存不足以支撑当前业务负载,则可能会触发Linux内核OOM killer机制杀死进程。因此建议合理规划应用所需的最大RAM大小,并将其写入`docker-compose.yml`文件或命令行参数里: ```yaml services: redis: image: "redis" deploy: resources: limits: memory: 512M ``` #### 修改超时时间配置项 有时客户端会由于网络波动等原因造短暂失联而被误判为异常下线;此时可以通过调整`timeout`选项延长等待周期从而降低此类事件发生的概率。编辑自定义的`redis.conf`文件并将它挂载进去即可生效[^3]: ```properties # Set client timeout to a larger value (in seconds) timeout 600 ``` #### 启用AOF日志记录功能 Append Only File是一种用于增强数据库可靠性的特性之一。开启此开关后每次写操作都会追加一条指令至磁盘上的特定位置以便于灾难恢复期间快速重建索引结构。同样地,这一步骤也需要修改外部提供的模板再传给镜像使用[^4]: ```properties appendonly yes ``` #### 调整TCP Keepalive参数 对于长时间保持空闲状态却未真正关闭的链接来说,适当调高KeepAlive的时间间隔有助于及时发现对方已经不可达的事实进而主动释放资源而不是被动等待心跳失败后的重试逻辑处理。该行为可通过环境变量的形式传递给正在运行着的目标程序实现定制化需求[^5]: ```bash -e REDIS_TCP_KEEPALIVE=60 \ ``` 以上措施综合运用可以帮助改善由各种因素引起的不稳定状况,确保生产环境中基于Docker封装好的缓存组件始终处于最佳性能表现之下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值