[AWS] EC2에 Docker 이용해서 mongoDB 설치하기

2024. 5. 31. 16:09· AWS
목차
  1. ✅ EC2에서 Docker 설치
  2. ✅ EC2에서 mongoDB 이미지 다운
  3. ✅ mongoDB 컨테이너 실행
  4. mongoDB 공식 이미지를 받았을 때
  5. 비밀번호가 설정된 커스텀 이미지를 받았을 때
  6. ✅  mongoDB 접속
  7. Docker container 접속하기
  8. mongoDB 접속하기
  9. ✅ 계정 확인 및 설정
728x90

이 글은 공부를 하면서 알게 된 내용들을 기록하는 글 입니다. 오류나 고쳐야 할 사항들이 있다면 지적 부탁드립니다!

 

 

GitGet 서비스에서는 RDBMS인 MariaDB와 NoSQL인 mongoDB 총 두 개의 데이터베이스를 사용한다.

AWS EC2에 서비스를 올려서 운영해보기로 했는데, 우리는 Docker container로 데이터베이스를 띄워서 이를 사용하기로 했다.

 

이전 포스팅에서 mariaDB를 설치하고 계정 설정까지 진행해보았는데, 이 링크에서 확인할 수 있다. :)

 

🖥️ 개발 환경
EC2 인스턴스는 t2.micro를 사용하고 있으며, OS는 Ubuntu를 사용하고 있습니다.
Linux 기반의 명령어이기 때문에 OS에 따라 명령어가 조금씩 다를 수 있습니다 :)

 

✅ EC2에서 Docker 설치

1. Linux 기준 Docker 설치하는 명령어 실행

EC2에는 기본적으로 Docker가 설치되어 있지 않기 때문에 명령어를 통해 Docker를 설치하자.

우선 sudo apt update를 통해 업데이트를 먼저 해주고, 그 다음 설치 명령어를 통해 설치하도록 하자.

 

이전에 update를 한 차례 했으면 다시 하지 않아도 되며,

sudo는 일반 사용자가 root 사용자의 권한을 잠시 빌려서 사용할 때 쓰는 명령어이다.

$ sudo apt update
$ sudo apt install docker.io

 

설치가 완료되었으면 밑의 명령어를 통해 Docker의 버전을 확인할 수 있으며, 버전이 잘 뜬다면 설치가 잘 된 것이다.

$ docker --version
Docker version 24.0.7, build 24.0.7-0ubuntu4

 


✅ EC2에서 mongoDB 이미지 다운

EC2 인스턴스에 Docker를 깔았으니, 이제 우리가 사용할 mongoDB의 이미지를 다운받아야 한다.

밑의 링크는 mongoDB 공식 이미지들이 모아져 있는 링크이다. 

https://hub.docker.com/_/mongo/tags

 

mongo Tags | Docker Hub

docker pull mongo:8.0.0-rc6-windowsservercore-ltsc2022

hub.docker.com

 

위의 링크로 들어가면 밑과 같이 다양한 태그들이 있는데,

심플하게 제일 위에 있는 docker pull mongo 부분을 복사해서 사용해도 되고, 원하는 버전이 있는 경우에는 태그 리스트들 중 원하는 이미지를 사용하면 된다.

docker pull mongo를 사용하면 자동으로 latest 버전을 다운받게 된다.

 

우리 팀은 혹시나 나중에 EC2 세팅을 다시 하는 일이 발생할까 싶어 mongo 이미지를 받아서 root 계정 설정까지 끝낸 후, 팀 Docker 계정에 Docker image로 올려놓았다.

+ 기존의 image를 바탕으로 옵션을 커스텀하여 해당 이미지를 나의 Docker repository에 올리는 방법에 대해서도 추후 포스팅하겠다 :)

 

밑의 명령어는 우리 팀에서 사용하는 이미지를 받는 명령어이기 때문에,

mongoDB 공식 이미지를 받고자 한다면 docker pull mongo를 입력하면 된다.

# mongo 이미지를 받는 명령어를 실행하면 됩니다.
# 공식 이미지를 받는 명령어: docker pull mongo
$ docker pull geniusgitget/mongo:1.0.0

1.0.0: Pulling from geniusgitget/mongo
01007420e9b0: Pull complete 
bc3bec6a423e: Pull complete 
c5db81b694a8: Pull complete 
427a1a117df0: Pull complete 
dfb180c9e7b5: Pull complete 
92e6f08e133c: Pull complete 
374f042f3159: Pull complete 
73549bb43006: Pull complete 
867682b1a960: Pull complete 
Digest: sha256:8a19f891a0511331a21c8e3b7b438d8aa232feca1f163900602169e5fc44dc27
Status: Downloaded newer image for geniusgitget/mongo:1.0.0
docker.io/geniusgitget/mongo:1.0.0

 

 

이후 Docker image 리스트를 확인하는 명령어를 입력했을 때, 밑과 같이 리스트로 뜬다면 제대로받은 것이다.

$ docker images
REPOSITORY             TAG       IMAGE ID       CREATED       SIZE
geniusgitget/mongo     1.0.0     17af2357023f   7 weeks ago   755MB
geniusgitget/mariadb   1.0.0     de70323777ee   7 weeks ago   404MB

 


✅ mongoDB 컨테이너 실행

Docker image를 받았다면, 이제 container를 생성할 차례이다.

간단하게 비유를 해보자면, image는 클래스로 container는 객체로 비유해볼 수 있을 것 같다. 

실질적으로 우리가 사용하는 것은 image가 아닌 container인 것이다.

 

docker run 명령어에 다양한 옵션을 넣어서 컨테이너를 생성할 수 있다.

 

자주 사용하는 옵션들을 몇 개 살펴보자.

  • --name {이름}
    컨테이너의 이름을 설정하는 옵션
  • -d, --detach
    보통 데몬 모드라고 부르며, 컨테이너를 백그라운드에서 실행시키는 옵션
  • -p <호스트 포트>:<컨테이너 포트> 
    포트포워딩 시 사용하는 옵션
  • -e, --env
    컨테이너 내에서 사용할 환경 변수를 설정하는 옵션. 보통 설정 값이나 비밀번호를 설정할 때 사용.
  • --restart
    재시작 정책을 설정하는 옵션. EC2 재시작 시 컨테이너 또한 자동으로 실행되도록 설정할 때 사용.

 

mongoDB 공식 이미지를 받았을 때

mongoDB 공식 이미지를 받았다면 비밀번호가 설정이 안되어 있기 때문에 비밀번호 설정을 같이 해주는 것이 편하다.

 

mariaDB에서와 같이 -e 옵션을 통해 root(슈퍼 어드민) 계정의 비밀번호를 설정할 수 있다.

MONGO_INITDB_ROOT_USERNAME에는 root를 MONGO_INITDB_ROOT_PASSWORD에는 사용하고자하는 비밀번호를 설정할 수 있다.

 

컨테이너 생성이 정상적으로 이루엊졌다면, 3770e3c329c4...와 같이 컨테이너 ID가 뜰 것이다.

docker run --name {컨테이너 이름} -p 27017:27017 -d -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD={비밀번호} mongo:latest

b7da5711fd61a2fed83e2bf8867fe9fcc1ded924167d4b5f077d50216b29f37a

 

 

비밀번호가 설정된 커스텀 이미지를 받았을 때

내가 커스텀하게 생성한 이미지는 root 계정 및 비밀번호 설정이 되어 있기 때문에, 비밀번호를 설정하는 옵션을 따로 적어주지 않다.

$ docker run --name gitget-mongo -d -p 27017:27017 geniusgitget/mongo:1.0.0
b7da5711fd61a2fed83e2bf8867fe9fcc1ded924167d4b5f077d50216b29f37a

 


✅  mongoDB 접속

그렇다면 데이터베이스에 접근하려면 어떻게 해야 할까?

Docker container로 돌아가고 있기 때문에,

1) 생성한 container로 진입

2) 해당 container 내부에서 mongoDB 접속

을 해야 한다.

 

Docker container 접속하기

docker exec는 container에 특정 명령을 실행할 때 사용하는 명령어이며,

커맨드라인을 통해 입출력을 주고 받는 경우 -it 옵션을 붙여주어야하며, bash 옵션을 통해 셸을 실행할 수 있다.

 

EC2 환경에서는 커맨드라인을 통해 입출력을 주고받기 때문에 -it과 bash 옵션을 모두 사용한다.

$ docker exec -it {컨테이너 이름} bash
ex) docker exec -it gitget-mongodb bash

 

container 접속에 성공했다면 밑과 같이 커맨드를 받는 부분이 달라진다.

 

 

 

mongoDB 접속하기

container 접속을 했으므로, 이제 mongoDB만 접속하면 된다.

 

mongoDB에 접속하기 위해서는

mongosh -u root -p를 적은 후 → Enter password:라는 글이 나오면 → -e MONGO_INITDB_ROOT_PASSWORD에 적었던 비밀번호를 입력하면 된다.

$ docker exec -it gitget-mongo bash
root@b7da5711fd61:/ mongosh -u root -p
Enter password: ****************
Current Mongosh Log ID: 665972b072ef77e2d4276134
Connecting to:          mongodb://<credentials>@127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.4
Using MongoDB:          7.0.5
Using Mongosh:          2.1.4

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


To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

------
   The server generated these startup warnings when booting
   2024-05-31T06:48:00.716+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
   2024-05-31T06:48:01.901+00:00: vm.max_map_count is too low
------

 


✅ 계정 확인 및 설정

test> show databases;
admin   100.00 KiB
config   12.00 KiB
local    72.00 KiB

# 계정 설정을 위해 admin 데이터베이스로 변경
test> use admin;
switched to db admin

# 특정 데이터베이스에만 권한을 가지고 있는 계정 생성
admin> db.createUser({ user: "gitget-admin", pwd: "{비밀번호}", roles: [{role: "readWrite", db: "GitGet"}] })
{ ok: 1 }

# 생성된 계정이 있나 확인
admin> show users;
[
  {
    _id: 'admin.gitget-admin',
    userId: UUID('a8b0b9a9-1666-473d-a955-4ed7fcef554d'),
    user: 'gitget-admin',
    db: 'admin',
    roles: [ { role: 'readWrite', db: 'GitGet' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  },
  {
    _id: 'admin.root',
    userId: UUID('ef9cd45b-127f-44d3-bf2e-c7f4a3b0edc7'),
    user: 'root',
    db: 'admin',
    roles: [ { role: 'root', db: 'admin' } ],
    mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
  }
]

 

 

 

728x90
  1. ✅ EC2에서 Docker 설치
  2. ✅ EC2에서 mongoDB 이미지 다운
  3. ✅ mongoDB 컨테이너 실행
  4. mongoDB 공식 이미지를 받았을 때
  5. 비밀번호가 설정된 커스텀 이미지를 받았을 때
  6. ✅  mongoDB 접속
  7. Docker container 접속하기
  8. mongoDB 접속하기
  9. ✅ 계정 확인 및 설정
'AWS' 카테고리의 다른 글
  • [AWS] vercel & AWS Route53 활용하여 도메인 연결하기
  • [AWS] AWS EC2 & CodeDeploy & S3 & Github Actions 배포 자동화
  • [AWS] EC2에 Docker 이용해서 mariadb 설치하기
  • [AWS] AWS 프리티어 EC2 Inatance 생성 & EIP(탄력적 IP) & swap memory 설정
HEY__
HEY__
안녕하세요 :) 공부하며 배운 것들을 기록하기 위한 블로그입니다. 도움이 되시길 바라며 혹시 잘못된 점이 있다면 댓글 부탁드립니다! :D
250x250
HEY__
while(true) { continue; }
HEY__
전체
오늘
어제
  • 분류 전체보기 (164)
    • Spring Boot (45)
      • 스프링 입문 강의 (18)
    • AWS (8)
    • 프로젝트 (6)
    • Network (21)
    • Operating System (8)
    • Database (4)
    • ETC (2)
    • Java (3)
    • C++ (7)
    • Python (1)
    • 도서 📚 (3)
      • Effective Java (3)
    • Coding test (50)
      • Baekjoon (30)
      • Leet Code (18)
      • Programmers (2)
    • Algorithm (C++) (5)

블로그 메뉴

  • 태그
  • Github
  • 글쓰기
  • 블로그관리

공지사항

인기 글

태그

  • leetcode
  • OS
  • kotlin
  • STL
  • Cloudfront
  • Spring
  • aws
  • dispatcher servlet
  • Network
  • CPP
  • slack
  • HTTP
  • coding test
  • C++
  • programmers
  • Servlet Container
  • Algorithm
  • Java
  • spring boot
  • Baekjoon

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
HEY__
[AWS] EC2에 Docker 이용해서 mongoDB 설치하기
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.