Docker Compose MongoDB 구성 완벽 가이드! NoSQL Database Container 구축과 데이터 관리 방법 알아보기

MongoDB는 대표적인 NoSQL Database로, JSON 형태의 데이터를 저장하는 Document Database입니다.

관계형 Database인 MySQL, PostgreSQL과 달리 데이터를 Table과 Row 형태가 아닌 Document와 Collection 구조로 관리합니다.

기본 구조:

Application

↓

MongoDB

↓

Collection

↓

Document

MongoDB는 다음과 같은 서비스에서 많이 사용됩니다.

  • 실시간 데이터 처리
  • 사용자 프로필 관리
  • 로그 저장
  • IoT 데이터
  • 콘텐츠 서비스
  • 빠른 개발 환경

기존 MongoDB 설치 방식:

Linux Server

↓

MongoDB 설치

↓

설정 변경

↓

Database 생성

↓

사용자 관리

문제:

  • 서버 환경 차이 발생
  • 설정 반복 필요
  • 이전 작업 복잡
  • 백업 관리 어려움

Docker Compose 방식:

docker-compose.yml

↓

MongoDB Image

↓

MongoDB Container

↓

Volume 연결

↓

Database 실행

장점:

  • 동일한 환경 구축 가능
  • 빠른 서버 이전
  • 쉬운 백업
  • 개발과 운영 환경 통일

이번 글에서는 Docker Compose MongoDB Container 구성부터 환경 변수 설정, Volume 연결, Network 구성, Application 연동, Production 운영 방법까지 알아보겠습니다.

Docker Compose MongoDB 구조 이해하기

Docker Compose에서는 MongoDB를 하나의 Service로 정의합니다.

기본 구조:

services:

  mongodb:

    image: mongo:7

동작:

MongoDB Image

↓

MongoDB Container

↓

Database 실행

운영 환경에서는 다음 설정이 필요합니다.

필수 구성:

  • Root User
  • Password
  • Database Name
  • Volume
  • Network
  • Backup

Docker Compose MongoDB 기본 설정

docker-compose.yml:

services:

  mongodb:

    image: mongo:7

    environment:

      MONGO_INITDB_ROOT_USERNAME: admin

      MONGO_INITDB_ROOT_PASSWORD: password


    ports:

      - "27017:27017"


    volumes:

      - mongodb-data:/data/db


volumes:

  mongodb-data:

구조:

MongoDB Container

↓

mongodb-data Volume

↓

Database 저장

실행:

docker compose up -d

확인:

docker compose ps

결과:

mongodb

running

27017 port

Docker Compose MongoDB 환경 변수 설정

MongoDB Image는 초기 실행 시 Environment 값을 사용합니다.

MONGO_INITDB_ROOT_USERNAME

관리자 계정 생성

예:

MONGO_INITDB_ROOT_USERNAME: admin

MONGO_INITDB_ROOT_PASSWORD

관리자 비밀번호 설정

예:

MONGO_INITDB_ROOT_PASSWORD: password

MONGO_INITDB_DATABASE

초기 Database 생성

예:

MONGO_INITDB_DATABASE: app

Docker Compose MongoDB .env 파일 사용

운영 환경에서는 비밀번호를 분리하는 것이 좋습니다.

.env:

MONGO_USERNAME=admin

MONGO_PASSWORD=securepassword

MONGO_DATABASE=production

docker-compose.yml:

services:

  mongodb:

    image: mongo:7

    environment:

      MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME}

      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD}

      MONGO_INITDB_DATABASE: ${MONGO_DATABASE}

구조:

.env

↓

Docker Compose

↓

MongoDB Container

Docker Compose MongoDB Volume 연결

MongoDB 데이터는 반드시 Volume으로 관리하는 것을 권장합니다.

설정:

volumes:

  - mongodb-data:/data/db

의미:

MongoDB 데이터

↓

Volume 저장

↓

Container 삭제 후 유지

확인:

docker volume ls

결과:

mongodb-data

Docker Compose MongoDB 접속 방법

Container 접속:

docker compose exec mongodb bash

Mongo Shell 접속:

mongosh

인증 접속:

mongosh -u admin -p password

Database 확인:

show dbs

Collection 확인:

show collections

데이터 조회:

db.users.find()

Docker Compose Application과 MongoDB 연결

Application은 MongoDB Service 이름으로 접근합니다.

구조:

Application

↓

Docker Network

↓

MongoDB

환경 변수:

MONGO_HOST=mongodb

MONGO_PORT=27017

MONGO_DATABASE=app

MONGO_USER=admin

MONGO_PASSWORD=password

중요:

잘못된 설정:

MONGO_HOST=localhost

올바른 설정:

MONGO_HOST=mongodb

이유:

Container 내부 localhost는 자기 자신을 의미합니다.

Docker Compose MongoDB Network 구성

예:

services:

  app:

    image: my-app

    networks:

      - backend


  mongodb:

    image: mongo:7

    networks:

      - backend


networks:

  backend:

구조:

Application

↓

backend Network

↓

MongoDB

Docker Compose MongoDB Port 관리

MongoDB 기본 Port:

27017

개발 환경:

ports:

  - "27017:27017"

외부 접속:

Server:27017

Production 권장:

expose:

  - "27017"

구조:

Application

↓

MongoDB

외부 비공개

Docker Compose MongoDB 데이터 백업

MongoDB는 mongodump를 사용합니다.

백업:

docker compose exec mongodb \
mongodump \
-u admin \
-p password \
--out /backup

결과:

Database

↓

Backup File 생성

복원:

docker compose exec mongodb \
mongorestore \
-u admin \
-p password \
/backup

Docker Compose MongoDB Volume 백업

Volume 자체 백업도 가능합니다.

Volume 확인:

docker volume inspect mongodb-data

백업 구조:

MongoDB Volume

↓

압축 Backup

↓

외부 Storage

운영 환경에서는:

  • Database Backup
  • Volume Backup

두 가지를 함께 관리하는 것이 좋습니다.

Docker Compose MongoDB 업데이트 방법

Image 확인:

docker compose pull mongodb

재실행:

docker compose up -d

업데이트 과정:

Backup

↓

MongoDB Image Update

↓

Container 재생성

↓

데이터 확인

Docker Compose MongoDB 운영 설정

Production 추천:

services:

  mongodb:

    image: mongo:7

    restart: unless-stopped

    volumes:

      - mongodb-data:/data/db

관리:

  • Version 고정
  • Password 설정
  • Volume 사용
  • Backup 구성
  • Port 제한

권장:

mongo:7

비추천:

mongo:latest

Docker Compose MongoDB 장애 대응

MongoDB Container 실행 실패

확인:

docker compose logs mongodb

확인:

  • 환경 변수
  • Volume 권한
  • Storage 상태

Application 연결 실패

확인:

Host

Port

Username

Password

Network

데이터 확인

Volume 확인:

docker volume ls

Docker Compose MongoDB 운영 Best Practice

추천:

  • 인증 활성화
  • 외부 Port 제한
  • Volume 사용
  • Backup 자동화
  • Version 관리
  • Monitoring 구성

운영 구조:

Nginx

↓

Application

↓

MongoDB

↓

Volume

↓

Backup

자주 묻는 질문

MongoDB는 MySQL과 다른 Database인가요?

네.

MySQL은 관계형 Database이고 MongoDB는 Document 기반 NoSQL Database입니다.

MongoDB 데이터는 Container에 저장되나요?

권장하지 않습니다.

Volume을 연결하여 관리해야 합니다.

MongoDB Port를 공개해야 하나요?

Production에서는 Application Network 내부 연결을 권장합니다.

Docker Compose에서 MongoDB 운영이 가능한가요?

가능합니다.

개발 환경부터 서비스 운영 환경까지 사용할 수 있습니다.

마무리

Docker Compose MongoDB 구성은 NoSQL 기반 서비스를 빠르게 구축하기 위한 효과적인 방법입니다.

핵심 구조:

MongoDB Container

↓

Volume 데이터 저장

↓

Network 연결

↓

Application 연동

↓

Backup 관리

이 구조를 이해하면 Docker Compose 환경에서 MongoDB 기반 서비스를 안정적으로 운영할 수 있습니다.

다음 글에서는 Database 관리 편의성을 높여주는 Docker Compose Adminer 관리 도구 구성 방법을 알아보겠습니다.

댓글 남기기