1. 获取镜像

  1. # 查看可用的稳定版本
  2. sudo docker search redis
  3. sudo docker pull redis:5.0.8
  4. sudo docker image ls |grep redis

2. Redis单机

1. 启动容器

  1. sudo docker run -d --name redis6379 -p 6379:6379 redis:5.0.8 --requirepass "yeech"
  2. # 持久化Redis
  3. mkdir -p /tmp/redisdata
  4. sudo docker run -d --name redis6379 -p 6379:6379 -v /tmp/redisdata:/data redis:5.0.8 --requirepass "yeech" --appendonly yes
  5. # 停止容器
  6. sudo docker stop redis6379
  7. # 删除容器
  8. sudo docker rm redis6379
  9. # 查看容器状态
  10. sudo docker ps -a
  11. # 设置开机自启
  12. sudo docker update --restart=always redis6379

2. 验证

  1. # 进入终端
  2. sudo docker exec -it redis6379 redis-cli -h 127.0.0.1 -p 6379 -a yeech
  3. redis>> keys *
  4. redis>> set a 124
  5. redis>> get a
  6. # 容器日志查看
  7. sudo docker logs redis6379
  8. sudo docker logs -f -t --tail=50 redis6379

3. Redis Cluster

1. 创建集群配置

  1. sudo mkdir -p /usr/local/redis-cluster
  2. cd /usr/local/redis-cluster
  3. vi redis-cluster.tmpl

配置如下:

  1. port ${PORT}
  2. protected-mode no
  3. cluster-enabled yes
  4. cluster-config-file nodes.conf
  5. cluster-node-timeout 5000
  6. cluster-announce-ip 192.168.0.99
  7. cluster-announce-port ${PORT}
  8. cluster-announce-bus-port 1${PORT}
  9. appendonly yes
  10. masterauth yeech
  11. requirepass yeech
  • 参数说明
    • masterauth:主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到。
    • requirepass:对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。

      2. 生成节点目录

      1. cd /usr/local/redis-cluster
      2. for port in `seq 6001 6006`; do \
      3. mkdir -p ./${port}/conf \
      4. && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
      5. && mkdir -p ./${port}/data; \
      6. done
      共生成6个文件夹,从6001到6006,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件。

      3. 创建容器

      1. # 清理data,防止下次创建报错“[ERR] Node xxx.xxx.xxx.xxx:pppp is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.”
      2. rm -rf /usr/local/redis-cluster/600*/data/*
      3. # 启动容器
      4. for port in `seq 6001 6006`; do \
      5. docker run -d -ti \
      6. -v /usr/local/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
      7. -v /usr/local/redis-cluster/${port}/data:/data \
      8. --restart always --name redis-${port} --net host \
      9. --sysctl net.core.somaxconn=1024 redis:5.0.8 redis-server /usr/local/etc/redis/redis.conf; \
      10. done
      11. # 查看容器状态
      12. docker ps
      13. # 停止容器
      14. docker stop redis-6001
      15. # 删除容器
      16. docker rm redis-6001

      4. 创建Redis集群

      1. 进入Redis客户端

      1. # 随便进入一个已运行的容器
      2. docker exec -it redis-6001 bash

      2. 创建Redis集群

      1. /usr/local/bin/redis-cli -a yeech --cluster create \
      2. 192.168.0.99:6001 \
      3. 192.168.0.99:6002 \
      4. 192.168.0.99:6003 \
      5. 192.168.0.99:6004 \
      6. 192.168.0.99:6005 \
      7. 192.168.0.99:6006 \
      8. --cluster-replicas 1

      5. 验证

      1. # 进入终端
      2. sudo docker exec -it redis-6001 redis-cli -a yeech -h 127.0.0.1 -p 6001 -c
      3. redis>> cluster info
      4. redis>> cluster nodes
      5. redis>> keys *
      6. redis>> set a 124
      7. redis>> get a
      8. # 容器日志查看
      9. sudo docker logs redis-6001
      10. sudo docker logs -f -t --tail=50 redis-6001

      6. 停止容器

      1. for port in `seq 6001 6006`; do \
      2. docker stop redis-${port}; \
      3. done

      7. 启动容器

      1. for port in `seq 6001 6006`; do \
      2. docker start redis-${port}; \
      3. done

      8. 删除容器

      1. for port in `seq 6001 6006`; do \
      2. docker stop redis-${port}; \
      3. docker rm redis-${port}; \
      4. done

      参考

      CSDN:极简Docker环境Redis-5安装redis-cluster集群(不需要Ruby)
      https://blog.csdn.net/adolph586/article/details/85340764