[Infra] Docker-Compose 를 통한 DB 구축
- 환경 변수 파일: 보안이 필요한 user, password, database에 관한 정보를 저장
# .env
DB_USER={user이름}
DB_PASSWORD={password}
DB_DATABASE={database이름}
MariaDB
version: '3'
services:
...
mariadb:
image: mariadb:latest
container_name: mariadb
ports:
- "3306:3306"
volumes:
- ./docker_volumes/mariadb:/var/lib/mysql
restart: always
networks:
- infra
environment:
- MYSQL_USER=${DB_USER}
- MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
- MYSQL_DATABASE=${DB_DATABASE}
networks:
infra:
external: true
volumes:
...
mariadb:
driver: local
driver_opts:
type: none
device: $PWD/docker_volumes/mariadb
o: bind
- restart: always : 컨테이너가 종료될 때 항상 다시 시작하도록 설정
- infra : bridge 네트워크 설정, 컨테이너들 간 통신 허용
- volume 설정
- 각 볼륨을 host 머신의 지정된 디렉토리에 바인딩
MongoDB
version: '3'
services:
...
mongodb:
image: mongo:latest
container_name: mongodb
ports:
- "27017:27017"
restart: always
networks:
- infra
environment:
- MONGO_INITDB_ROOT_USERNAME=${DB_USER}
- MONGO_INITDB_ROOT_PASSWORD=${DB_PASSWORD}
volumes:
- ./docker_volumes/mongodb:/data/db
- ./initMongoDB.js:/docker-entrypoint-initdb.d/init.js
networks:
infra:
external: true
volumes:
...
mongodb:
driver: local
driver_opts:
type: none
device: $PWD/docker_volumes/mariadb
o: bind
Redis
version: '3'
services:
...
redis:
image: redis
container_name: redis-app
ports:
- "6379:6379"
networks:
- infra
volumes:
- ./docker_volumes/redis:/data
- ./redis.conf:/etc/redis/redis.conf
restart: always
env_file:
- .env
networks:
infra:
external: true
- redis.conf
- redis 설정파일
- 최대 사용 메모리 용량 2GB로 설정
# 연결 가능한 네트위크(0.0.0.0 = Anywhere)
bind 0.0.0.0
# 연결 포트
port 6379
# Master 노드의 기본 사용자 비밀번호
requirepass ssafya303
# 최대 사용 메모리 용량(지정하지 않으면 시스템 전체 용량)
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 관련 설정 ==
# 저장할 RDB 파일명
dbfilename backup.rdb
# 15분 안에 최소 1개 이상의 key가 변경 되었을 때
save 900 1
# 5분 안에 최소 10개 이상의 key가 변경 되었을 때
save 300 10
# 60초 안에 최소 10000개 이상의 key가 변경 되었을 때
save 60 10000
# RDB 저장 실패 시 write 명령 차단 여부
stop-writes-on-bgsave-error no
# == AOF 관련 설정 ==
# AOF 사용 여부
appendonly yes
# 저장할 AOF 파일명
appendfilename appendonly.aof
# 디스크와 동기화 처리 방식
# - always : AOF 값을 추가할 때마다 fsync를 호출해서 디스크에 쓰기
# - everysec : 매초마다 fsync를 호출해서 디스크에 쓰기
# - no : OS가 실제 sync를 할 때까지 따로 설정하지 않음
appendfsync everysec
- Redis의 AOF(Append Only File)
- Redis의 지속성 옵션 중 하나
- AOF를 활성화하면 Redis는 모든 쓰기 작업(명령)을 파일에 순차적으로 기록
- 서버가 다시 시작될 때 또는 RDB 파일로 스냅샷을 가져오는 동안 사용