# Docker Redis
docker hub 网址:https://hub.docker.com/_/redis (opens new window)
当前(2020-04-02) latest 版本和 6.2.1 是同一个版本。
# 1. 安装及测试
# 查询中央仓库
docker search -f is-official=true redis
# 从中央仓库下载
docker pull redis:6.2.1
# 或,直接导入已有的镜像文件
# docker load -i redis-6.2.1.tar
# 查看本地镜像
docker images
# 会出现类似以下内容:
# REPOSITORY TAG IMAGE ID CREATED SIZE
# redis 6.2.1 7f33e76fcb56 45 hours ago 105MB
运行容器:
# 删除曾经已有的同名容器
docker stop redis-test
docker rm redis-test
# 创建并运行 redis 容器的语法
docker run -d --name <指定容器名> -p <指定宿主机端口>:6379 redis:6.2.1
例如:
docker run \
-d \
--name redis-test \
-p 6379:6379 \
redis:6.2.1
验证安装成功
通过 docker ps 命令查看容器的运行信息:
略
进入 redis-test 容器
docker exec -it redis-test /bin/bash
执行
redis-cli
连接 redis serverredis-cli
后续可选操作:
设置键值对
连上 Redis Server 之后,执行 redis 命令:
set test 1
,会显示OK
。从容器外部连接
redis-cli -h <宿主机IP> -p <宿主机端口> -a <登录密码>
# 2. 容器中的配置文件和数据的存储
Docker Redis Server 的数据的存储目录在容器内部的
/data
很显然,只有开启持久化功能时,才会有数据存储于此。
早期的 Docker Redis 在容器中有默认的配置文件,但现在没有了。
从 5 版本开始 Docker Redis 改变了思路,容器内部不在包含配置文件,而是要求容器启动时指定宿主机中的一个文件作为配置文件。
例如:
docker run \ ... \ -v <宿主机上的redis.conf>:/usr/local/etc/redis/redis.conf \ redis:6.2.1 \ redis-server /usr/local/etc/redis/redis.conf \ ...
说明
当然,如果你没有提供配置文件,它还是有默认的配置的,只不过你在容器中找不到配置文件。
5.0.6 的默认的配置文件的有效内容见最后。
# 3. 配置与挂载
删除已存在的同名容器
docker rm -f redis-6379
后续可通过 docker run 的 --rm 选项免去『删除』这步操作。
创建本机挂载目录
mkdir -p ~/docker/redis/6379/data touch ~/docker/redis/6379/redis.conf
创建并运行容器
docker run \ -d \ --name redis-6379 \ -p 6379:6379 \ -v ~/docker/redis/6379/redis.conf:/usr/local/etc/redis/redis.conf \ -v ~/docker/redis/6379/data:/data \ redis:6.2.1 \ redis-server /usr/local/etc/redis/redis.conf \ --appendonly yes
--appendonly yes 开启 Redis 持久化功能。
# 4. docker-compose 启动
version: '3'
services:
redis:
image: redis:5.0
container_name: redis-6379
mem_limit: 512m
ports:
- 6379:6379
volumes:
- "~/docker/6379/data:/data"
- "./docker/6379/redis.conf:/usr/local/etc/redis/redis.conf"
command:
redis-server /usr/local/etc/redis/redis.conf --appendonly yes
# 5. redis.conf
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes