[Infra] Docker-Compose 를 통한 DB 구축

[Infra] Docker-Compose 를 통한 DB 구축

  • 환경 변수 파일: 보안이 필요한 user, password, database에 관한 정보를 저장
# .env
  DB_USER={user이름}
  DB_PASSWORD={password}
  DB_DATABASE={database이름}

MariaDB

  • docker-compose.yml
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

  • docker-compose.yml
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

  • docker-compose.yml
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 파일로 스냅샷을 가져오는 동안 사용

'Infra' 카테고리의 다른 글

[Infra] React Pipeline 구축  (0) 2024.05.25
[Infra] Nginx 설정  (0) 2024.05.25
[Infra] Docker 설치  (0) 2024.05.25
[Infra] Jenkins - GitLab 연동  (0) 2024.05.25
[Infra] Jenkins 설치  (0) 2024.05.25