基于 Alpine 源码编译 Redis 7/8 的容器项目,提供以下能力:
entrypoint.sh 支持按需注入 requirepass(仅在设置 REDIS_PASS 时启用)。docker-compose.yml。.
├── Dockerfile
├── docker-compose.yml
├── entrypoint.sh
├── redis.conf
└── README.md
benyoo/alpine:3.21.202603277.2.11(可通过构建参数 BASE_IMAGE、REDIS_VERSION 覆盖)/data/redis/etc/redis.conf| Git tag | 基础镜像 | Redis 版本 |
|---|---|---|
7.2.11 | benyoo/alpine:3.21.20260327 | 7.2.11 |
8.0.4 | benyoo/alpine:3.22.20260327 | 8.0.4 |
8.4.2 | benyoo/alpine:3.23.20260327 | 8.4.2 |
同一仓库提交下通过不同构建参数产出对应镜像;检出对应 tag 后按上表 docker build 即可。
Redis 8.x 在编译 redis-benchmark 时会链接 libstdc++,Dockerfile 已在构建阶段安装 g++(构建结束后随 .build-deps 一并卸载,不留在最终镜像里)。
docker-compose.yml 中设置 REDIS_PASS)。docker compose up -d --build
docker compose ps
docker compose logs -f redis
# 无密码模式
redis-cli -h 127.0.0.1 -p 6379 ping
# 有密码模式
redis-cli -h 127.0.0.1 -p 6379 -a <你的密码> ping
返回 PONG 即为正常。
默认(Redis 7.2.11 + Alpine 3.21):
docker build -t benyoo/redis:7.2.11 .
Redis 8.0.4(Alpine 3.22):
docker build \
--build-arg BASE_IMAGE=benyoo/alpine:3.22.20260327 \
--build-arg REDIS_VERSION=8.0.4 \
-t benyoo/redis:8.0.4 .
Redis 8.4.2(Alpine 3.23):
docker build \
--build-arg BASE_IMAGE=benyoo/alpine:3.23.20260327 \
--build-arg REDIS_VERSION=8.4.2 \
-t benyoo/redis:8.4.2 .
docker run -d \
--name redis \
-p 6379:6379 \
-e DEFAULT_CONF=enable \
-e ENABLE_KERNEL_TUNING=auto \
-v "$(pwd)/data:/data/redis" \
-v "$(pwd)/redis.conf:/etc/redis.conf" \
--restart unless-stopped \
docker-redis:7.2.11
启用密码时追加:
-e REDIS_PASS='replace_with_strong_password'
自动生成 16 位随机密码时使用:
-e REDIS_PASS='auto'
| 变量名 | 默认值 | 说明 |
|---|---|---|
DATA_DIR | /data/redis | Redis 数据目录 |
CONFIG_FILE | /etc/redis.conf | Redis 配置文件路径 |
DEFAULT_CONF | enable | 是否允许 entrypoint 自动补充配置(如 requirepass) |
REDIS_PASS | 空(不启用密码) | 仅在设置后才自动注入 requirepass;取值为 auto 时自动生成 16 位大小写字母+数字随机密码 |
ENABLE_KERNEL_TUNING | auto | 是否尝试设置 somaxconn、overcommit_memory 与 THP(失败不退出) |
DEFAULT_CONF 的禁用值以下值会被识别为禁用:disable、false、no、0(不区分大小写)。
redis.conf 设计说明当前默认配置是“容器友好 + 单实例生产可用”的折中方案:
bind 0.0.0.0,protected-mode nosave + appendonly yesappendfsync everysec,兼顾安全与性能maxmemory-policy noeviction如需更严格安全策略,可在 redis.conf 内手动固定 requirepass,并将 DEFAULT_CONF=disable。
./data:/data/redis,避免容器销毁导致数据丢失。redis.conf,只有在设置了 REDIS_PASS 时 entrypoint 才会自动追加 requirepass。docker-compose.yml 已内置健康检查:
REDIS_PASS 时:redis-cli -a "$REDIS_PASS" pingredis-cli ping可通过以下命令查看:
docker inspect --format='{{json .State.Health}}' redis | jq
# 查看日志
docker logs -f redis
# 进入容器
docker exec -it redis bash
# 查看 Redis 信息(无密码)
docker exec -it redis redis-cli INFO server
# 查看 Redis 信息(有密码)
docker exec -it redis redis-cli -a <你的密码> INFO server
# 安全停止
docker stop redis
REDIS_PASS 或手动配置 requirepass)。used_memory、connected_clients、aof_current_size 和慢日志。ENABLE_KERNEL_TUNING=auto 在无权限或不支持的平台会自动跳过,不影响容器启动。sysctls 中统一设置。Content type
Image
Digest
sha256:25cd1c3cb…
Size
34.3 MB
Last updated
6 months ago
docker pull benyoo/redis