이 자습서에서는 Python Flask 또는 FastAPI 웹앱을 컨테이너화하고 Azure Container Apps 배포하는 방법을 보여줍니다. Azure Container Apps Docker 컨테이너 기술을 사용하여 기본 제공 이미지와 사용자 지정 이미지를 모두 호스팅합니다. Azure 컨테이너를 사용하는 방법에 대한 자세한 내용은 Azure 컨테이너 옵션 호환 참조하세요.
이 자습서에서는 Docker CLI 및 Azure CLI 사용하여 Docker 이미지를 만들고 Azure Container Apps 배포합니다. Visual Studio Code 및 Azure 도구 확장 사용하여 배포할 수도 있습니다.
필수 조건
이 자습서를 완료하려면 다음이 필요합니다.
Azure Container Apps 웹앱을 배포할 수 있는 Azure 계정입니다. 이 프로세스는 Azure Container Registry 및 Log Analytics 작업 영역 만듭니다.)
Azure CLIDocker 및 로컬 환경에 설치된 Docker CLI.
샘플 코드 가져오기
로컬 환경에서 코드를 가져옵니다.
Dockerfile 및 .dockerignore 파일 추가
Dockerfile을 추가하여 Docker에 이미지를 빌드하는 방법을 지시합니다. Dockerfile은 Flask 및 FastAPI 프레임워크에 웹 요청을 전달하는 프로덕션 수준 웹 서버인 Gunicorn의 사용을 지정합니다. ENTRYPOINT 및 CMD 명령은 Gunicorn에 앱 개체에 대한 요청을 처리하도록 지시합니다.
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "--config", "gunicorn.conf.py", "app:app"]
이 예제에서는 50505을(를) 컨테이너 포트(내부)로 사용하지만, 사용 가능한 포트를 선택할 수 있습니다.
requirements.txt 파일이 포함되어 있는지 확인합니다gunicorn.
Flask==3.1.0
gunicorn
gunicorn 구성
gunicorn.conf.py 파일을 사용하여 Gunicorn을 구성할 수 있습니다.
gunicorn.conf.py 파일이 실행하는 gunicorn동일한 디렉터리에 있는 경우 ENTRYPOINT의 위치 또는 CMD 명령에서 해당 위치를 지정할 필요가 없습니다. 구성 파일을 지정하는 방법에 대한 자세한 내용은 Gunicorn 설정을 참조 하세요.
이 자습서에서 제안된 구성 파일은 사용 가능한 CPU 코어 수에 따라 작업자 수를 늘리도록 Gunicorn을 구성합니다. gunicorn.conf.py 파일 설정에 대한 자세한 내용은 Gunicorn 구성을 참조하세요.
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
.dockerignore 파일을 추가하여 이미지에서 불필요한 파일을 제외합니다.
.git*
**/*.pyc
.venv/
이미지를 로컬로 빌드 및 실행
이미지를 로컬로 빌드합니다.
Docker 컨테이너에서 이미지를 로컬로 실행합니다.
docker run --detach --publish 5000:50505 flask-demo
브라우저에서 열어 http://localhost:5000 로컬로 실행되는 웹앱을 확인합니다.
이 --detach 옵션은 백그라운드에서 컨테이너를 실행합니다. 이 --publish 옵션은 컨테이너 포트를 호스트의 포트에 매핑합니다. 호스트 포트(외부)는 쌍에서 첫 번째이고 컨테이너 포트(내부)는 두 번째입니다. 자세한 내용은 Docker 실행 참조를 참조하세요.
Azure 웹앱 배포
Docker 이미지를 Azure Container Apps 배포하려면 az containerapp up 명령을 사용합니다. (Bash 셸에 대해 다음 명령이 표시됩니다. 다른 셸에 맞게 연속 문자(\)를 변경합니다.
az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .
배포가 완료되면 내부에 다음 리소스가 포함된 리소스 그룹이 있습니다.
- 하나의 Azure Container Registry
- Container Apps 환경
- 웹앱 이미지를 실행하는 컨테이너 앱
- Log Analytics 작업 영역
명령의 az containerapp up 출력에는 배포된 앱의 URL이 포함됩니다. 브라우저에서 URL을 열어 Azure 실행 중인 웹앱을 확인합니다. URL은 다음과 같이 나타납니다 https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, 여기서 <generated-text> 및 <location-info>는 배포에 고유합니다.
업데이트 및 다시 배포
코드를 업데이트한 후 이전 az containerapp up 명령을 다시 실행합니다. 이 명령은 이미지를 다시 빌드하고 Azure Container Apps 다시 배포합니다. 명령을 다시 실행하면 리소스 그룹 및 앱이 이미 있음을 감지하고 컨테이너 앱만 업데이트합니다.
더 복잡한 업데이트 시나리오에서는 az acr build 와 az containerapp update 명령을 함께 사용하여 컨테이너 앱을 업데이트하여 다시 배포할 수 있습니다.
청소
이 자습서에서 만든 모든 Azure 리소스는 동일한 리소스 그룹에 있습니다. 리소스 그룹을 제거하면 리소스 그룹의 모든 리소스가 제거됩니다. 앱에 사용되는 모든 Azure 리소스를 제거하는 가장 빠른 방법입니다.
리소스를 제거하려면 az group delete 명령을 사용합니다.
Azure 포털 또는 Visual Studio Code에서 Azure 도구 확장 사용하여 그룹을 제거할 수도 있습니다.
다음 단계
자세한 내용은 다음 리소스를 참조하세요.