本篇博客主要介绍以 docker 容器方式部署 Redis 的操作。
1、最简单的 Redis 容器启动方式
1
|
docker run -d --name redis redis:latest
|
2、以持久化存储方式启动 Redis 容器
1
|
docker run -d --name redis redis:latest redis-server --appendonly yes
|
3、某个应用连接 Redis
1
|
docker run -d --name some-app --link
|
4、使用自定义配置文件启动 Redis 容器
1
2
3
4
5
6
7
8
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/redis_master.conf:/usr/local/etc/redis/redis.conf \
-v /home/xdhuxc/redis/log/redis_master.log:/var/log/redis/redis_master.log \
-v /home/xdhuxc/redis/data:/data \
--name redis \
redis:latest \
redis-server /usr/local/etc/redis/redis.conf
|
1
2
3
4
5
6
7
|
docker run -d \
--privileged=true \
--network host \
-v /xdhuxc/docker-compose/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--name redis \
redis:4.0.9 \
redis-server /usr/local/etc/redis/redis.conf
|
1、安装并启动 Docker,执行如下命令安装 docker
1
2
3
|
yum install -y docker
systemctl enable docker
systemctl start docker
|
2、直接从 dockerhub 官网拉取 Redis镜像
3、准备配置文件,从官方下载的Redis镜像中没有redis.conf配置文件,因此需要提前准备配置文件。
从 Redis官网 下载最新稳定版 Redis,目前为:redis-4.0.2,下载redis-4.0.2.tar.gz,解压该软件包,获取redis.conf 配置文件
4、启动 Redis 主节点
1)修改配置文件
注释掉 bind 127.0.0.1 所在行
注释掉 protected-mode yes所在行
注释掉 daemonize no 或者设置为 no 所在行(否则容器启动,加载配置文件后就退出,没有其他提示),报错为:
1
2
3
4
5
6
7
|
[root@store ~]# docker logs redis
1:C 10 Nov 00:59:40.915 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 10 Nov 00:59:40.916 # Redis version=4.0.2, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 10 Nov 00:59:40.916 # Configuration loaded
[root@store ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5ba4eeb8a53 redis:latest "docker-entrypoint.sh" About a minute ago Exited (0) About a minute ago redis
|
2)启动 Redis Master 容器
启动命令为:
1
2
3
4
5
6
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/conf/redis_master.conf:/usr/local/etc/redis/redis.conf \
--name redis-master \
redis:latest \
redis-server /usr/local/etc/redis/redis.conf
|
1
2
|
[root@store ~]# docker logs redis-master
1:C 10 Nov 00:03:25.961 # Fatal error, can't open config file '/usr/local/etc/redis/redis.conf'
|
解决:在启动命令中加入 --privileged=true
参数
对于挂载的文件,要提前建立好空文件,否则会以文件名为目录名创建目录
1
2
3
4
5
6
7
8
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/redis-master.conf:/usr/local/etc/redis/redis.conf \
-v /home/xdhuxc/redis/data:/data
-v /hoem/xdhuxc/redis/log/redis-master.log:/var/log/redis/redis-master.log \ #由redis.conf中logfile指定
--name redis-master \
redis:latest \
redis-server /usr/local/etc/redis/redis.conf
|
正确的启动命令:(取消logfile参数)
1
2
3
4
5
6
7
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/conf/redis-master.conf:/usr/local/etc/redis/redis.conf \
-v /home/xdhuxc/redis/data:/data \
--name redis-master \
redis:4.0.2 \
redis-server /usr/local/etc/redis/redis.conf
|
测试 Redis Master 容器,可以正常使用。
1
2
3
4
5
6
7
8
9
10
11
|
[root@centos_1 conf]# docker exec -it redis-master /bin/bash
root@1cc216ffcba8:/data# redis-cli
127.0.0.1:6379> set aaa aaa
OK
127.0.0.1:6379> get aaa
"aaa"
127.0.0.1:6379> set 123 abc
OK
127.0.0.1:6379> get 123
"abc"
127.0.0.1:6379>
|
5、Redis Slave 配置文件和启动(使用同一个 redis-slave.conf)
复制 redis-master.conf 为 redis-slave.conf,并修改如下配置项:
1
2
3
|
#slaveof <masterip> <masterport>
修改为:
slaveof master 6379
|
启动 redis-slave-one 容器
1
2
3
4
5
6
7
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/conf/redis-slave.conf:/usr/local/etc/redis/redis.conf \
--name redis-slave-one \
--link redis-master:master \
redis:4.0.2 \
redis-server /usr/local/etc/redis/redis.conf
|
启动 redis-slave-two 容器
1
2
3
4
5
6
7
|
docker run -d \
--privileged=true \
-v /home/xdhuxc/redis/conf/redis-slave.conf:/usr/local/etc/redis/redis.conf \
--name redis-slave-two \
--link redis-master:master \
redis:4.0.2 \
redis-server /usr/local/etc/redis/redis.conf
|