이 문서는 컨테이너화된 Python 웹앱을 컨테이너화하고 Azure 앱 Service에 배포하는 방법에 대한 자습서의 일부입니다. App Service를 사용하면 컨테이너화된 웹앱을 실행하고 Docker Hub, Azure Container Registry 및 Visual Studio Team Services를 사용하여 CI/CD(지속적인 통합/지속적인 배포) 기능을 통해 배포할 수 있습니다. 자습서의 이 부분에서는 컨테이너화된 Python 웹앱을 로컬로 빌드하고 실행하는 방법을 알아봅니다. 이 단계는 선택 사항이며 Azure에 샘플 앱을 배포하는 데 필요하지 않습니다.
개발 환경에서 Docker 이미지를 로컬로 실행하려면 Azure에 배포할 필요 이상으로 설정해야 합니다. 특히 샘플 앱을 넘어 고유한 웹앱을 만들기 시작할 때 향후 개발 주기를 더 쉽게 만들 수 있는 투자라고 생각합니다. Django 및 Flask용 샘플 앱을 배포하려면 이 단계를 건너뛰고 이 자습서의 다음 단계로 이동하면 됩니다. Azure에 배포한 후 언제든지 반환하고 이러한 단계를 수행할 수 있습니다.
다른 이미지 특성 중에는 REPOSITORY 이름, TAG 및 만든 날짜로 나열된 이미지가 표시됩니다.
이 시점에서 이미지를 로컬로 빌드했습니다. 만든 이미지의 이름은 "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)를 검사할 수 있는 모든 사용자가 이를 관찰할 수 있습니다.
mongod 구성 파일에는 bindIp MongoDB가 클라이언트 연결을 수신 대기하는 호스트 이름 및 IP 주소를 정의하는 키가 있습니다. 로컬 개발 컴퓨터의 현재 IP를 추가합니다. Docker 컨테이너에서 로컬로 실행되는 샘플 앱은 이 주소를 사용하여 호스트 머신과 통신합니다.
데이터베이스 이름을 "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"입니다.
다음 스크립트를 실행하기 전에 위치 및 Azure Cosmos DB for MongoDB 계정 이름을 적절한 값으로 바꿉니다. 스크립트에 지정된 리소스 그룹 이름을 사용하거나 변경할 수 있습니다. 어느 쪽이든 이 자습서의 다른 문서에서 만든 모든 Azure 리소스에 동일한 리소스 그룹을 사용하는 것이 좋습니다. 자습서를 마치면 더 쉽게 삭제할 수 있습니다. 4부 에서 이곳에 도착한 경우. 컨테이너 App Service를 배포하고, 리소스에 이미 사용했던 리소스 그룹 이름 및 위치를 사용합니다.
스크립트는 Bash 셸을 사용한다고 가정합니다. 다른 셸을 사용하려면 변수 선언 및 대체 구문을 변경해야 합니다. 스크립트를 실행하는 데 몇 분 정도 걸릴 수 있습니다.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
# RESOURCE_GROUP_NAME: The resource group name. Can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name. Can contain lowercase letters, hyphens, and numbers.
LOCATION='eastus'
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
ACCOUNT_NAME='<cosmos-db-account-name>'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaraunts_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
스크립트가 완료되면 마지막 명령의 출력에서 기본 MongoDB 커넥트ion String을 복사합니다.
이 시점에서 양식mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>의 Azure Cosmos DB for MongoDB 연결 문자열, 명명된 데이터베이스 및 이름이 restaurants_reviews지정된 restaurants_reviews컬렉션이 있어야 합니다.
VS Code Azure Databases 확장에서 MongoDB 서버를 마우스 오른쪽 단추로 클릭하고 연결 문자열 가져올 수 있습니다.
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간주됩니다.
이미지를 실행합니다.
Docker 확장의 IMAGES 섹션에서 빌드된 이미지를 찾습니다.
이미지를 확장하여 최신 태그를 찾고 마우스 오른쪽 단추를 클릭하고 대화형 실행을 선택합니다.
시나리오에 적합한 작업인 "대화형 실행 구성(MongoDB 로컬)" 또는 "대화형 실행 구성(MongoDB Azure)"을 선택하라는 메시지가 표시됩니다.
대화형 실행을 사용하면 코드에 인쇄 문이 표시되며 디버깅에 유용할 수 있습니다. 비대화형이며 표준 입력을 열어 두지 않는 실행을 선택할 수도 있습니다.
Important
기본 터미널 프로필이 (Windows) 명령 프롬프트로 설정된 경우 이 단계가 실패합니다. 기본 프로필을 변경하려면 VS Code 명령 팔레트 (Ctrl+Shift+P)를 열고 "터미널: 기본 프로필 선택"을 입력한 다음 드롭다운 메뉴에서 다른 프로필(예 : Git Bash 또는 PowerShell)을 선택합니다.
컨테이너가 실행 중인지 확인합니다.
Docker 확장의 CONTAINERS 섹션에서 컨테이너를 찾습니다.
개별 컨테이너 노드를 확장하고 "msdocspythoncontainerwebapp"이 실행 중인지 확인합니다. 실행 중인 경우 컨테이너 이름 옆에 녹색 삼각형 기호가 표시됩니다.
컨테이너 이름을 마우스 오른쪽 단추로 클릭하고 브라우저에서 열기를 선택하여 웹앱을 테스트합니다.
브라우저가 기본 브라우저에 "http://127.0.0.1:8000" Django 또는 "http://127.0.0.1:5000/"의 경우 Flask의 경우
컨테이너를 중지합니다.
Docker 확장의 CONTAINERS 섹션에서 실행 중인 컨테이너를 찾습니다.
컨테이너를 마우스 오른쪽 단추로 클릭하고 중지를 선택합니다.
팁
실행 또는 디버그 구성을 선택하는 컨테이너를 실행할 수도 있습니다. tasks.json의 Docker 확장 작업은 실행하거나 디버그할 때 호출됩니다. 호출되는 작업은 선택한 시작 구성에 따라 달라집니다. "Docker: Python(MongoDB 로컬)" 작업의 경우 YOUR-IP-ADDRESS>를 지정<합니다. "Docker: Python(MongoDB Azure)" 작업의 경우 CONNECTION-STRING>을 지정<합니다.