본문 바로가기
개발 이야기/NoSQL

MongoDB, docker-compose로 띄워보기

by 농개 2024. 2. 14.

1. MongoDB란?

MongoDB는 유연한 JSON 형식으로 데이터를 저장하는 인기 있는 NoSQL 데이터베이스입니다.

Document Base 데이터베이스로, 데이터를 Table과 Row가 아닌 Document로 저장합니다.

MongoDB는 유연한 스키마, 확장성, 고가용성, 쿼리, Indexing 등으로 다양한 웹서비스에서 사용됩니다.

 

대부분의 프로덕션 환경에서는 MongoDB 인프라는 클러스터링 되어 구성됩니다.

클라우드를 사용한다면 AWS DocumentDB를 선택할 수 있습니다.

이는 MongoDB와 완전 호환됩니다.

 

이번 포스팅에서는

MongoDBdocker-compose로 띄우고, 계정 생성까지 해보겠습니다.

 

 

2. docker-compose.yml 작성

아래와 같이 docker-compose.yml을 작성해봅니다.

version: '3.7'
services:
  mongodb:
    image: mongo:latest
    container_name: mongodb_boot
    restart: always
    ports:
      - 27017:27017
    volumes:
      - /home/ubun2/mongodb/data:/data
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root
  • image에는 mongo:{version}을 기입. 여기서는 latest(최신버전)으로 함.
  • mongodb 기본 포트는 27017.
  • volumes 설정.
  • username/password 설정.

 

 

3. 백그라운드에서 실행

아래 명령어로 실행시켜봅시다.

> docker-compose -f .\docker-compose.yml up -d

[+] Running 9/9
 ✔ mongodb 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                                                                                                                                             41.5s
   ✔ 57c139bbda7e Pull complete                                                                                                                                                                                                                      1.8s
   ✔ 2a7c884ecb1c Pull complete                                                                                                                                                                                                                      0.7s
   ✔ ddcbc3e219f6 Pull complete                                                                                                                                                                                                                      0.7s
   ✔ 347abad2978b Pull complete                                                                                                                                                                                                                      3.3s
   ✔ 33ad7d6a71b8 Pull complete                                                                                                                                                                                                                      1.4s
   ✔ 46b764746687 Pull complete                                                                                                                                                                                                                      2.0s
   ✔ 0d22e1cb5ef2 Pull complete                                                                                                                                                                                                                     36.0s
   ✔ fef1dc21c099 Pull complete                                                                                                                                                                                                                      2.7s
[+] Running 1/2
 - Network mongodb_default  Created

 

docker image가 없다면 pull하고 running 상태가 되는 것을 확인 할 수 있습니다.

 

 

4. mongosh로 쉘 접속

> docker exec -it mongodb_boot /bin/bash

 

위 명령어를 통해 docker container에 접근 할 수 있습니다.

이후 아래와 같이 mongosh 커맨드로 mongodb에 접속할 수 있습니다.

root@b92a8b8b82:/# mongosh
Current Mongosh Log ID: 65ccc4f9eb2e2e5123db2dbf
Using Mongosh:          2.1.3

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

test>

 

default는 test라는 데이터베이스로 접속하게 되네요.

 

5. 인증(Authentication)

앞서 docker-compose.ymlusername/password를 기입했었습니다.

기본적으로 인증을 통해 mongodb에서 명령을 수행할 수 있습니다.

이 때, 아래와 같이 인증이 가능합니다.

test> use admin
switched to db admin
admin> db.auth('root','root')
{ ok: 1 }
admin> show users
[
  {
    _id: 'admin.root',
    userId: UUID('201c04b6-8282-4963-9724-d2cae1eff7f7'),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]
admin>

 

  • use {데이터베이스명} 을 통해 데이터베이스를 admin으로 전환.
  • db.auth({유저명}, {패스워드}) 명령어로 인증.

 

6. 계정 생성(Create User)

계정 생성은 db.createUser()로 가능합니다.

admin> db.createUser({"user":"new-user","pwd":"1234","roles":[{"role":"readWrite","db":"test"}]})
{ ok: 1 }
  • user: 유저명
  • pwd: 패스워드
  • roles: 권한
    • role: 읽기/쓰기는 "readWrite", 읽기만 설정하려면 "read".
    • db: 데이터베이스명