Docker MongoDB 컨테이너 배포 및 관리하기

MongoDB는 성능이 우수하고 큰 유연성을 제공하는 인기 있는 오픈 소스 문서 데이터베이스입니다. 하지만 여러분은 프로젝트용으로 MongoDB 데이터베이스를 컨테이너화해 보았습니까? 아직이라면, 이 튜토리얼을 통해 새로운 경험을 할 것입니다!

이 튜토리얼에서는 Docker를 사용하여 MongoDB를 효과적으로 배포, 보안 및 관리하는 방법을 배우게 됩니다. 그러니 계속해서 Docker MongoDB 컨테이너를 배포하는 자신의 주인이 되어보세요!

필수 준비물

이 튜토리얼에는 실습이 포함되어 있습니다. 따라오려면 다음이 필요합니다:

  • Ubuntu 머신 – 이 튜토리얼은 Ubuntu 20.04 LTS를 사용합니다.
  • A user with sudo permission
  • Docker – 이 튜토리얼은 Docker 20.10.9를 사용합니다.

Docker MongoDB 이미지 다운로드

독립적으로 Docker MongoDB 컨테이너를 배포하고 관리하기 전에, 먼저 Docker Hub에서 MongoDB 이미지를 다운로드해야 합니다.

아래의 docker 명령어를 실행하여 MongoDB Community Edition(CE) 이미지(pull mongo)를 다운로드하세요. 이 이미지는 Docker Hub에서 호스팅되고 있습니다. 작성 시점에서 이미지의 최신 버전은 4.2입니다.

sudo docker pull mongo

아래에서 확인할 수 있듯이 명령은 이미지의 최신 버전을 자동으로 가져와서 latest로 태그합니다.

Pulling mongo image

이제 아래의 docker images 명령어를 실행하여 서버에 있는 모든 이미지를 나열하세요.

sudo docker images

아래에서 MongoDB 이미지가 latest로 태그되어 있는 것을 확인할 수 있습니다.

Listing all Docker images

Docker MongoDB 컨테이너 배포

다운로드한 MongoDB 이미지로 MongoDB 컨테이너를 배포할 수 있습니다. MongoDB 컨테이너를 mongo 실행 파일로 초기화하고 데이터 디렉터리를 생성합니다. 그런 다음 Docker 컨테이너의 데이터 영역과 호스트 머신 간의 매핑을 정의합니다.

1. 아래의 mkdir 명령어를 실행하여 MongoDB 데이터베이스와 로그를 저장할 mongodata라는 데이터 디렉터리를 생성하세요.

sudo mkdir -p /mongodata

2. 그 다음, 아래의 docker run 명령어를 실행하여 이름이 mymongo인 컨테이너를 생성하세요. 또한 컨테이너는 인터랙티브 의사-TTY(-it)로 시작되어 컨테이너를 시작할 때 출력이 표시됩니다.

마침내 생성된 디렉터리 mongodata은 내부 디렉터리 /data/db에 바인딩되어 있습니다. -v 옵션을 사용하여 이 디렉터리를 연결했습니다. -d 옵션을 사용하면 컨테이너가 백그라운드 모드로 실행되어 백그라운드 프로세스로 동작하며 생성 시 콘솔 출력을 반환합니다.

시스템은 컨테이너를 실행할 때 변경 사항의 데이터를 저장하기 위해 자동으로 /data/db 디렉터리를 생성합니다. 이 디렉터리는 읽기 전용 모드로 실행되어 호스트 시스템에 지속적인 데이터 저장이 가능합니다.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

명령이 성공적으로 완료되면 다음과 같은 출력이 표시됩니다.

Deploying MongoDB Container

3. 마지막으로 아래의 docker ps 명령을 실행하여 컨테이너 ID를 식별하고 상태를 확인합니다. docker ps 명령은 현재 실행 중인 컨테이너에 대한 모든 정보를 표시합니다.

docker ps 명령은 리눅스의 일반적인 ps 명령과 유사합니다.

sudo docker ps

아래 표시된 출력에서 Ports 섹션에서 컨테이너에 할당된 모든 포트가 들어오는 연결을 수신하는 것을 볼 수 있습니다.

이 예제에서, 포트 27017은 호스트에 매핑됩니다. 아래 출력은 호스트에서 localhost:27017을 통해 이 컨테이너의 MongoDB 인스턴스에 액세스할 수 있다는 것을 나타냅니다.

Checking Docker MongoDB Container Status

어떤 문제가 발생했을 때 mongo 데이터베이스/인스턴스에서 무엇이 잘못되었는지 확인하기 위해 mymongo 컨테이너의 로그 파일을 보고 싶을 수도 있습니다. 그렇다면 다음과 같이 docker logs 명령을 실행하면 됩니다: sudo docker logs docker-container. docker-container은 Docker 컨테이너 이름으로 바꿔주세요.

Reading Docker Container Log File

Docker MongoDB 컨테이너를 Bash 쉘에 연결하기

방금 Docker MongoDB 컨테이너를 배포했지만, 어떻게 관리할까요? 먼저 docker exec 명령을 사용하여 Docker 컨테이너를 Bash 쉘에 연결하세요.

컨테이너를 Bash 쉘에 연결하는 것은 중요합니다. 왜냐하면 컨테이너는 현재 분리된 모드에서 실행되고 있기 때문입니다 (백그라운드에서 실행됨). 그리고 컨테이너가 백그라운드에서 실행되면 입력을 받지도 출력을 표시하지도 않습니다.

컨테이너를 Bash 쉘에 연결하려면 아래의 docker exec 명령을 실행하세요. (mymongo)

sudo docker exec -it mymongo bash

명령이 완료되면, 프롬프트는 다음과 같이 변경됩니다. 고유한 알파벳-숫자 혼합번호 (77782fa95314)는 컨테이너 ID입니다.

컨테이너 ID는 명명 충돌을 피하고 호스트 간에 컨테이너를 효과적으로 식별하는 데 중요합니다. 따라서 이를 변경하지 않도록 노력하십시오.

Attaching Docker MongoDB Container to Bash Shell

이제 아무 인수 없이 mongo 명령을 실행하여 컨테이너(mymongo) 내의 MongoDB 쉘에 로그인합니다. MongoDB 쉘은 mongo 쿼리/명령을 실행하는 곳입니다.

컨테이너에 들어가면 더 이상 sudo 접두사없이 명령을 실행할 수 있습니다. 이제 컨테이너 내에서는 호스트 시스템에 영향을 미치지 않습니다.

mongo

아래에 표시된 프롬프트를 확인하여 현재 MongoDB 쉘에있음을 알 수 있습니다.

Logging in to the MongoDB shell

MongoDB 쉘에서 사용 가능한 모든 명령을 보려면 아래에 표시된대로 help 명령을 실행하십시오.

Listing Available Commands in MongoDB Shell

관리 MongoDB 사용자 생성

MongoDB 서버를 Docker 컨테이너 내에 배포한 후 관리 MongoDB 사용자를 생성합니다. 관리 사용자를 사용하면 MongoDB 서버에 연결하고 데이터베이스를 관리할 수 있습니다.

1. 다시 MongoDB 쉘에 로그인하고 아래의 use 명령을 실행하여 먼저 admin 데이터베이스로 전환합니다. 이렇게하면 관리 사용자가 데이터베이스를 관리 할 수 있는 권한이 제공됩니다.

use admin
Switching to the Admin Database

아래 코드를 MongoDB 프롬프트에 복사하여 관리자 사용자를 만듭니다.

아래 코드는 db.createUser() 메소드를 사용하여 관리자 역할을 가진 사용자를 만듭니다. 아래의 사용자 이름(user)과 암호(pwd)는 하드코딩되어 있으며, 원하는대로 변경할 수 있습니다.

# 관리자 사용자 생성
db.createUser(
{
	# 관리자 사용자의 사용자 이름 설정
	user: "ata",
	# 관리자 사용자의 암호 설정
	pwd: "password123",
	# 관리자 사용자의 역할 설정
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

코드가 작동하면 MongoDB 프롬프트에서 아래와 같은 메시지를 받게 됩니다.

Creating an Administrative New User

3. MongoDB 셸을 종료하려면 아래의 quit() 쿼리를 실행하십시오.

quit()

4. 마지막으로, 생성한 관리자 사용자(ata)로 MongoDB 서버에 연결하여 관리자 사용자의 암호를 입력하십시오.

mongo -u ata -p --authenticationDatabase admin

성공적으로 서버에 연결하면 MongoDB 서버 버전이 출력됩니다.

Connecting to the MongoDB Server

어쩌면 관리자 사용자를 더 테스트하고 싶으실지도 모릅니다. 그렇다면 아래 명령을 실행하여 데이터베이스에 있는 모든 사용자를 표시하십시오.

use admin
show users

아래에서 만든 관리자 사용자가 목록에 표시됩니다.

Listing Users in Database

MongoDB 데이터베이스 생성

도커 MongoDB 컨테이너를 관리하는 것은 새로운 데이터베이스를 생성하지 않으면 완전하지 않습니다. MongoDB 셸을 통해 데이터를 저장할 새로운 MongoDB 데이터베이스를 생성하게 됩니다.

1. 도커 컨테이너 내의 대화형 세션에서 서버의 모든 데이터베이스를 나열하려면 아래 show dbs 명령을 실행하십시오.

show dbs

아래에서 관리자 데이터베이스, 구성 데이터베이스 및 로컬 데이터베이스를 볼 수 있습니다. MongoDB 셸은 모든 MongoDB 서버에 기본적으로 이러한 데이터베이스를 생성합니다.

Listing all MongoDB Databases

2. 다음으로 아래 use 명령을 실행하여 새로운 데이터베이스를 만듭니다. <database_name>을(를) 선택한 데이터베이스 이름으로 바꿉니다. 그러나 이 예제에서는 데이터베이스 이름을 linux으로 지정합니다.

use 쿼리는 지정한 데이터베이스로 현재 데이터베이스를 전환합니다. 존재하지 않는 경우 use 쿼리는 새 데이터베이스를 만들고 자동으로 전환합니다.

use <database_name>
Creating a new MongoDB Database

3. 이전 단계와 같이 show dbs 명령을 다시 실행하여 생성한 데이터베이스가 있는지 확인하십시오.

show dbs

아직 목록에 새로 생성된 데이터베이스(linux)를 보지 못하셨나요? MongoDB는 처음으로 데이터를 저장할 때만 데이터베이스를 생성합니다. 데이터는 컬렉션이나 문서 형식으로 있을 수 있습니다.

Listing all MongoDB Databases

4. 이제 아래의 코드를 복사하여 MongoDB 셸에 붙여넣고 Enter를 누르세요.

아래 코드는 linux_version이라는 새로운 컬렉션을 생성합니다. 이 이름은 원하는 대로 변경할 수 있습니다. 컬렉션은 키:값 쌍 형식의 데이터를 포함합니다.

# insertOne 메서드를 사용하여 데이터 삽입
db.linux_version.insertOne(
	# 데이터베이스에 삽입할 키:값 쌍
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

아래 출력에서 linux_version 컬렉션이 생성되고 ObjectID와 함께 나타납니다.

Showing collection with its ID

5. show collections 명령을 실행하여 컬렉션 목록을 확인하고 새 컬렉션 linux_version이 있는지 확인하세요.

show collections

아래에서 linux_version 컬렉션을 성공적으로 생성하였습니다.

Showing List of Collections

6. 마지막으로 아래 명령을 실행하여 linux_version 컬렉션에 삽입한 데이터를 확인하세요. pretty() 메서드를 사용하면 데이터를 인간이 읽을 수 있는 형식으로 볼 수 있습니다.

db.linux_version.find().pretty()

데이터베이스에서 데이터를 수정하는 경우 Update() 메서드를 사용하세요.

아래 출력에서 데이터가 훨씬 읽기 쉬운 형식으로 나타납니다.

Viewing Data from MongoDB Database

도커 MongoDB 컨테이너 다시 시작

이제 성공적으로 실행 중인 도커 MongoDB 컨테이너가 있습니다. 그러나 컨테이너를 더 이상 사용하지 않거나 작동하지 않는 경우 어떻게 할까요? 몇 가지 도커 명령을 사용하여 MongoDB 도커 컨테이너를 중지, 다시 시작 및 제거할 수 있습니다.

1. 아래 명령을 실행하여 실행 중인 모든 컨테이너를 나열하려면 docker ps 명령을 실행하세요.

sudo docker ps

중지, 다시 시작 또는 제거할 컨테이너의 이름과 컨테이너 ID를 아래와 같이 확인하세요.

Showing all running docker containers

2. 다음으로 실행 중인 MongoDB 컨테이너를 중지하려면 아래 중 하나의 docker stop 명령을 실행하세요.

sudo docker stop mymongo
sudo docker stop container-ID

3. 이전에 수행한대로 docker ps 명령을 다시 실행하여 컨테이너가 종료되었는지 확인하세요.

sudo docker ps

아래에서 볼 수 있듯이 컨테이너는 실행 중인 컨테이너 목록에 없으므로 컨테이너를 성공적으로 중지했습니다.

Listing all Containers

4. 이제 컨테이너를 다시 시작하려면 아래의 docker start 명령 중 하나를 실행하세요.

sudo docker start mymongo
sudo docker start container-ID

5. 마지막으로, 컨테이너가 실행 중인지 확인하려면 docker ps 명령을 다시 실행하세요.

sudo docker ps

아마도 더 이상 컨테이너를 사용하지 않을 것입니다. 그렇다면 먼저 컨테이너를 중지하고 rm 명령을 사용하여 컨테이너를 제거해야 합니다. 예시: sudo docker container rm mongodb. 이전 예시와 마찬가지로 mongodb를 컨테이너 이름 또는 컨테이너 ID로 대체하세요.

결론

이 튜토리얼에서는 관리자 사용자를 생성하여 데이터베이스를 만들고 데이터를 저장하는 Docker MongoDB 컨테이너를 배포하고 관리하는 방법을 배웠습니다. 더 이상 필요하지 않은 컨테이너를 중지, 다시 시작 및 제거하여 Docker 이미지를 유지 관리하는 방법을 깨달았습니다.

Docker를 사용하여 MongoDB를 배포하고 관리하는 것은 컨테이너화 기술을 활용하고 오버헤드를 줄이는 첫 번째 단계입니다. 이 첫 번째 단계를 사용하여 MongoDB를 더 자세히 살펴보고 Docker MongoDB 컨테이너가 프로젝트에 어떻게 도움이 될 수 있는지 확인해보는 것은 어떨까요?

Source:
https://adamtheautomator.com/docker-mongodb/