[Docker] DB 구축

ss0510s·2024년 5월 23일
0

Infra

목록 보기
5/6

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 파일로 스냅샷을 가져오는 동안 사용
profile
개발자가 되기 위해 성장하는 중입니다.

0개의 댓글