개인 프로젝트에서 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이 출력되면 잘 동작하는 것입니다.
Reference
https://devbksheen.tistory.com/entry/2-Docker%EB%A1%9C-Redis-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0
https://junior-datalist.tistory.com/351
'DB > Redis' 카테고리의 다른 글
[Redis] Redis의 다양한 자료구조와 활용 예시 알아보기 (0) | 2024.08.07 |
---|---|
[DB] Redis란? (0) | 2023.12.17 |