이 문서에서는 웹 애플리케이션과 같은 Python 프로젝트를 가져와서 Azure에서 Docker 컨테이너로 배포하는 방법을 설명합니다. 일반적인 컨테이너화 워크플로, 컨테이너에 대한 Azure 배포 옵션 및 Azure 내의 Python 관련 컨테이너 구성에 대해 설명합니다. Azure에서 Docker 컨테이너를 빌드하고 배포하는 것은 Dockerfile, requirements.txt및 Django, Flask 및 FastAPI와 같은 웹 프레임워크에 대한 설정에서 Python 관련 구성을 사용하여 언어 간 표준 프로세스를 따릅니다.
컨테이너 워크플로 시나리오
Python 컨테이너 개발의 경우 다음 표에서 코드에서 컨테이너로 이동하기 위한 몇 가지 일반적인 워크플로에 대해 설명합니다.
시나리오 | 설명 | 워크플로 |
---|---|---|
개발 | 개발 환경에서 Python Docker 이미지를 로컬로 빌드합니다. |
코드: Git을 사용하여 로컬로 앱 코드를 복제합니다(Docker가 설치된 경우). 빌드: Docker CLI, VS Code(확장 포함), PyCharm(Docker 플러그 인 사용)을 사용합니다. Python Docker 이미지 및 컨테이너 작업 섹션에서 설명합니다. 테스트: 컨테이너를 로컬로 실행하고 테스트합니다. 푸시: Azure Container Registry, Docker Hub 또는 프라이빗 레지스트리와 같은 컨테이너 레지스트리에 이미지를 푸시합니다. 배포: 레지스트리에서 Azure 서비스로 컨테이너를 배포합니다. |
하이브리드. | Azure에서 Docker 이미지를 빌드하지만 로컬 환경에서 프로세스를 시작합니다. |
코드: 코드를 로컬로 복제합니다(Docker를 설치할 필요가 없음). 빌드: Azure에서 빌드를 트리거하려면 VS Code(원격 확장 포함) 또는 Azure CLI를 사용합니다. 푸시: 빌드된 이미지를 Azure Container Registry에 푸시합니다. 배포: 레지스트리에서 Azure 서비스로 컨테이너를 배포합니다. |
하늘빛 | Azure Cloud Shell을 사용하여 완전히 클라우드에 컨테이너를 빌드하고 배포합니다. |
코드: Azure Cloud Shell에서 GitHub 리포지토리를 복제합니다. 빌드: Cloud Shell에서 Azure CLI 또는 Docker CLI를 사용합니다. 푸시: Azure Container Registry, Docker Hub 또는 프라이빗 레지스트리와 같은 레지스트리에 이미지를 푸시합니다. 배포: 레지스트리에서 Azure 서비스로 컨테이너를 배포합니다. |
이러한 워크플로의 최종 목표는 다음 섹션에 나열된 대로 Docker 컨테이너를 지원하는 Azure 리소스 중 하나에서 실행되는 컨테이너를 만드는 것입니다.
개발 환경은 다음과 같습니다.
- Visual Studio Code 또는 PyCharm을 사용하여 로컬 워크스테이션에서 작업하기
- Codespaces (클라우드에서 호스트되는 개발 환경)
- Visual Studio Dev Containers (개발 환경으로서의 컨테이너)
Azure의 배포 컨테이너 옵션
Python 컨테이너 앱은 다음 서비스에서 지원됩니다.
서비스 | 설명 |
---|---|
컨테이너를 위한 웹 앱 | Azure App Service는 웹 사이트 및 웹 API를 포함하여 컨테이너화된 웹 애플리케이션을 위한 완전 관리형 호스팅 플랫폼입니다. 확장 가능한 배포를 지원하고 Docker Hub, Azure Container Registry 및 GitHub를 사용하여 CI/CD 워크플로와 원활하게 통합됩니다. 이 서비스는 컨테이너화된 앱을 배포하는 간단하고 효율적인 경로를 원하는 개발자에게 적합하며 Azure App Service 플랫폼의 전체 기능을 활용할 수 있습니다. 애플리케이션 및 모든 종속성을 배포 가능한 단일 컨테이너로 패키징하면 인프라를 관리할 필요 없이 이식성과 관리 용이성을 모두 얻을 수 있습니다.
예: Azure App Service에 Flask 또는 FastPI 웹앱을 배포합니다. |
ACA(Azure Container Apps) | ACA(Azure Container Apps)는 Kubernetes에서 제공하는 완전 관리형 서버리스 컨테이너 서비스이며 Dapr, KEDA 및 envoy와 같은 오픈 소스 기술입니다. 이 디자인은 업계 모범 사례를 통합하고 범용 컨테이너를 실행하기 위해 최적화되어 있습니다. ACA는 Kubernetes 인프라 관리의 복잡성을 추상화합니다. Kubernetes API에 대한 직접 액세스는 필요하지 않거나 지원되지 않습니다. 대신 개발 및 배포 워크플로를 간소화하기 위해 수정 버전, 크기 조정, 인증서 및 환경과 같은 더 높은 수준의 애플리케이션 구문을 제공합니다. 이 서비스는 최소한의 운영 오버헤드로 컨테이너화된 마이크로 서비스를 빌드하고 배포하려는 개발 팀에 적합하므로 인프라 관리 대신 애플리케이션 논리에 집중할 수 있습니다. 예: Azure Container Apps에 Flask 또는 FastPI 웹앱을 배포합니다. |
ACI(Azure Container Instances) | ACI(Azure Container Instances)는 요청 시 Hyper-V 격리된 컨테이너의 단일 Pod를 제공하는 서버리스 제품입니다. 청구는 미리 할당된 인프라가 아닌 실제 리소스 소비를 기반으로 하므로 수명이 짧거나 버스트 가능한 워크로드에 적합합니다. 다른 컨테이너 서비스와 달리 ACI는 크기 조정, 부하 분산 또는 TLS 인증서와 같은 개념에 대한 기본 제공 지원을 포함하지 않습니다. 대신, 일반적으로 오케스트레이션을 위해 AKS(Azure Kubernetes Service)와 같은 Azure 서비스와 통합되는 기본 컨테이너 구성 요소로 작동합니다. ACI는 Azure Container Apps의 상위 수준 추상화 및 기능이 필요하지 않은 경우 간단한 선택으로 탁월합니다. 예: Azure Container Instances에 배포하기 위한 컨테이너 이미지 만들기 (이 자습서는 Python과 관련이 없지만 표시된 개념은 모든 언어에 적용됩니다.) |
AKS(Azure Kubernetes Service) | AKS(Azure Kubernetes Service)는 Kubernetes 환경을 완벽하게 제어할 수 있는 Azure의 완전 관리형 Kubernetes 옵션입니다. Kubernetes API에 대한 직접 액세스를 지원하며 모든 표준 Kubernetes 워크로드를 실행할 수 있습니다. 전체 클러스터는 사용자의 제어 및 책임 내에서 클러스터 구성 및 작업을 통해 구독에 상주합니다. ACI는 완전 관리형 컨테이너 솔루션을 찾는 팀에 적합하며, AKS는 Kubernetes 클러스터에 대한 모든 권한을 부여하므로 구성, 네트워킹, 크기 조정 및 작업을 관리해야 합니다. Azure는 컨트롤 플레인 및 인프라 프로비저닝을 처리하지만 클러스터의 일상적인 작업 및 보안은 팀의 제어 내에 있습니다. 이 서비스는 클러스터 환경에 대한 전체 소유권을 유지하면서 Azure 관리 인프라의 추가 혜택을 통해 Kubernetes의 유연성과 기능을 원하는 팀에 적합합니다.
예: Azure CLI를 사용하여 Azure Kubernetes Service 클러스터를 배포합니다. |
Azure 함수 | Azure Functions는 이벤트 기반의 서버리스 FaaS(Functions-as-a-Service) 플랫폼을 제공하여 인프라를 관리하지 않고 이벤트에 대응하여 작은 코드(함수)를 실행할 수 있습니다. Azure Functions는 규모 및 이벤트와의 통합을 중심으로 Azure Container Apps와 많은 특성을 공유하지만 코드 또는 컨테이너로 배포된 수명이 짧은 함수에 최적화되어 있습니다. 이벤트에 따라 함수 실행을 시작하려는 팀의 경우 예를 들어 다른 데이터 소스와 연결하기 위한 것입니다. Azure Container Apps와 마찬가지로 Azure Functions는 이벤트 원본(예: HTTP 요청, 메시지 큐 또는 Blob Storage 업데이트)과 자동 크기 조정 및 통합을 지원합니다. 이 서비스는 Python 또는 다른 언어로 파일 업로드 처리 또는 데이터베이스 변경 내용에 응답하는 것과 같은 간단한 이벤트 트리거 워크플로를 빌드하는 팀에 적합합니다.
예: 사용자 지정 컨테이너를 사용하여 Linux에서 함수를 만듭니다. |
이러한 서비스에 대한 자세한 비교는 다른 Azure 컨테이너 옵션과 Container Apps 비교를 참조하세요.
가상 환경 및 컨테이너
Python의 가상 환경은 시스템 수준 Python 설치에서 프로젝트 종속성을 격리하여 개발 환경에서 일관성을 보장합니다. 가상 환경에는 해당 환경 내에서 특정 프로젝트 코드를 실행하는 데 필요한 라이브러리 및 스크립트와 함께 자체 격리된 Python 인터프리터가 포함됩니다. Python 프로젝트에 대한 종속성은 requirements.txt 파일을 통해 관리됩니다. 개발자는requirements.txt 파일에 종속성을 지정하여 프로젝트에 필요한 정확한 환경을 재현할 수 있습니다. 이 방법은 안정적인 애플리케이션 성능을 위해 환경 일관성이 필수적인 Azure App Service와 같은 컨테이너화된 배포로의 원활한 전환을 용이하게 합니다.
팁 (조언)
컨테이너화된 Python 프로젝트에서는 Docker 컨테이너가 자체 Python 인터프리터 및 종속성을 사용하여 격리된 환경을 제공하기 때문에 일반적으로 가상 환경이 필요하지 않습니다. 그러나 로컬 개발 또는 테스트에 가상 환경을 사용할 수 있습니다. Docker 이미지를 간결하게 유지하려면 .dockerignore 파일을 사용하여 가상 환경을 제외하여 불필요한 파일을 이미지로 복사하지 못하게 합니다.
Docker 컨테이너는 Python 가상 환경과 유사한 기능을 제공하지만 재현성, 격리 및 이식성면에서 더 광범위한 이점을 제공합니다. 가상 환경과 달리 Docker 컨테이너는 컨테이너 런타임을 사용할 수 있는 한 여러 운영 체제 및 환경에서 일관되게 실행할 수 있습니다.
Docker 컨테이너에는 종속성, 환경 설정 및 시스템 라이브러리와 같이 실행해야 하는 모든 항목과 함께 Python 프로젝트 코드가 포함됩니다. 컨테이너를 만들려면 먼저 프로젝트 코드 및 구성에서 Docker 이미지를 빌드한 다음 해당 이미지의 실행 가능한 인스턴스인 컨테이너를 시작합니다.
Python 프로젝트를 컨테이너화하는 경우 키 파일은 다음 표에 설명되어 있습니다.
프로젝트 파일 | 설명 |
---|---|
requirements.txt | 이 파일에는 애플리케이션에 필요한 Python 종속성의 최종 목록이 포함되어 있습니다. Docker는 이미지 빌드 프로세스 중에 이 목록을 사용하여 필요한 모든 패키지를 설치합니다. 이렇게 하면 개발 환경과 배포 환경 간의 일관성이 보장됩니다. |
Dockerfile | 이 파일에는 기본 이미지 선택, 종속성 설치, 코드 복사 및 컨테이너 시작 명령을 포함하여 Python Docker 이미지를 빌드하기 위한 지침이 포함되어 있습니다. 애플리케이션에 대한 전체 실행 환경을 정의합니다. 자세한 내용은 Python에 대한 Dockerfile 지침 섹션을 참조하세요. |
.dockerignore | 이 파일은 Dockerfile의 명령을 사용하여 Docker 이미지에 콘텐츠를 복사할 때 제외해야 하는 파일 및 COPY 디렉터리를 지정합니다. 이 파일은 제외를 정의하기 위해 .gitignore와 유사한 패턴을 사용합니다.
.dockerignore 파일은 .gitignore 파일과 유사한 제외 패턴을 지원합니다. 자세한 내용은 .dockerignore 파일을 참조하세요. 파일을 제외하면 이미지 빌드 성능이 향상되지만 검사할 수 있는 이미지에 중요한 정보가 추가되지 않도록 해야 합니다. 예를 들어 .dockerignore 에는 .env 및 .venv (가상 환경) 를 무시하는 줄이 포함되어야 합니다. |
웹 프레임워크에 대한 컨테이너 설정
웹 프레임워크는 일반적으로 기본 포트(예: Flask의 경우 5000, FastAPI의 경우 8000)에 바인딩됩니다. Azure Container Instances, AKS(Azure Kubernetes Service) 또는 App Service for Containers와 같은 Azure 서비스에 컨테이너를 배포하는 경우 컨테이너의 수신 대기 포트를 명시적으로 노출하고 구성하여 인바운드 트래픽의 적절한 라우팅을 보장하는 것이 중요합니다. 올바른 포트를 구성하면 Azure의 인프라가 컨테이너 내의 올바른 엔드포인트로 요청을 보낼 수 있습니다.
웹 프레임워크 | 항구 |
---|---|
Django | 8천 |
플라스크 | 5000 또는 5002 |
FastAPI (uvicorn) | 8000 또는 80 |
다음 표에서는 다양한 Azure 컨테이너 솔루션에 대한 포트를 설정하는 방법을 보여 줍니다.
Azure 컨테이너 솔루션 | 웹앱 포트를 설정하는 방법 |
---|---|
컨테이너용 웹 애플리케이션 | 기본적으로 App Service는 사용자 지정 컨테이너가 포트 80 또는 포트 8080에서 수신 대기하고 있다고 가정합니다. 컨테이너가 다른 포트를 수신 대기하는 경우 App Service 앱에서 WEBSITES_PORT 설정을 지정합니다. 자세한 내용은 Azure App Service에 대한 사용자 지정 컨테이너 구성을 참조하세요. |
Azure Containers 앱 | Azure Container Apps를 사용하면 인그레스를 사용하여 컨테이너 앱을 공용 웹, 가상 네트워크 또는 동일한 환경 내의 다른 컨테이너 앱에 노출할 수 있습니다. 들어오는 요청에 대해 컨테이너가 수신 대기하는 포트에 대한 수신 targetPort 을 설정합니다. 애플리케이션 수신 엔드포인트는 항상 포트 443에 노출됩니다. 자세한 내용은 Azure Container Apps에서 HTTPS 또는 TCP 수신 설정을 참조하세요. |
Azure Container Instances, Azure Kubernetes | 컨테이너 또는 Pod를 만드는 동안 앱이 수신 대기하는 포트를 정의합니다. 컨테이너 이미지에는 웹 프레임워크, 애플리케이션 서버(예: gunicorn, uvicorn) 및 선택적으로 웹 서버(예: nginx)가 포함되어야 합니다. 더 복잡한 시나리오에서는 두 컨테이너(애플리케이션 서버용 및 웹 서버용 컨테이너)로 책임을 분할할 수 있습니다. 이 경우 웹 서버 컨테이너는 일반적으로 외부 트래픽에 대해 포트 80 또는 443을 노출합니다. |
Python Dockerfile
Dockerfile은 Python 애플리케이션에 대한 Docker 이미지를 빌드하기 위한 지침이 포함된 텍스트 파일입니다. 첫 번째 명령은 일반적으로 시작할 기본 이미지를 지정합니다. 이후 지침에서는 필요한 소프트웨어 설치, 애플리케이션 파일 복사 및 실행 가능한 이미지를 만들도록 환경 구성과 같은 작업을 자세히 설명합니다. 다음 표에서는 일반적으로 사용되는 Dockerfile 지침에 대한 Python 관련 예제를 제공합니다.
지침 | 목적 | 예시 |
---|---|---|
에서 | 후속 지침에 대한 기본 이미지를 설정합니다. | FROM python:3.8-slim |
노출 | 컨테이너가 런타임에 지정된 포트를 수신 대기하도록 Docker에 지시합니다. | EXPOSE 5000 |
복사 | 지정된 원본에서 파일 또는 디렉터리를 복사하고 지정된 대상 경로에 있는 컨테이너의 파일 시스템에 추가합니다. | COPY . /app |
달리다 | Docker 이미지 내에서 명령을 실행합니다. 예를 들어 종속성을 끌어오기 이 명령은 빌드 시 한 번 실행됩니다. | RUN python -m pip install -r requirements.txt |
CMD | 이 명령은 컨테이너를 실행하기 위한 기본값을 제공합니다. CMD 명령은 하나만 있을 수 있습니다. | CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"] |
Docker 빌드 명령은 Dockerfile 및 컨텍스트에서 Docker 이미지를 빌드합니다. 빌드의 컨텍스트는 지정된 경로 또는 URL에 있는 파일 집합입니다. 일반적으로 Python 프로젝트의 루트에서 이미지를 빌드하고 다음 예제와 같이 빌드 명령의 경로는 "."입니다.
docker build --rm --pull --file "Dockerfile" --tag "mywebapp:latest" .
빌드 프로세스는 컨텍스트의 모든 파일을 참조할 수 있습니다. 예를 들어 빌드는 COPY 명령을 사용하여 컨텍스트에서 파일을 참조할 수 있습니다. Flask 프레임워크를 사용하는 Python 프로젝트에 대한 Dockerfile의 예는 다음과 같습니다.
FROM python:3.8-slim
EXPOSE 5000
# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1
# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1
# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser
# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]
직접 Dockerfile을 만들거나 VS Code 및 Docker 확장을 사용하여 자동으로 만들 수 있습니다. 자세한 내용은 Docker 파일 생성을 참조하세요.
Docker 빌드 명령은 Docker CLI의 일부입니다. VS Code 또는 PyCharm과 같은 IDE를 사용하는 경우 Docker 이미지 작업을 위한 UI 명령은 빌드 명령을 호출하고 옵션 지정을 자동화합니다.
Python Docker 이미지 및 컨테이너 작업
VS Code 및 PyCharm
VS Code(Visual Studio Code) 및 PyCharm과 같은 IDE(통합 개발 환경)는 Docker 작업을 워크플로에 통합하여 Python 컨테이너 개발을 간소화합니다. 확장 또는 플러그 인을 사용하면 이러한 IDE는 Docker 이미지 빌드, 컨테이너 실행 및 App Service 또는 Container Instances와 같은 Azure 서비스에 배포하는 작업을 간소화합니다. 다음은 VS Code 및 PyCharm으로 수행할 수 있는 몇 가지 작업입니다.
Docker 이미지를 다운로드하고 빌드합니다.
- 개발 환경에서 이미지를 빌드합니다.
- 개발 환경에 Docker를 설치하지 않고 Azure에서 Docker 이미지를 빌드합니다. (PyCharm의 경우 Azure CLI를 사용하여 Azure에서 이미지를 빌드합니다.)
기존 이미지, 끌어온 이미지 또는 Dockerfile에서 직접 Docker 컨테이너를 만들고 실행합니다.
Docker Compose를 사용하여 다중 컨테이너 애플리케이션을 실행합니다.
Docker Hub, GitLab, JetBrains Space, Docker V2 및 기타 자체 호스팅 Docker 레지스트리와 같은 컨테이너 레지스트리에 연결하고 작업합니다.
(VS Code만 해당) Python 프로젝트에 맞게 조정된 Dockerfile 및 Docker 작성 파일을 추가합니다.
개발 환경에서 Docker 컨테이너를 실행하도록 VS Code 및 PyCharm을 설정하려면 다음 단계를 사용합니다.
아직 설치하지 않은 경우 VS Code용 Azure Tools를 설치합니다.
지시 | 스크린샷 |
---|---|
1단계: Shift + Alt + A 를 사용하여 Azure 확장을 열고 Azure 에 연결되어 있는지 확인합니다. VS Code 확장 모음에서 Azure 아이콘을 선택할 수도 있습니다. 로그인하지 않은 경우 Azure에 로그인을 선택하고 프롬프트를 따릅니다. Azure 구독에 액세스하는 데 문제가 있는 경우 프록시 뒤에 있기 때문일 수 있습니다. 연결 문제를 해결하려면 Visual Studio Code의 네트워크 연결을 참조하세요. |
![]() ![]() |
2단계: Ctrl + Shift + X 를 사용하여 확장을 열고 , Docker 확장을 검색하고, 확장을 설치합니다. VS Code 확장 모음에서 확장 아이콘을 선택할 수도 있습니다. |
![]() |
3단계: 확장 모음에서 Docker 아이콘을 선택하고, 이미지를 확장하고, Docker 이미지를 마우스 오른쪽 단추로 클릭하여 컨테이너로 실행합니다. |
![]() |
4단계: 터미널 창에서 Docker 실행 출력을 모니터링합니다. |
![]() |
Azure CLI 및 Docker CLI
Azure CLI 및 Docker CLI를 사용하여 Python Docker 이미지 및 컨테이너로 작업할 수도 있습니다. VS Code와 PyCharm 모두 이러한 CLI를 실행할 수 있는 터미널이 있습니다.
빌드 및 실행 인수와 자동화를 더 세부적으로 제어하려는 경우 CLI를 사용합니다. 예를 들어 다음 명령은 Azure CLI az acr build 를 사용하여 Docker 이미지 이름을 지정하는 방법을 보여줍니다.
az acr build --registry <registry-name> \
--resource-group <resource-group> \
--target pythoncontainerwebapp:latest .
또 다른 예로 Docker CLI 실행 명령을 사용하는 방법을 보여 주는 다음 명령을 고려해 보세요. 이 예제에서는 컨테이너 외부의 개발 환경에서 MongoDB 인스턴스와 통신하는 Docker 컨테이너를 실행하는 방법을 보여 줍니다. 명령을 완료하기 위한 다양한 값은 명령줄에 지정된 경우 더 쉽게 자동화할 수 있습니다.
docker run --rm -it \
--publish <port>:<port> --publish 27017:27017 \
--add-host mongoservice:<your-server-IP-address> \
--env CONNECTION_STRING=mongodb://mongoservice:27017 \
--env DB_NAME=<database-name> \
--env COLLECTION_NAME=<collection-name> \
containermongo:latest
이 시나리오에 대한 자세한 내용은 컨테이너화된 Python 웹앱 빌드 및 테스트를 로컬로 참조하세요.
컨테이너의 환경 변수
Python 프로젝트는 일반적으로 환경 변수를 사용하여 구성 데이터를 애플리케이션 코드에 전달합니다. 이 방법을 사용하면 다양한 환경에서 더 많은 유연성을 사용할 수 있습니다. 예를 들어 데이터베이스 연결 세부 정보를 환경 변수에 저장할 수 있으므로 코드를 수정하지 않고도 개발, 테스트 및 프로덕션 데이터베이스 간에 쉽게 전환할 수 있습니다. 코드에서 구성을 분리하면 더 깔끔한 배포가 촉진되고 보안 및 유지 관리 효율성이 향상됩니다.
python-dotenv와 같은 패키지는 .env 파일에서 키-값 쌍을 읽고 환경 변수로 설정하는 데 자주 사용됩니다. .env 파일은 가상 환경에서 실행할 때 유용하지만 컨테이너로 작업할 때는 권장되지 않습니다. 특히 중요한 정보가 포함되어 있고 컨테이너가 공개되는 경우 .env 파일을 Docker 이미지에 복사하지 마세요. .dockerignore 파일을 사용하여 Docker 이미지에 복사되는 파일을 제외합니다. 자세한 내용은 이 문서의 가상 환경 및 컨테이너 섹션을 참조하세요.
다음과 같은 몇 가지 방법으로 환경 변수를 컨테이너에 전달할 수 있습니다.
- Dockerfile에서 ENV 지침으로 정의됩니다.
- Docker
--build-arg
명령에 인수로 전달됩니다. - Docker 빌드 명령 및
--secret
백 엔드를 사용하여 인수로 전달됩니다. - Docker
--env
명령을 사용하여 as--env-file
또는 인수로 전달됩니다.
처음 두 옵션에는 .env 파일에서 설명한 것과 동일한 단점이 있습니다. 즉, 잠재적으로 중요한 정보를 Docker 이미지로 하드 코딩하는 것입니다. Docker 이미지를 검사하고 예를 들어 명령 docker 이미지 검사를 사용하여 환경 변수를 볼 수 있습니다.
BuildKit의 세 번째 옵션을 사용하면 최종 이미지에 저장되지 않는 안전한 방식으로 Docker 이미지를 빌드하기 위해 Dockerfile에서 사용할 비밀 정보를 전달할 수 있습니다.
Docker 실행 명령을 사용하여 환경 변수를 전달하는 네 번째 옵션은 Docker 이미지에 변수가 포함되지 않음을 의미합니다. 그러나 변수는 컨테이너 인스턴스(예: docker 컨테이너 검사 포함)를 검사하는 상태로 계속 표시됩니다. 이 옵션은 컨테이너 인스턴스에 대한 액세스가 제어되거나 테스트 또는 개발 시나리오에서 허용될 수 있습니다.
다음은 Docker CLI의 run 명령을 사용하고 --env
인수를 통해 환경 변수를 전달하는 예제입니다.
# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>
docker run --rm -it \
--publish $PORT:$PORT \
--env CONNECTION_STRING=<connection-info> \
--env DB_NAME=<database-name> \
<dockerimagename:tag>
VS Code(Docker 확장) 또는 PyCharm(Docker 플러그 인)에서 UI 도구는 백그라운드에서 표준 Docker CLI 명령(예: docker 빌드, docker 실행)을 실행하여 Docker 이미지 및 컨테이너 관리를 간소화합니다.
마지막으로, Azure에서 컨테이너를 배포할 때 환경 변수를 지정하는 것은 개발 환경에서 환경 변수를 사용하는 것과 다릅니다. 다음은 그 예입니다.
Web App for Containers의 경우 App Service를 구성하는 동안 애플리케이션 설정을 구성합니다. 이러한 설정은 앱 코드에서 환경 변수로 사용할 수 있으며 표준 os.environ 패턴을 사용하여 액세스합니다. 필요한 경우 초기 배포 후 값을 변경할 수 있습니다. 자세한 내용은 환경 변수로 Access 앱 설정을 참조하세요.
Azure Container Apps의 경우 컨테이너 앱의 초기 구성 중에 환경 변수를 구성합니다. 이후에 환경 변수를 수정하면 컨테이너의 수정 내용 이 만들어집니다. 또한 Azure Container Apps를 사용하면 애플리케이션 수준에서 비밀을 정의한 다음 환경 변수에서 참조할 수 있습니다. 자세한 내용은 Azure Container Apps의 비밀 관리를 참조 하세요.
또 다른 옵션으로 서비스 커넥터 를 사용하여 Azure 컴퓨팅 서비스를 다른 지원 서비스에 연결할 수 있습니다. 이 서비스는 컴퓨팅 서비스와 관리 평면의 대상 지원 서비스 간에 네트워크 설정 및 연결 정보(예: 환경 변수 생성)를 구성합니다.
컨테이너 로그 보기
컨테이너 인스턴스 로그를 보고 코드에서 진단 메시지 출력을 보고 컨테이너 코드의 문제를 해결합니다. 다음은 개발 환경에서 컨테이너를 실행할 때 로그를 볼 수 있는 몇 가지 방법입니다.
VS Code 및 PyCharm 섹션에 표시된 것처럼 VS Code 또는 PyCharm을 사용하여 컨테이너를 실행하면 Docker 실행이 실행될 때 열린 터미널 창의 로그를 볼 수 있습니다.
Docker Desktop에서 실행 중인 컨테이너에 대한 로그를 볼 수도 있습니다.
Azure에서 컨테이너를 배포할 때 컨테이너 로그에 대한 액세스 권한도 있습니다. 다음은 여러 Azure 서비스 및 Azure Portal에서 컨테이너 로그에 액세스하는 방법입니다.
Azure 서비스 | Azure Portal에서 로그에 액세스하는 방법 |
---|---|
컨테이너용 웹 애플리케이션 | 문제 진단 및 해결 리소스로 이동하여 로그를 확인하세요. 진단 은 구성 없이 앱 문제를 해결하는 데 도움이 되는 지능적이고 대화형 환경입니다. 로그를 실시간으로 보려면 모니터링 - 로그 스트림으로 이동합니다. 자세한 로그 쿼리 및 구성은 모니터링 아래의 다른 리소스를 참조 하세요. |
Azure Container Apps (Azure 컨테이너 애플리케이션) | 환경 리소스 문제 진단 및 해결으로 이동하여 환경 문제를 해결하세요. 더 자주 컨테이너 로그를 보려고 합니다. 컨테이너 리소스의 애플리케이션 - 수정 관리에서 수정 버전을 선택하고 여기에서 시스템 및 콘솔 로그를 볼 수 있습니다. 자세한 로그 쿼리 및 구성은 모니터링 아래의 리소스를 참조 하세요. |
Azure 컨테이너 인스턴스 | 컨테이너 리소스로 이동하여 로그를 선택합니다. |
이러한 서비스의 경우 로그에 액세스하는 Azure CLI 명령은 다음과 같습니다.
Azure 서비스 | 로그에 액세스하는 Azure CLI 명령 |
---|---|
컨테이너용 웹 애플리케이션 | az 웹앱 로그 |
Azure Container Apps (Azure 컨테이너 애플리케이션) | az 컨테이너앱 로그 |
Azure 컨테이너 인스턴스 | az container logs |
VS Code에서 로그를 볼 수도 있습니다. VS Code용 Azure 도구가 설치되어 있어야 합니다. 다음은 VS Code에서 Web Apps for Containers(App Service) 로그를 보는 예제입니다.