一、单节点redis

1)拉取镜像

docker pull redis:5

2.1)方法一:直接创建容器

docker run \
  -p 6379:6379 \
  --restart=always \
  --name some-redis \
  -v /mnt/redis/data:/data \
  --network=my-network \
  --network-alias=redis-alias \
  -e TZ=Asia/Shanghai \
  -d redis:tag redis-server --appendonly yes --requirepass "my-secret-pw"
  • some-redis:创建后的容器名称(此处我修改为 redis)
  • data:挂载数据路径
  • network:非必须,要加入的网络
  • network-alias:被必须,在网络中的别名
  • TZ:时区
  • tag:指定 redis 版本(此处我修改为5)
  • requirepass:登陆密码

2.2)方法二:自定义配置

创建映射文件夹并把自定义的 redis.conf 复制进去

mkdir -p /myredis/conf/

redis.conf 主要修改这几点

  • bind 0.0.0.0
  • protected-mode no
  • daemonize no
  • requirepass 你的密码

然后创建容器

docker run -d -p 6379:6379 -v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf --name redis --restart=always redis:5 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

3)测试连接

dockerfile搭建redis docker创建redis_docker

二、redis单机集群

1. 创建redis-cluster.yaml文件,注意修改ip

name: redis-cluster
services:
  redis-node-0:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-0:/bitnami/redis/data
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7000
      - REDIS_CLUSTER_ANNOUNCE_PORT=7000
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8 #主机IP或公网IP,不要使用127.0.0.1或localhost,下面节点也记得换
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17000
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
    ports:
      - 7000:7000
      - 17000:17000

  redis-node-1:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-1:/bitnami/redis/data
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7001
      - REDIS_CLUSTER_ANNOUNCE_PORT=7001
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17001
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
    ports:
      - 7001:7001
      - 17001:17001

  redis-node-2:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-2:/bitnami/redis/data
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7002
      - REDIS_CLUSTER_ANNOUNCE_PORT=7002
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17002
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
    ports:
      - 7002:7002
      - 17002:17002

  redis-node-3:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-3:/bitnami/redis/data
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7003
      - REDIS_CLUSTER_ANNOUNCE_PORT=7003
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17003
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
    ports:
      - 7003:7003
      - 17003:17003

  redis-node-4:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-4:/bitnami/redis/data
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_PORT_NUMBER=7004
      - REDIS_CLUSTER_ANNOUNCE_PORT=7004
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17004
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
    ports:
      - 7004:7004
      - 17004:17004

  redis-node-5:
    image: docker.io/bitnami/redis-cluster:7.0
    volumes:
      - redis-cluster_data-5:/bitnami/redis/data
    depends_on:
      - redis-node-0
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
    environment:
      - ALLOW_EMPTY_PASSWORD=yes
      - REDIS_CLUSTER_REPLICAS=1
      - REDIS_PORT_NUMBER=7005
      - REDIS_CLUSTER_ANNOUNCE_PORT=7005
      - REDIS_CLUSTER_ANNOUNCE_BUS_PORT=17005
      - REDIS_CLUSTER_ANNOUNCE_IP=192.168.3.8
      - REDIS_CLUSTER_DYNAMIC_IPS=no
      - REDIS_NODES=redis-node-0:7000 redis-node-1:7001 redis-node-2:7002 redis-node-3:7003 redis-node-4:7004 redis-node-5:7005
      - REDIS_CLUSTER_CREATOR=yes
    ports:
      - 7005:7005
      - 17005:17005

volumes:
  redis-cluster_data-0:
  redis-cluster_data-1:
  redis-cluster_data-2:
  redis-cluster_data-3:
  redis-cluster_data-4:
  redis-cluster_data-5:

2. 启动集群

docker compose -f redis-cluster.yaml up -d

3. 需要删除集群的话,使用下面的命令

docker compose -f redis-cluster.yaml down && docker volume prune -f