반응형

개인 프로젝트에서 EC2 환경에서 Docker에 Redis를 설치할 일이 생겼습니다.

다음에도 설치 과정을 구글링해서 찾아볼 것 같아서 기록용으로 기록해보고자 합니다!

 

설치 과정은 도커가 설치되어 있는 EC2 Linux 환경으로 진행되었습니다.


1. 도커에 Redis 설치

기본적으로 도커 자체에 Redis를 설치하는 것은 간단합니다.

 

1-1. Docker Redis Image 다운로드


      
$ docker pull redis

 

1-2. 다운로드 된 Docker Image 확인


      
$ docker images

 

2. Redis 추가 설정

추가 Redis 설정 부분을 설정해봅시다.

 

2-1. Docker Volume 설정

Redis는 in-memory 기반 저장소이기 때문에 Docker Container 내에서 실행 시 해당 컨테이너가 중지되거나 삭제되면

Redis에 저장된 모든 데이터가 손실됩니다.

이러한 문제를 방지하기 위해 도커를 사용할 때 볼륨이라는 개념을 사용해서 컨테이너에 파일 or 디렉토리를 마운트하여 방지합니다.

 

따라서 먼저, Redis 백업용 도커 볼륨을 생성해야합니다.


      
# 도커 Volume 생성
$ docker volume create (volume name)

 

그 후에 docker volume을 조회하여 Mountpoint를 알 수 있습니다.


      
# 도커 Volume 조회
docker volume inspect (volume name)

Mountpoint를 기억했다가, 이후에 도커 실행 시에 -v 옵션으로 볼륨 마운트 시 사용합니다.

 

 

2-2. Redis Config 환경 설정 파일 생성

Redis 내부 설정과 관련한 파일인 redis.conf를 생성해서 Redis 실행 시 사용합니다.


      
# 연결 가능한 네트위크(0.0.0.0 = Anywhere)
bind 0.0.0.0
# 연결 포트
port 6379
# Master 노드의 기본 사용자 비밀번호
requirepass redis
# 최대 사용 메모리 용량(Default : 시스템 전체 용량)
maxmemory 2gb
# 설정된 최대 사용 메모리 용량을 초과했을때 처리 방식
# - noeviction : 쓰기 동작에 대해 error 반환 (Default)
# - volatile-lru : expire 가 설정된 key 들중에서 LRU algorithm 에 의해서 선택된 key 제거
# - allkeys-lru : 모든 key 들 중 LRU algorithm에 의해서 선택된 key 제거
# - volatile-random : expire 가 설정된 key 들 중 임의의 key 제거
# - allkeys-random : 모든 key 들 중 임의의 key 제거
# - volatile-ttl : expire time(TTL)이 가장 적게 남은 key 제거 (minor TTL)
maxmemory-policy volatile-ttl
# RDB 설정 (주기적 백업)
# 15분 안에 최소 1개 이상의 key가 변경되었을 때
save 900 1
# 5분 안에 최소 10개 이상의 key가 변경되었을 때
save 300 10
# 60초 안에 최소 10000개 이상의 key가 변경되었을 때
save 60 10000
# AOF 설정 (쓰기에 대한 로그 파일 저장)
## AOF 사용 여부
# appendonly yes
# 저장할 AOF 파일명
# appendfilename appendonly.aof
# 디스크와 동기화 처리 방식
# - always : AOF 값을 추가할 때마다 fsync를 호출해서 디스크에 쓰기
# - everysec : 매초마다 fsync를 호출해서 디스크에 쓰기
# - no : OS가 실제 sync를 할 때까지 따로 설정하지 않음
# appendfsync everysec
## Replication 관련 설정
## Slave Redis 설정
#slaveof 127.0.0.1 6380

 

위와 같이 Redis 관련 설정 파일을 작성했습니다.

(저는 백업 종류 중에서 RDB, AOF 중 RDB를 사용했고 Replication은 진행하지 않았으므로 설정에서 빼주었습니다.)

(Docker에 Redis를 띄운 여러 포스팅을 찾아보다 보니, 비밀번호 설정을 하지 않았을 때 저장된 키가 해킹에 의해 사라진다는 얘기가 많았기 때문에 requirepass를 통해 비밀번호를 설정해줬습니다.)

 


3. Docker Container로 Redis 실행

마지막으로 여러 설정을 거친 Redis를 실행해봅시다.

다음과 같은 명령어로 실행하면 됩니다.


      
$ docker run \
-d \
--restart=always \
--name=(redis container name) \
-p (host port):(container port) \
-v (redis.conf 생성한 경로)/redis.conf:/etc/redis/redis.conf \
-v (생성한 Docker Volume Mountpoint):/data \
redis:latest redis-server /etc/redis/redis.conf

 

이렇게 하면 도커 컨테이너가 실행됩니다.

 

도커 컨테이너 위에서 Redis가 잘 동작하는지 확인해봅시다.


      
docker exec -i -t (생성한 redis 컨테이너 이름) redis-cli -a 비밀번호​

 

이렇게 redis-cli로 접속 후 ping 명령어를 사용했을 때 PONG이 출력되면 잘 동작하는 것입니다.

redis-cli ping & pong


Reference

 

https://devbksheen.tistory.com/entry/2-Docker%EB%A1%9C-Redis-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0

 

2. Docker로 Redis 실행하기

1. Redis의 이해 Redis란 무엇인가? Remote Dictionary Server로 key-value 형태로 데이터를 저장하고 관리하는 서버를 의미합니다. Redis의 주요 사용자들은 이미 대규모 서비스를 운영하고 있는 큰 기업들이

devbksheen.tistory.com

https://junior-datalist.tistory.com/351

 

도커에서 Redis 사용할 때 시행착오 3가지

목차 - 개요 : 사용한 명령어 - 1. `-v /path/on/host:/data` 옵션 누락 - 2. 포트 포워딩 옵션 누락 - 3. 키가 사라진 이유 (feat. 해킹?) - 결론 환경 ubuntu version: 18.04 docker version: 23.0.1 redis image version: latest 개

junior-datalist.tistory.com

 

반응형

'DB > Redis' 카테고리의 다른 글

[Redis] Redis의 다양한 자료구조와 활용 예시 알아보기  (0) 2024.08.07
[DB] Redis란?  (0) 2023.12.17
BE_성하