You always need a local running Redis Cluster if your application has a dependency on the redis cluster. You can follow the below steps to create a redis cluster using docker-compose
Create the Redis Conf File
Move to the folder where you want to create the redis cluster. First, create a folder named redis-cluster
Bash
mkdir redis-cluter
Create a new folder inside the redis-cluster folder that will hold the configuration for all the redis cluster nodes
Bash
cd redis-cluster
mkdir redis
touch redis.conf
Put the below contents in the redis.conf file
Bash
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
move out of the redis folder and come to the redis-cluster directory
Bash
cd ..
Create the docker-compose file
Bash
touch redis-cluster-docker-compose.yml
Put the below contents in the docker-compose file
Bash
version: '3'
networks:
redis-cluster-compose:
driver: bridge
services:
redis-cluster-creator:
command:
- redis-cli
- --cluster
- create
- localhost:7001
- localhost:7002
- localhost:7003
- localhost:7004
- localhost:7005
- localhost:7006
- --cluster-yes
- --cluster-replicas
- '1'
depends_on:
redis-node-1:
condition: service_healthy
redis-node-2:
condition: service_healthy
redis-node-3:
condition: service_healthy
redis-node-4:
condition: service_healthy
redis-node-5:
condition: service_healthy
redis-node-6:
condition: service_healthy
image: docker.io/redis:latest
network_mode: host
redis-node-1:
command:
- redis-server
- /redis/redis.conf
- --port
- '7001'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7001'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7001:7000
volumes:
- redis-data-1:/data
- ./redis:/redis
redis-node-2:
command:
- redis-server
- /redis/redis.conf
- --port
- '7002'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7002'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7002:7000
volumes:
- redis-data-2:/data
- ./redis:/redis
redis-node-3:
command:
- redis-server
- /redis/redis.conf
- --port
- '7003'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7003'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7003:7000
volumes:
- redis-data-3:/data
- ./redis:/redis
redis-node-4:
command:
- redis-server
- /redis/redis.conf
- --port
- '7004'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7004'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7004:7000
volumes:
- redis-data-4:/data
- ./redis:/redis
redis-node-5:
command:
- redis-server
- /redis/redis.conf
- --port
- '7005'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7005'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7005:7000
volumes:
- redis-data-5:/data
- ./redis:/redis
redis-node-6:
command:
- redis-server
- /redis/redis.conf
- --port
- '7006'
healthcheck:
interval: 10s
retries: '3'
test:
- CMD
- redis-cli
- -p
- '7006'
- -c
- ping
timeout: 5s
image: docker.io/redis:latest
network_mode: host
ports:
- 7006:7000
volumes:
- redis-data-6:/data
- ./redis:/redis
volumes:
redis-data-1: {}
redis-data-2: {}
redis-data-3: {}
redis-data-4: {}
redis-data-5: {}
redis-data-6: {}
Run the docker containers
Bash
docker-compose -p "" -f redis-cluster-docker-compose.yml up
this will run the redis-cluster on your local machine
- Redis containers are running on ports 7001, 7002, 7003, 7004, 7005, 7006
If you check the running containers you will get the below output
Bash
➜ docker-compose docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6e5b1393497 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-5-1
ed3f7bb7fbb8 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-3-1
9ce7e124b13f redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-4-1
39312cfeef00 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-1-1
e14592f57170 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-6-1
104be25c7404 redis:latest "docker-entrypoint.s…" 11 minutes ago Up 4 minutes (healthy) docker-compose-redis-node-2-1