MongoDB를 사용하여 컨테이너화된 Python 웹앱 로컬 빌드 및 실행

이 문서는 컨테이너화된 Python 웹앱을 컨테이너화하고 Azure 앱 Service에 배포하는 방법에 대한 자습서의 일부입니다. App Service를 사용하면 컨테이너화된 웹앱을 실행하고 Docker Hub, Azure Container Registry 및 Visual Studio Team Services를 사용하여 CI/CD(지속적인 통합/지속적인 배포) 기능을 통해 배포할 수 있습니다. 자습서의 이 부분에서는 컨테이너화된 Python 웹앱을 로컬로 빌드하고 실행하는 방법을 알아봅니다. 이 단계는 선택 사항이며 Azure에 샘플 앱을 배포하는 데 필요하지 않습니다.

개발 환경에서 Docker 이미지를 로컬로 실행하려면 Azure에 배포할 필요 이상으로 설정해야 합니다. 특히 샘플 앱을 넘어 고유한 웹앱을 만들기 시작할 때 향후 개발 주기를 더 쉽게 만들 수 있는 투자라고 생각합니다. DjangoFlask용 샘플 앱을 배포하려면 이 단계를 건너뛰고 이 자습서의 다음 단계로 이동하면 됩니다. Azure에 배포한 후 언제든지 반환하고 이러한 단계를 수행할 수 있습니다.

다음 서비스 다이어그램은 이 문서에서 다루는 구성 요소를 강조 표시합니다.

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1. 샘플 앱 복제 또는 다운로드

리포지토리를 복제합니다.

# Django
git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git

# Flask
git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git

그런 다음, 해당 폴더로 이동합니다.

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2. Docker 이미지 빌드

DjangoFlask에 사용할 수 있는 프레임워크 샘플 앱 중 하나를 사용하는 경우 이동하도록 설정됩니다. 사용자 고유의 샘플 앱으로 작업하는 경우 샘플 앱, 특히 루트 디렉터리의 Dockerfile 을 설정하는 방법을 살펴보세요.

이러한 지침에는 Visual Studio Code 및 Docker 확장필요합니다. 복제하거나 다운로드한 샘플 폴더로 이동하여 명령을 code .사용하여 VS Code를 엽니다.

참고 항목

이 섹션의 단계에서는 Docker 디먼을 실행해야 합니다. 예를 들어 Windows의 일부 설치에서는 계속하기 전에 디먼을 시작하는 Docker Desktop을 열어야 합니다.

지침 스크린샷
Docker 확장을 엽니다.

Docker 확장에서 "연결 실패" 오류를 보고하는 경우 Docker가 설치되어 실행 중인지 확인합니다. Docker를 처음 사용하는 경우 컨테이너, 이미지 또는 연결된 레지스트리가 없을 수 있습니다.
A screenshot showing how to open the Docker extension in Visual Studio Code.
이미지를 빌드합니다.
  • 프로젝트 파일을 보여 주는 프로젝트 탐색기에서 Dockerfile마우스 오른쪽 단추로 클릭하고 이미지 빌드를 선택합니다.

  • 또는 명령 팔레트(F1 또는 Ctrl+Shift+P)를 사용하고 "Docker 이미지: 이미지 빌드"를 입력하여 명령을 호출할 수 있습니다.

Dockerfile 구문에 대한 자세한 내용은 Dockerfile 참조를 참조하세요.
A screenshot showing how to build the Docker image in Visual Studio Code.
이미지가 빌드되었는지 확인합니다.
  • Docker 확장의 IMAGES 섹션으로 이동합니다.

  • 최근에 빌드된 이미지를 찾습니다. 컨테이너 이미지의 이름은 .vscode/tasks.json 파일에 설정된 "msdocspythoncontainerwebapp"입니다.

A screenshot showing how to confirm the built image in Visual Studio Code.

이 시점에서 이미지를 로컬로 빌드했습니다. 만든 이미지의 이름은 "msdocspythoncontainerwebapp"이고 태그는 "latest"입니다. 태그는 버전 정보, 의도된 사용, 안정성 또는 기타 정보를 정의하는 방법입니다. 자세한 내용은 컨테이너 이미지에 태그 지정 및 버전 관리를 위한 권장 사항 참조하세요.

VS Code에서 빌드되거나 Docker CLI를 직접 사용하여 빌드된 이미지는 Docker Desktop 애플리케이션에서도 볼 수 있습니다.

3. MongoDB 설정

이 자습서에서는 restaurants_reviews MongoDB 데이터베이스와 restaurants_reviews 컬렉션이 필요합니다. 이 섹션의 단계에서는 MongoDB 또는 MongoDB 용 Azure Cosmos DB의 로컬 설치를 사용하여 데이터베이스 및 컬렉션을 만들고 액세스하는 방법을 보여 줍니다.

Important

프로덕션 환경에서 사용할 MongoDB 데이터베이스를 사용하지 마세요. 이 자습서에서는 MongoDB 연결 문자열 환경 변수에 저장합니다. 이렇게 하면 컨테이너(예: 사용 docker inspect)를 검사할 수 있는 모든 사용자가 이를 관찰할 수 있습니다.

1단계: MongoDB가 아직 설치되지 않은 경우 설치합니다.

MongoDB 셸(mongosh)을 사용하여 MongoDB 설치를 검사 수 있습니다.

  • 다음 명령은 셸을 입력하고 시스템에 설치된 mongosh 및 mongoDB 서버의 버전을 제공합니다.

    mongosh
    
  • 다음 명령은 시스템에 설치된 MongoDB 서버의 버전만 제공합니다.

    mongosh --quiet --exec 'db.version()'
    

이러한 명령이 작동하지 않는 경우 mongosh를 명시적으로 설치하거나 MongoDB 서버에 mongosh를 연결해야 할 수 있습니다.

일부 설치의 대안은 Mongo 디먼을 직접 호출하는 것입니다.

mongod --version

2단계: mongod.cfg 파일을 편집하여 컴퓨터의 IP 주소를 추가합니다.

mongod 구성 파일에bindIp MongoDB가 클라이언트 연결을 수신 대기하는 호스트 이름 및 IP 주소를 정의하는 키가 있습니다. 로컬 개발 컴퓨터의 현재 IP를 추가합니다. Docker 컨테이너에서 로컬로 실행되는 샘플 앱은 이 주소를 사용하여 호스트 머신과 통신합니다.

예를 들어 구성 파일의 일부는 다음과 같습니다.

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

MongoDB를 다시 시작하여 구성 파일의 변경 내용을 선택합니다.

3단계: 로컬 MongoDB 데이터베이스에 데이터베이스 및 컬렉션을 만듭니다.

데이터베이스 이름을 "restaurants_reviews"로 설정하고 컬렉션 이름을 "restaurants_reviews"로 설정합니다. VS Code MongoDB 확장, MongoDB 셸(mongosh) 또는 다른 MondoDB 인식 도구를 사용하여 데이터베이스 및 컬렉션을 만들 수 있습니다.

MongoDB 셸의 경우 데이터베이스 및 컬렉션을 만드는 예제 명령은 다음과 같습니다.

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

이때 로컬 MongoDB 연결 문자열 "mongodb://127.0.0.1:27017/"이고, 데이터베이스 이름은 "restaurants_reviews"이고, 컬렉션 이름은 "restaurants_reviews"입니다.

4. 컨테이너에서 로컬로 이미지 실행

MongoDB에 연결하는 방법에 대한 정보를 통해 컨테이너를 로컬로 실행할 준비가 된 것입니다. 샘플 앱은 MongoDB 연결 정보가 환경 변수에 전달될 것으로 예상합니다. 환경 변수를 로컬로 컨테이너에 전달하는 방법에는 여러 가지가 있습니다. 각각에는 보안 측면에서 장점과 단점이 있습니다. 중요한 정보에 검사 컨테이너의 코드에 중요한 정보를 남기지 않아야 합니다.

참고 항목

Azure에 배포되면 웹앱은 App Service 구성 설정으로 설정된 환경 값에서 연결 정보를 가져오며 로컬 개발 환경 시나리오에 대한 수정 사항은 적용되지 않습니다.

지침 스크린샷
샘플 앱의 .vscode 폴더에서 settings.json 파일은 Docker 확장을 사용하고 태그의 상황에 맞는 메뉴에서 대화형 실행 또는 실행을 선택할 때 발생하는 작업을 정의합니다. settings.json 파일에는 각각 및 (MongoDB Azure) 시나리오에 대한 두 개의 템플릿이 (MongoDB local) 포함되어 있습니다.

로컬 MongoDB 데이터베이스를 사용하는 경우:
  • 두 인스턴스를 <YOUR_IP_ADDRESS> 모두 IP 주소로 대체합니다.

  • 두 인스턴스를 <CONNECTION_STRING> 모두 MongoDB 데이터베이스의 연결 문자열 바꿉니다.

Azure Cosmos DB for MongoDB 데이터베이스를 사용하는 경우:
  • 두 인스턴스를 <CONNECTION_STRING> 모두 Azure Cosmos DB for MongoDB 연결 문자열 바꿉니다.
템플릿에서 docker.dockerPath 사용하는 구성 설정을 지정합니다. 설정docker.dockerPath하려면 VS Code 명령 팔레트(Ctrl+Shift+P)를 열고 "기본 설정: 작업 영역 설정 열기"를 입력한 다음 검색 설정 상자에 "docker.dockerPath"를 입력합니다. 설정 값에 "docker"(따옴표 없음)를 입력합니다.

참고 항목

데이터베이스 이름과 컬렉션 이름은 모두 .로 restaurants_reviews간주됩니다.

A screenshot showing the settings.json file Visual Studio Code.
이미지를 실행합니다.
  • Docker 확장의 IMAGES 섹션에서 빌드된 이미지를 찾습니다.

  • 이미지를 확장하여 최신 태그를 찾고 마우스 오른쪽 단추를 클릭하고 대화형 실행을 선택합니다.

  • 시나리오에 적합한 작업인 "대화형 실행 구성(MongoDB 로컬)" 또는 "대화형 실행 구성(MongoDB Azure)"을 선택하라는 메시지가 표시됩니다.

대화형 실행을 사용하면 코드에 인쇄 문이 표시되며 디버깅에 유용할 수 있습니다. 비대화형이며 표준 입력을 열어 두지 않는 실행을 선택할 수도 있습니다.

Important

기본 터미널 프로필이 (Windows) 명령 프롬프트로 설정된 경우 이 단계가 실패합니다. 기본 프로필을 변경하려면 VS Code 명령 팔레트 (Ctrl+Shift+P)를 열고 "터미널: 기본 프로필 선택"을 입력한 다음 드롭다운 메뉴에서 다른 프로필(예 : Git Bash 또는 PowerShell)을 선택합니다.

A screenshot showing how to run a Docker container in Visual Studio Code.
컨테이너가 실행 중인지 확인합니다.
  • Docker 확장의 CONTAINERS 섹션에서 컨테이너를 찾습니다.

  • 개별 컨테이너 노드를 확장하고 "msdocspythoncontainerwebapp"이 실행 중인지 확인합니다. 실행 중인 경우 컨테이너 이름 옆에 녹색 삼각형 기호가 표시됩니다.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
컨테이너 이름을 마우스 오른쪽 단추로 클릭하고 브라우저에서 열기를 선택하여 웹앱을 테스트합니다.

브라우저가 기본 브라우저에 "http://127.0.0.1:8000" Django 또는 "http://127.0.0.1:5000/"의 경우 Flask의 경우
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
컨테이너를 중지합니다.
  • Docker 확장의 CONTAINERS 섹션에서 실행 중인 컨테이너를 찾습니다.

  • 컨테이너를 마우스 오른쪽 단추로 클릭하고 중지를 선택합니다.

A screenshot showing how to stop a running Docker container in Visual Studio Code.

실행 또는 디버그 구성을 선택하는 컨테이너를 실행할 수도 있습니다. tasks.jsonDocker 확장 작업은 실행하거나 디버그할 때 호출됩니다. 호출되는 작업은 선택한 시작 구성에 따라 달라집니다. "Docker: Python(MongoDB 로컬)" 작업의 경우 YOUR-IP-ADDRESS>를 지정<합니다. "Docker: Python(MongoDB Azure)" 작업의 경우 CONNECTION-STRING>을 지정<합니다.

이미지에서 컨테이너를 시작하고 Docker Desktop 애플리케이션을 사용하여 중지할 수도 있습니다.

다음 단계