Docker Compose로 MongoDB 세팅하기: 내 경험담을 곁들인 아주 쉬운 이야기
Docker로 MongoDB 돌려보려고 했는데, 명령어도 낯설고 뭔가 복잡해서 머리가 띵했던 적, 있지 않으세요? 저도 처음에 완전 그랬거든요. 뭔가 시도는 해봤는데... 컨테이너는 제대로 돌아가는 건지, 설정은 맞게 했는지 알 수가 없어서 한숨만 나오더라고요. 그래서 이 글에선 제가 직접 써보고 이해한 내용을 기반으로, Docker Compose로 MongoDB를 손쉽게 세팅하는 방법을 하나하나 얘기해볼게요. 최대한 쉽게, 실수 없이, 감정 담아서요!

왜 docker run보다 Docker Compose가 편할까?
처음엔 그냥 docker run으로 MongoDB 띄워봤죠. 처음에는 그럭저럭 괜찮아요. 근데 서비스가 하나 둘 늘어나니까, 이건 뭐 설정이 정신 없고, 뭔가 건드릴 때마다 다 뜯어고쳐야 하더라고요. Docker Compose는 그냥 한 장의 파일에 모든 게 다 담겨 있어서 진짜 깔끔하고 좋아요. "아, 이게 진짜 개발자 도구구나..." 싶었어요.
MongoDB를 Docker로 실행하면 이런 식이에요
docker run -d --rm --network goals-net -v data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=max \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
mongo
이건 딱 봐도 뭔가 많죠? 이게 다:
- MongoDB를 백그라운드로 실행하고
- 꺼지면 자동으로 컨테이너 지우고
- goals-net이라는 네트워크에 붙이고
- 볼륨을 만들어서 데이터 유지하고
- 사용자 이름, 비밀번호까지 설정하는 거예요
자, 이제 이걸 좀 더 사람답게(?) 관리할 수 있는 Compose 파일로 옮겨볼 거예요.

docker-compose.yaml? 사실 되게 간단해요
1. MongoDB 이미지 지정하기
services:
mongodb:
image: 'mongo'
딱 봐도 심플하죠? 그냥 이 MongoDB 이미지를 쓰겠다는 뜻이에요.
🤓 혹시 나중에 직접 만든 이미지나 다른 Registry에서 가져올 게 있으면 그 경로만 바꿔주면 돼요.
2. 데이터 저장소 연결하기
volumes:
- data:/data/db
이건 진짜 필수예요. 안 그러면 MongoDB 데이터가 컨테이너 사라질 때마다 날아가요. 예전에 이거 안 해놨다가 날려먹고 좌절했던 적 있어요. 다시는 그런 일 없도록!
3. 환경변수로 접속 정보 넣기
environment:
MONGO_INITDB_ROOT_USERNAME: max
MONGO_INITDB_ROOT_PASSWORD: secret
혹은 이렇게 써도 되고요:
environment:
- MONGO_INITDB_ROOT_USERNAME=max
- MONGO_INITDB_ROOT_PASSWORD=secret
저는 첫 번째 방식이 눈에 더 잘 들어오더라고요. 익숙한 거 쓰시면 돼요.
4. 환경변수 파일로 따로 관리하기 (찝찝할 땐 이걸로!)
비밀번호를 .yaml에 그냥 쓰는 거 좀 꺼림칙할 수 있어요. 그럴 땐 .env 파일 만들어서 분리하면 깔끔하고 안전해요.
mongo.env
MONGO_INITDB_ROOT_USERNAME=max
MONGO_INITDB_ROOT_PASSWORD=secret
그리고 YAML에선 이렇게:
env_file:
- ./env/mongo.env
5. 네트워크는... 굳이 설정 안 해도 돼요
Compose는 기본적으로 모든 서비스들을 같은 네트워크에 자동으로 넣어줘요. 아무 설정 안 해도 이름만으로 서로 통신이 돼요. 이거 몰랐을 땐 막 network 설정 따로 해줘야 하는 줄 알고 엄청 고생했거든요. 😅
하지만 특정 네트워크에 꼭 넣고 싶을 땐 이렇게 하면 돼요:
networks:
- goals-net
networks:
goals-net:
external: true
이미 만들어진 네트워크에 붙이고 싶은 경우에 유용해요.
6. 볼륨 선언 꼭 해주세요!
volumes:
data:
이거 없으면 Docker가 "data"라는 이름의 볼륨을 만들지 않아요. 그래서 MongoDB 데이터 저장 안 됩니다. 예전엔 이거 빼먹고 왜 안 되지 하면서 몇 시간 날린 기억이 나네요.
전체 설정 정리해서 보여드릴게요!
version: '3.8'
services:
mongodb:
image: 'mongo'
volumes:
- data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: max
MONGO_INITDB_ROOT_PASSWORD: secret
# env_file:
# - ./env/mongo.env
# networks:
# - goals-net
volumes:
data:
# networks:
# goals-net:
# external: true
이제 실행해볼까요?
MongoDB 실행:
docker-compose up -d
끄고 정리하려면:
docker-compose down
진짜 이 두 줄이면 끝이에요. 깔끔하죠?

왜 이 구성이 진짜 좋은지 말해볼게요
처음엔 Docker가 진입장벽 높아 보였는데, Compose를 알고 나니까 “어? 이거 생각보다 괜찮네?” 싶더라고요. 뭔가 제대로 된 환경을 하나의 파일로 딱 정리해놓고, 필요할 때 한 번에 실행할 수 있다는 게 진짜 매력 있어요.
혼자 공부할 때도 좋고, 동료랑 같이 프로젝트할 때도 훨씬 편해요. 나중에 배포할 때도 요긴하고요. 특히 같은 환경을 계속 반복해서 만들 수 있다는 건 너무 큰 장점이에요.
마지막으로! 실수 방지 꿀팁 ✨
다른 사람한테 이 Compose 파일 공유할 일이 있을 땐, .env 파일은 .gitignore에 꼭 넣어두세요. 비밀번호 같은 민감한 정보는 Git에 올라가면 안 되잖아요. 저도 한 번 깜빡하고 올렸다가 부랴부랴 지운 적 있어요...
'SW > Kubernetes, Docker' 카테고리의 다른 글
| Docker Compose로 풀스택 개발환경 한 번에 세팅하는 방법 (React + Node.js + MongoDB) (0) | 2025.09.20 |
|---|---|
| 리눅스에서 Docker Compose 설치하고 사용하는 법 (실전 후기 포함) (0) | 2025.09.19 |
| Docker 로드맵 2025: 초보자부터 실무까지 한 번에 끝내는 가이드 (1) | 2025.09.17 |
| Docker Compose 쉽게 시작하기: 백엔드, 프론트엔드, DB 한 번에 띄우는 방법 (0) | 2025.09.17 |
| 여러 Docker 컨테이너를 한 번에 실행하는 가장 쉬운 방법 (Docker Compose 꿀팁) (0) | 2025.09.16 |