本文主要介绍基于 Docker 的 Redis 服务基本使用,涉及服务创建、客户端连接测试等。
 
1. 相关资源 
 
2. 拉取镜像 1 2 3 4 5 ➜  docker pull redis ➜  docker pull redis:5 
 
检查镜像是否拉取成功
1 2 3 4 ➜  docker images REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE redis               5                   4cdbec704e47        9 days ago          98.2MB redis               latest              44d36d2c2374        2 months ago        98.2MB 
 
3. 使用 3.1. 默认启动 1 2 ➜  docker run --name myredis -d redis 41f9c2e8fb86c415257c0342eb58435c3a5bbaf10f888a2cb3c7243d08ec796c 
 
之后就可以通过客户端程序连接 127.0.0.1:6379 来访问了。
3.2. 怎么使用 redis-cli 连接容器? 1 2 3 4 5 6 7 8 ➜  docker run -it --link  myredis --rm  redis redis-cli -h myredis -p 6379 myredis:6379> KEYS * (empty list or set ) myredis:6379> SET name 'xiaoming'  OK myredis:6379> GET name "xiaoming" myredis:6379> exit  
 
3.3. 如何将数据持久化存储到宿主机? 1 ➜  docker run --name myredis2 -d -v ~/data/redis:/data redis redis-server --appendonly yes  
 
说明:
--appendonly yes 用于打开 redis 的数据持久化存储 
-v ~/data/redis:/data 用于将宿主机的目录映射到容器对应的数据存储目录 
 
3.4. 自定义配置文件 建议官网 下载指定版本的 Redis 源码包,解压后获取默认配置文件 redis.conf
然后在 Redis 容器启动时如下操作:
1 2 ➜  docker run -v ~/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name myredis3 redis redis-server /usr/local/etc/redis/redis.conf 
 
4. 使用 docker compose 编排 上面是基本使用方式,为便于管理,我们一般使用 docker compose 来统一创建、管理各服务。
4.1. 创建 1 2 3 4 5 6 7 8 ➜  tree -L 2 redis . ├── conf │   └── redis.conf <-- 默认配置文件 ├── data │   └── dump.rdb <-- 数据持久化文件 └── docker-compose.yml 
 
docker-compose.yml 文件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 version:  '3.1' services:   redis:      image:  redis:5      restart:  always      ports:        -  "56379:6379"      volumes:        -  ./data:/data:rw        -  ./conf/redis.conf:/usr/local/etc/redis/redis.conf      command:  redis-server  /usr/local/etc/redis/redis.conf  
 
4.2. 启动 
⚠️ 注意:启动前,注意修改配置文件中的连接密码(requirepass)和 IP 绑定(bind)两个属性,尤其是当使用 redis-cli 或其它客户端工具连接发生异常时。
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ➜  docker compose up Creating network "redis_default"  with the default driver Creating redis_redis_1 ... done  Attaching to redis_redis_1 redis_1  | 1:C 10 Apr 2020 07:24:54.884  redis_1  | 1:C 10 Apr 2020 07:24:54.885  redis_1  | 1:C 10 Apr 2020 07:24:54.885  redis_1  |                 _._ redis_1  |            _.-``__ '' -._ redis_1  |       _.-``    `.  `_.  '' -._           Redis 5.0.8 (00000000/0) 64 bit redis_1  |   .-`` .-```.  ```\/    _.,_ '' -._ redis_1  |  (    '      ,       .-`  | `,    )     Running in standalone mode  redis_1  |  |`-._`-...-` __...-.``-._|' ` _.-'|     Port: 6379 redis_1  |  |    `-._   `._    /     _.-'     |     PID: 1redis_1  |   `-._    `-._  `-./  _.-'    _.-'  redis_1  |  |`-._`-._    `-.__.-'    _.-' _.-'|  redis_1  |  |    `-._`-._        _.-' _.-'    |           http://redis.io redis_1  |   `-._    `-._`-.__.-' _.-'    _.-' redis_1  |  |`-._`-._    `-.__.-'    _.-' _.-'|  redis_1  |  |    `-._`-._        _.-' _.-'    | redis_1  |   `-._    `-._`-.__.-' _.-'    _.-' redis_1  |       `-._    `-.__.-'    _.-'  redis_1  |           `-._        _.-'  redis_1  |               `-.__.-' redis_1  | redis_1  | 1:M 10 Apr 2020 07:24:54.890  redis_1  | 1:M 10 Apr 2020 07:24:54.891  redis_1  | 1:M 10 Apr 2020 07:24:54.891  redis_1  | 1:M 10 Apr 2020 07:24:54.901 * DB loaded from disk: 0.009 seconds redis_1  | 1:M 10 Apr 2020 07:24:54.901 * Ready to accept connections 
 
4.3. 连接测试 1 2 ➜  docker exec  -it ${Redis 容器 ID}  redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> 
 
5. 常见问题 5.1. 客户端无法连接 情况一:地址、端口号 连接时确保填写正确的连接地址 和端口号 。
从另一个容器连接到当前 Redis 服务,需要使用 --link 连接两个容器,并且连接地址使用 Redis 对应的服务名; 
从物理机连接到当前 Redis 服务,确保端口是暴露出来的端口号 ,而不是默认的端口号。 
 
情况二:配置文件 在较高版本的 redis.conf 配置文件中,属性 protected-mode yes 被默认开启,以保证 Redis 的安全性。
所以必须给 Redis 设置密码才可以连接。
如果只是测试用而不需要密码,则修改此属性的值为 no ,并且属性 requirepass xxx 不要打开即可。