자습서 - AKS(Azure Kubernetes Service) 위한 애플리케이션 준비

이 자습서에서는 Kubernetes에서 사용할 다중 컨테이너 애플리케이션을 준비합니다. Docker Compose와 같은 기존 개발 도구를 사용하여 애플리케이션을 로컬로 빌드하고 테스트합니다. 다음 방법을 알아봅니다.

  • GitHub 샘플 애플리케이션 원본을 복제합니다.
  • 애플리케이션 예제 원본으로 컨테이너 이미지 만들기
  • 로컬 Docker 환경에서 다중 컨테이너 애플리케이션 테스트

완료되면 다음 애플리케이션이 로컬 개발 환경에서 실행됩니다.

 로컬 웹 브라우저에서 로컬로 열린 Azure 스토어 프런트 앱을 보여 주는 스크린샷.

이후 자습서에서는 컨테이너 이미지를 ACR(Azure Container Registry)에 업로드한 다음 AKS 클러스터에 배포합니다.

시작하기 전에

이 자습서에서는 컨테이너, 컨테이너 이미지 및 docker 명령과 같은 핵심 Docker 개념에 대한 기본적인 지식이 있다고 가정합니다. 컨테이너 기본 사항에 대한 입문서는 Docker 시작을 참조하세요.

이 자습서를 완료하려면 Linux 컨테이너를 실행하는 로컬 Docker 개발 환경이 필요합니다. Docker는 Mac, Windows 또는 Linux 시스템에서 Docker를 구성하는 패키지를 제공합니다.

참고

Azure Cloud Shell 이 자습서의 모든 단계를 완료하는 데 필요한 Docker 구성 요소는 포함하지 않습니다. 따라서 전체 Docker 개발 환경을 사용하는 것이 좋습니다.


애플리케이션 코드 가져오기

이 자습서에서 사용되는 sample 애플리케이션은 다음 Kubernetes 배포 및 서비스를 포함하는 기본 스토어 전면 앱입니다.

Azure 스토어 샘플 아키텍처 스크린샷.

  • 스토어 프런트: 고객이 제품을 보고 주문을 할 수 있는 웹 응용 프로그램입니다.
  • 제품 서비스: 제품 정보를 표시합니다.
  • 주문 서비스: 주문을 합니다.
  • RabbitMQ: 주문 큐에 대한 메시지 큐입니다.
  1. 컴퓨터에 디렉터리를 만들고 Bash와 같은 터미널 세션에서 해당 디렉터리로 전환합니다. 이 예제에서는 demorepo 라는 디렉터리를 사용하지만 원하는 이름을 사용할 수 있습니다.

    mkdir demorepo
    cd demorepo
    
  2. git을 사용하여 애플리케이션 예제를 개발 환경에 복제합니다.

    git clone https://github.com/Azure-Samples/aks-store-demo.git
    
  3. 복제된 디렉터리로 변경합니다.

    cd aks-store-demo
    

Docker Compose 파일 검토

이 자습서에서 만드는 샘플 애플리케이션은 복제한 repositorydocker-compose-quickstart YAML 파일을 사용합니다.

services:
  rabbitmq:
    image: rabbitmq:3.13.2-management-alpine
    container_name: 'rabbitmq'
    restart: always
    environment:
      - "RABBITMQ_DEFAULT_USER=username"
      - "RABBITMQ_DEFAULT_PASS=password"
    ports:
      - 15672:15672
      - 5672:5672
    healthcheck:
      test: ["CMD", "rabbitmqctl", "status"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - ./rabbitmq_enabled_plugins:/etc/rabbitmq/enabled_plugins
    networks:
      - backend_services
  order-service:
    build: src/order-service
    container_name: 'order-service'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://order-service:3000/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - ORDER_QUEUE_HOSTNAME=rabbitmq
      - ORDER_QUEUE_PORT=5672
      - ORDER_QUEUE_USERNAME=username
      - ORDER_QUEUE_PASSWORD=password
      - ORDER_QUEUE_NAME=orders
      - ORDER_QUEUE_RECONNECT_LIMIT=3
    networks:
      - backend_services
    depends_on:
      rabbitmq:
        condition: service_healthy
  product-service:
    build: src/product-service
    container_name: 'product-service'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://product-service:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - AI_SERVICE_URL=http://ai-service:5001/
    networks:
      - backend_services
  store-front:
    build: src/store-front
    container_name: 'store-front'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://store-front:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://product-service:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://order-service:3000/
    networks:
      - backend_services
    depends_on:
      - product-service
      - order-service
networks:
  backend_services:
    driver: bridge

컨테이너 이미지 만들기 및 애플리케이션 실행

Docker Compose를 사용하여 컨테이너 이미지 빌드 및 다중 컨테이너 애플리케이션 배포 작업을 자동화할 수 있습니다.

  1. 컨테이너 이미지를 만들고, RabbitMQ 이미지를 다운로드하고, docker compose 명령을 사용하여 애플리케이션을 시작합니다.

    docker compose -f docker-compose-quickstart.yml up -d
    
  2. docker images 명령을 사용하여 만든 이미지를 확인합니다.

    docker images
    

    다음의 압축된 예제 출력은 만들어진 이미지를 보여 줍니다.

    REPOSITORY                        TAG                          IMAGE ID
    aks-store-demo-product-service    latest                       72f5cd7e6b84
    aks-store-demo-order-service      latest                       54ad5de546f9
    aks-store-demo-store-front        latest                       1125f85632ae
    ...
    
  3. docker ps 명령을 사용하여 실행 중인 컨테이너를 확인합니다.

    docker ps
    

    다음의 압축된 예제 출력은 실행 중인 컨테이너 네 개를 보여 줍니다.

    CONTAINER ID        IMAGE
    f27fe74cfd0a        aks-store-demo-product-service
    df1eaa137885        aks-store-demo-order-service
    b3ce9e496e96        aks-store-demo-store-front
    31df28627ffa        rabbitmq:3.13.2-management-alpine
    

로컬에서 애플리케이션 테스트

실행 중인 애플리케이션을 보려면 로컬 웹 브라우저에서 http://localhost:8080으로 이동합니다. 다음 예제처럼 샘플 애플리케이션이 로드됩니다.

로컬 브라우저에 열려 있는 Azure 스토어 프런트 앱을 보여주는 스크린샷

이 페이지에서 제품을 보고 카트에 추가해서 주문할 수 있습니다.

리소스 정리

애플리케이션 기능의 유효성을 검사했기 때문에 실행 중인 컨테이너를 중지하고 제거할 수 있습니다. 다음 자습서에서 컨테이너 이미지를 사용하므로 컨테이너 이미지를 삭제하지 마세요.

docker compose down 명령을 사용하여 컨테이너 인스턴스와 리소스를 중지하고 제거합니다.

docker compose down

Azure Developer CLI 명령어

azd를 사용하는 경우 수동 컨테이너 이미지 종속성이 없습니다. azd는 Docker와 유사한 azd upazd down 명령을 사용하여 애플리케이션 및 클러스터의 프로비전, 배포 및 정리를 처리합니다.

Terraform 또는 Bicep를 사용하도록 준비 단계를 사용자 지정한 후, infraazure.yaml 섹션 내에서 클러스터를 배포할 수 있습니다. 기본적으로 이 프로젝트는 Terraform을 사용합니다.

infra:
  provider: terraform
  path: infra/terraform

공급자를 Bicep 변경하려면 다음과 같이 azure.yaml 파일을 업데이트합니다.

infra:
  provider: bicep
  path: infra/bicep

다음 단계

Azure CLI

이 자습서에서는 샘플 애플리케이션을 만들고, 애플리케이션에 대한 컨테이너 이미지를 만든 다음, 애플리케이션을 테스트했습니다. 구체적으로 다음 작업 방법을 알아보았습니다.

  • GitHub 샘플 애플리케이션 원본을 복제합니다.
  • 애플리케이션 예제 원본으로 컨테이너 이미지 만들기
  • 로컬 Docker 환경에서 다중 컨테이너 애플리케이션 테스트

다음 자습서에서는 ACR에 컨테이너 이미지를 저장하는 방법을 알아봅니다.

Azure Container Registry

Azure 개발자 명령줄 인터페이스 (CLI)

이 자습서에서는 azd를 사용하여 샘플 애플리케이션을 복제했습니다. 구체적으로 다음 작업 방법을 알아보았습니다.

  • GitHub 샘플 azd 템플릿을 복제합니다.
  • 샘플 애플리케이션 원본에서 컨테이너 이미지가 사용되는 위치를 확인합니다.

다음 자습서에서는 복제한 azd 템플릿을 사용하여 클러스터를 만드는 방법을 알아봅니다.