Docker로 설치한 Redis의 데이터가 초기화되는 오류
1. 문제 상황
서버가 빌드될 때마다 Redis Container도 Stop - Start를 하고 있었는데,
Container 재실행 과정에서 데이터가 손실되고 있지는 않은지 우려되어 확인해보았다.
역시나 Redis의 data가 초기화되고 있었다 ..!
Container 재실행 과정에서 데이터가 손실되고 있지는 않은지 우려되어 확인해보았다.
역시나 Redis의 data가 초기화되고 있었다 ..!
2. 원인 파악
-
서버가 빌드 될 때마다 Redis container도 docker down 후 다시 docker up 되고 있었다.
- 서버와 Redis가 하나의 docker-compose.xml에서 실행되고 있었다.
- 그렇지만 서버를 빌드할 때마다 Redis를 다시 실행할 필요가 없었다.
3. 해결 방법
- 서버를 빌드할 때 Redis도 다시 실행하지 않도록 Redis docker-compose를 서버 docker-compose와 분리해서
ec2 내의 다른 위치에 저장했다.- 동일 디렉토리 내에 저장하여
.env
를 공유하도록 했다.-
docker-compose.yml
services: [service 이름]: build: . container_name: [서버 Container 이름] environment: DATABASE_PASSWORD: ${DATABASE_PASSWORD} DATABASE_URL: ${DATABASE_URL} DATABASE_USERNAME: ${DATABASE_USERNAME} JWT_SECRET: ${JWT_SECRET} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} REDIS_PASSWORD: ${REDIS_PASSWORD} TZ: Asia/Seoul ports: - "${BACK_PORT}:${BACK_PORT}" restart: always
-
docker-compose-redis.yml
services: redis: image: redis:latest container_name: [Redis Container 이름] restart: always ports: - [Redis Port]:6379 environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - TZ=Asia/Seoul
-
- 동일 디렉토리 내에 저장하여
- 서버를 빌드할 때 Redis는 다시 실행되지 않고, 데이터도 유지되는 것을 확인했다.
-
빌드 전 Redis
-
빌드
-
빌드 후 Redis : 데이터 유지됨
-
4. 느낀점
- Redis를 Docker로 띄우는 거보다는 직접 띄우는 것이 좋을 것 같다
- Redis를 편리하게 사용하기 위해서 Docker를 이용했다.
- 그런데 Docker Container가 중지되면 데이터 손실이 발생할 수 있어서 데이터를 저장하는 용도로는 적합하지 않은 것 같다.
- Docker를 이용하는 경우, Redis 데이터를 서버 내에 백업하는 방법을 찾아봐야겠다.
- Container 중지로 인한 데이터 손실을 최소화하기 위해서
Leave a comment