Docker Compose를 사용해서 MariaDB, MongoDB를 초기 셋팅하는 보일러 플레이트를 작성했다.

 

디렉토리 구조

디렉토리는 위와 같이 구성되어 있다.

 

mariadb/data : DB의 data와 mount 할 디렉토리

mariadb/conf.d : my.cnf 파일을 공유하는 디렉토리 (character-set, time-zone 설정)

 

mongodb/data : DB의 data와 mount 할 디렉토리

mongodb/initdb.d : docker-entrypoint-initdb.d와 공유하여 컨테이너 최초 실행 시 실행될 스크립트를 넣는 디렉토리

 

.env & Dockerfile

# .env
MARIADB_VERSION=10.11.2
MONGODB_VERSION=6.0.5

# DB/mariadb/Dockerfile
ARG MARIADB_VERSION
FROM mariadb:${MARIADB_VERSION}

# DB/mongodb/Dockerfile
ARG MONGODB_VERSION
FROM mongo:${MONGODB_VERSION}

.env 파일에서 각 DB Image 버전을 설정하고, DockerHub에서 설정한 버전의 image를 사용해 build 할 수 있도록 Dockerfile을 작성한다.

 

docker-compose.yml

version: '3.9'
 
services:
  mariadb:
    container_name: yourbot-mariadb
    build:
      context: mariadb/
      args:
        MARIADB_VERSION: ${MARIADB_VERSION}
    volumes:
      - ./mariadb/conf.d:/etc/mysql/conf.d
      - ./mariadb/data:/var/lib/mysql
    environment:
      MARIADB_ROOT_PASSWORD: {password}
      MARIADB_USER: yourbot
      MARIADB_PASSWORD: {password}
      MARIADB_DATABASE: yourbot
    restart: always
    networks:
      - yourbot
    ports:
      - 3306:3306
 
  mongodb:
    container_name: yourbot-mongodb
    build:
      context: mongodb/
      args:
        MONGODB_VERSION: ${MONGODB_VERSION}
    volumes:
      - ./mongodb/data:/data/db
      - ./mongodb/initdb.d:/docker-entrypoint-initdb.d
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: {password}
      MONGO_INITDB_DATABASE: yourbot
    restart: always
    networks:
      - yourbot
    ports:
      - 27017:27017
 
networks:
  yourbot:
    driver: bridge

docker-compose.yml를 up하여 컨테이너가 실행되는 것을 확인하자.

 

주의사항

MongoDB의 경우 Collection이 1개도 존재하지 않으면 show dbs 명령 시에도 보이지 않기 때문에 당황하지 말자.

MariaDB는 컨테이너에서 mariadb-secure-installation 명령어를 입력하여 해당 설정을 진행하자.

  • 익명 사용자 제거
  • root 계정 원격 접속 여부 N
  • TEST DB 삭제

 

'Docker' 카테고리의 다른 글

[Docker] docker compose boilerplate  (0) 2024.04.21
[Docker] Docker Compose V2  (0) 2024.04.21
[Docker] 도커를 사용해서 로컬에 mysql, redis 구성  (0) 2023.11.11