Docker + MongoDB

docker

Docker로 MongoDB를 다운받아보자. 일단 Docker가 설치 되어 있어야 한다.
* Docker 설치와 명령어에 대한 내용은 이 포스트를 참고합시다.

1. MongoDB 설치

Docker에서 무언가를 설치할 때 Docker-hub에서 검색해보면 편리하다. Docker-hub에서 설치하고 싶은 Container를 검색하여 찾아볼 수 있다.

MongoDB를 검색 하고, 제일 최상단에 있는 결과를 클릭하여 들어가면 해당 container와 관련된 명령어를 확인할 수 있다.

어쨌든, 다음 명령어로 설치+실행할 수 있다.

docker run \
     --name some-mongo \
     -p 27017:27017
     -e MONGO_INITDB_ROOT_USERNAME=root \
     -e MONGO_INITDB_ROOT_PASSWORD=mongodb \
     -d mongo

* docker run command를 실행시 container image가 존재하지 않으면, 일단 image를 pull하고, 작성한 옵션을 토대로 start를 해준다.

2. docker-compose

위와 같은 방식으로 단일 컨테이너를 실행할 수도 있지만 docker-compose를 통하여 작성할 수도 있다.

docker-compose.yml

docker-compose에 대해 간단하게 설명하자면, docker run command를 미리 정의해 놓는 것이라고 할 수 있다.

version: "3.2"      # version 정보를 작성합니다.

services:           # service 목록을 정의합니다.
  mongodb:          # service의 이름입니다.
    image: mongo    # 해당 service에서 사용할 image입니다.
    restart: always # container를 실행할 때 항상 이미 수행중이라면 재시작을 수행합니다.
    environment:    # 환경변수를 정의합니다.
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: P@ssw0rd
    volumes:        # container -> local로 mount할 수 있습니다.
      - type: bind 
        source: ./data/db # local 경로
        target: /data/db  # container 내부에서의 경로
    container_name: "mongodb" # container의 name을 정의합니다.
    ports:                # service port를 정의합니다.
      - "27017:27017"     # local:container

위와 같이 docker-compose.yml을 작성한 다음, docker-compose up -d 명령을 통하여 실행할 수 있다.

docker-compose ps -d

정상적으로 실행되었다면, 위와 같이 될 것이다. 그 다음 docker ps 명령을 통하여 정상적으로 실행 되었는지 확인할 수 있다.

docker mongo ps

이렇게 docker-compose.yml에 작성한 명령을 토대로 mongo image에서 mongodb 라는 container 가 생성되었음을 알 수 있다.

3. mongo db 접속

docker exec -it mongodb bash 이 명령을 통하여 container 내부로 접속할 수 있다.
* 여기서 mongodb는 container의 name을 의미한다.

mongo container bash 접속

그리고 > mongo 명령을 사용하면, mongo client를 사용할 수 있다.

mongo client

이렇게 docker를 이용하면 굉장히 편리하게 개발 환경을 독립된 환경으로 구성할 수 있다.

그리고 > mongo 로 접속하면 아무 권한이 없는 상태다 그래서 다음과 옵션을 추가해줘야한다.

> mongo -u "root" -p
> Enter password:

여기서 root는 환경변수에서 설정한 id이며, 비밀번호 또한 환경변수에서 설정한 비밀번호(P@ssw0rd)를 입력해주면 된다.

etc

구글링을 해보면 Version을 3이나 3.1로 하는 경우도 있었는데, 내 컴퓨터 환경에서는 3 혹은 3.1로 했을 때 volume과 관련하여 오류가 발생했다.

그래서 stackoverflow에서 관련 내용을 찾아봤고, 3.2 version에 volumes option을 살짝 변경해야 한다는걸 알았다.
관련 링크 : https://stackoverflow.com/questions/43628804/invalid-type-in-docker-compose-volume

reference