본문 바로가기
DevOps/Docker

몽고디비(MongoDB) docker-compose 설치 및 데이터 CRUD 예제

by 맑은안개 2022. 1. 28.

docker-compose.yml

version: '3.8'
services:
  mongodb:
    image: mongo
    container_name: mongodb
    restart: always
    ports:
      - 27017:27017
    volumes:
      - ./mongodb:/data/db
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=1234 
      - MONGO_INITDB_DATABASE=mydb
  • MONGO_INITDB* 옵션을 지정하여 비밀번호, 데이터베이스를 초기화 한다.
  • restart - docker 엔진 실행시 자동으로 이미지를 실행한다.
  • volumes을 설정하여 데이터를 영속화한다.

docker-compose 실행

docker-compose up -d
  • mongo이미지가 없는 경우 dockerhub에서 다운로드를 진행한다.

mongodb 컨테이너 실행 확인

 docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                               NAMES
2a71c89dfbcd   mongo       "docker-entrypoint.s…"   20 seconds ago   Up 19 seconds   0.0.0.0:27017->27017/tcp            mongodb

컨테이너에 접속하여 mongo 실행 확인

 docker exec -it mongodb /bin/bash
root@2a71c89dfbcd:/# mongo -u root -p 1234
MongoDB shell version v5.0.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("5e3bdb9c-d27c-4b7e-8d0e-8786e1d9dee8") }
MongoDB server version: 5.0.5
  • 사용자/비밀번호를 명시하여 접속한다.

1. database 변경

> use mydb
switched to db mydb

2. Collection 생성

> db.createCollection('book')
{ "ok" : 1 }

3. 데이터 입력

> db.book.insertOne({name:"hello mongo", author:"choi"})
{
        "acknowledged" : true,
        "insertedId" : ObjectId("61e374229cbbcefe0d6d744b")
}
> db.book.insertMany([{name:"hello java", author:"kim"}, {name:"hello docker", author:"lee"}])
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("61e374779cbbcefe0d6d744c"),
                ObjectId("61e374779cbbcefe0d6d744d")
        ]
}

4. 데이터 조회

> db.book.find().pretty()
{
        "_id" : ObjectId("61e374229cbbcefe0d6d744b"),
        "name" : "hello mongo",
        "author" : "choi"
}
{
        "_id" : ObjectId("61e374779cbbcefe0d6d744c"),
        "name" : "hello java",
        "author" : "kim"
}
{
        "_id" : ObjectId("61e374779cbbcefe0d6d744d"),
        "name" : "hello docker",
        "author" : "lee"
}

5. 데이터 업데이트

> db.book.updateOne( { _id: ObjectId("61e374779cbbcefe0d6d744d") }, { $set: { author: "lee docker" } } )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }

업데이트 데이터 조회

> db.book.find({name:"hello docker"})
{ "_id" : ObjectId("61e374779cbbcefe0d6d744d"), "name" : "hello docker", "author" : "lee docker" }

6. 데이터 삭제

> db.book.deleteOne({name:"hello docker"})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.book.find()
{ "_id" : ObjectId("61e374229cbbcefe0d6d744b"), "name" : "hello mongo", "author" : "choi" }
{ "_id" : ObjectId("61e374779cbbcefe0d6d744c"), "name" : "hello java", "author" : "kim" }
반응형