docker redis
[Redis] Docker:Redis 구성 하기(feat.docker-compose)
docker-compose with Redis Container 환경 구성
들어가며,
회사에서 업무로 Redis를 Global Cache 용도로 사용 하고 있습니다. Cache 전략은 다양한 패턴이 있는데, 그 중 현재는 Cache Aside 전략으로 DB 조회 전 Cache에 동일한 Key에 해당하는 데이터가 있는지 조회 후 결과를 리턴해주는 용도로 사용 중입니다. 가장 일반적인 Cache 용도라고 보실 수 있습니다. Cache 전략에 관한 자세한 내용은 다음에 한번 다뤄 보도록 하고, 오늘은 docker-compose를 활용하여 로컬 환경에 Redis Container를 구성하는 방법에 대한 실습 과정을 공유해보겠습니다.
docker-compose file 구성
Redis docker image 6.2.8
Redis Cluster 구성
redis.conf 설정
Container properties를 먼저 보겠습니다.
- 각 클러스터와의 연결을 위해 ports 추가,
- Redis 환경 구성을 위해 설정한 redis.conf 파일 경로를 volumes에 추가.
- 컨테이너 기동시 설정된 conf 파일을 로드하기 위한 Command 명령어 추가.
redis.conf 파일은 redis.io 사이트에서 설치하시는 image 버전에 맞게 다운로드 받으실 수 있습니다.
다운 받은 conf 파일에 기본적으로 port 설정과 보안, 클러스터 그리고 백업 정책 등을 아래와 같이 변경하였습니다. 이 부분에서 삽질을 많이 했네요ㅜㅜ
보안 설정의 경우 추후 Spring Boot application과 연동을 위해서는 반드시 적절한 정책으로 설정을 하셔야 합니다. Default로 설정할 경우 Redis Container는 정상적으로 생성되고 redis-cli Command를 사용하여 Redis command 테스트는 가능하지만 실제 Spring Boot application과 연동하여 개발 용도로는 사용할 수 없기 때문입니다.. 주저리주저리..했네요
redis-master:
image: redis:6.2.8
container_name: redis-6379
restart: always
ports:
- 6379:6379
- 6380:6380
- 6381:6381
volumes:
- ./data/redis/6379:/data
- ./data/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
Redis Container 구성을 위해 yml 파일에 설정한 properties 입니다.
아래 설정한 내용은 Github에 프로젝트로 생성하였으니 Clone 하셔서 활용하셔도 좋을 거 같습니다.
version: '3'
services:
redis-master:
image: redis:6.2.8
container_name: redis-6379
restart: always
ports:
- 6379:6379
- 6380:6380
- 6381:6381
volumes:
- ./data/redis/6379:/data
- ./data/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
redis-slave1:
image: redis:6.2.8
container_name: redis-6380
network_mode: "service:redis-master"
restart: always
volumes:
- ./data/redis/6380:/data
- ./data/redis6380.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
redis-slave2:
image: redis:6.2.8
container_name: redis-6381
network_mode: "service:redis-master"
restart: always
volumes:
- ./data/redis/6381:/data
- ./data/redis6381.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
redis-cluster-entry:
image: redis:6.2.8
container_name: redis-cluster-entry
network_mode: "service:redis-master"
command: redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 --cluster-yes
depends_on:
- redis-master
- redis-slave1
- redis-slave2
update 중....