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

7개 중 1단계인 이 자습서에서는 Kubernetes에서 사용할 수 있도록 다중 컨테이너 애플리케이션을 준비합니다. Docker Compose와 같은 기존 개발 도구를 사용하여 애플리케이션을 로컬로 빌드하고 테스트합니다. 다음 방법에 대해 설명합니다.

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

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

로컬 웹 브라우저에서 로컬로 열린 실행 중인 Azure Store Front 앱을 보여 주는 스크린샷

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

시작하기 전에

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

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

참고 항목

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


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

이 자습서에서 사용되는 애플리케이션 예제는 다음과 같은 Kubernetes 배포 및 서비스를 포함하는 기본 스토어 프런트 앱입니다.

Azure Store 샘플 아키텍처의 스크린샷.

  • 스토어 프런트: 고객이 제품을 보고 주문을 할 수 있는 웹 애플리케이션입니다.
  • 제품 서비스: 제품 정보를 표시합니다.
  • 주문 서비스: 주문을 합니다.
  • Rabbit MQ: 주문 큐에 대한 메시지 큐입니다.
  1. git을 사용하여 애플리케이션 예제를 개발 환경에 복제합니다.

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

    cd aks-store-demo
    

Docker Compose 파일 검토

이 자습서에서 만든 샘플 애플리케이션은 복제한 리포지토리의 docker-compose-quickstart YAML 파일을 사용합니다.

version: "3.7"
services:
  rabbitmq:
    image: rabbitmq:3.11.17-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
  orderservice:
    build: src/order-service
    container_name: 'orderservice'
    restart: always
    ports:
      - 3000:3000
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://orderservice: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
  productservice:
    build: src/product-service
    container_name: 'productservice'
    restart: always
    ports:
      - 3002:3002
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://productservice:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    networks:
      - backend_services
  storefront:
    build: src/store-front
    container_name: 'storefront'
    restart: always
    ports:
      - 8080:8080
    healthcheck:
      test: ["CMD", "wget", "-O", "/dev/null", "-q", "http://storefront:80/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    environment:
      - VUE_APP_PRODUCT_SERVICE_URL=http://productservice:3002/
      - VUE_APP_ORDER_SERVICE_URL=http://orderservice:3000/
    networks:
      - backend_services
    depends_on:
      - productservice
      - orderservice
networks:
  backend_services:
    driver: bridge

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

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

Docker

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

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

    docker images
    

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

    REPOSITORY                       TAG                          IMAGE ID
    aks-store-demo-productservice    latest                       2b66a7e91eca
    aks-store-demo-orderservice      latest                       54ad5de546f9
    aks-store-demo-storefront        latest                       d9e3ac46a225
    rabbitmq                         3.11.17-management-alpine    79a570297657
    ...
    
  3. docker ps 명령을 사용하여 실행 중인 컨테이너를 확인합니다.

    docker ps
    

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

    CONTAINER ID        IMAGE
    21574cb38c1f        aks-store-demo-productservice
    c30a5ed8d86a        aks-store-demo-orderservice
    d10e5244f237        aks-store-demo-storefront
    94e00b50b86a        rabbitmq:3.11.17-management-alpine
    

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

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

로컬 브라우저에서 열린 Azure Store Front 앱을 보여 주는 스크린샷

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

리소스 정리

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

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

    docker compose down
    

다음 단계

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

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

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