本文主要介绍基于 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
不要打开即可。