메모
Spring Boot 애플리케이션의 경우 Azure Container Apps 사용합니다. 그러나 여전히 Azure Kubernetes Service를 대상으로 사용할 수 있습니다. 자세한 내용은 Java 애플리케이션적합한 Azure 서비스 선택을 참조하세요.
이 자습서에서는 Kubernetes 및 Docker를 사용하여 spring Boot 애플리케이션을 개발하고 배포하여 Microsoft Azure 방법을 보여줍니다. 더 구체적으로는 애플리케이션 개발에 Spring Boot 사용하고, 컨테이너 배포에 Kubernetes , AKS(Azure Kubernetes Service) 사용하여 애플리케이션을 호스트합니다.
Kubernetes 및 Docker 개발자가 컨테이너에서 실행되는 애플리케이션의 배포, 크기 조정 및 관리를 자동화하는 데 도움이 되는 오픈 소스 솔루션입니다.
필수 구성 요소
- Azure 구독; 아직 Azure 구독이 없는 경우 MSDN 구독자 혜택을 활성화하거나 무료 Azure 계정에 등록합니다.
- Azure Command-Line 인터페이스 (CLI).
- 지원되는 JDK(Java Development Kit)입니다. Azure에서 개발할 때 사용할 수 있는 JDK에 대한 자세한 내용은 Azure 및 Azure Stack
Java 지원을 참조하세요. - Apache의 Maven 빌드 도구(버전 3).
- Git 클라이언트입니다.
- Docker 클라이언트입니다.
- ACR Docker 자격 증명 도우미.
메모
이 자습서의 가상화 요구 사항으로 인해 가상 머신에서 이 문서의 단계를 따를 수 없습니다. 가상화 기능을 사용하도록 설정된 물리적 컴퓨터를 사용해야 합니다.
Docker 시작 웹앱에서 Spring Boot 만들기
다음 단계에서는 Spring Boot 웹 애플리케이션을 빌드하고 로컬로 테스트하는 단계를 안내합니다.
명령 프롬프트를 열고 애플리케이션을 저장할 로컬 디렉터리를 만들고 해당 디렉터리로 변경합니다. 예를 들면 다음과 같습니다.
mkdir C:\SpringBoot cd C:\SpringBoot--또는--
mkdir /users/$USER/SpringBoot cd /users/$USER/SpringBootDocker 시작 시 Spring Boot 샘플 프로젝트를 디렉터리에 복제합니다.
git clone https://github.com/spring-guides/gs-spring-boot-docker.git디렉터리를 완료된 프로젝트로 변경합니다.
cd gs-spring-boot-docker cd completeMaven을 사용하여 샘플 앱을 빌드하고 실행합니다.
mvn package spring-boot:run다음
http://localhost:8080명령을 사용하거나curl으로 이동하여 웹앱을 테스트합니다.curl http://localhost:8080다음 메시지가 표시됩니다. Hello Docker World
Azure CLI를 사용하여 Azure Container Registry 만들기
명령 프롬프트를 엽니다.
Azure 계정 로그인:
az loginAzure 구독을 선택합니다.
az account set -s <YourSubscriptionID>이 자습서에서 사용되는 Azure 리소스에 대한 리소스 그룹을 만듭니다.
az group create --name=wingtiptoys-kubernetes --location=eastus리소스 그룹에 프라이빗 Azure 컨테이너 레지스트리를 만듭니다. 이 자습서에서는 이후 단계에서 샘플 앱을 Docker 이미지로 이 레지스트리에 푸시합니다.
wingtiptoysregistry레지스트리의 고유한 이름으로 대체합니다.az acr create --resource-group wingtiptoys-kubernetes --location eastus \ --name wingtiptoysregistry --sku Basic
Jib를 통해 컨테이너 레지스트리에 앱 푸시
Azure CLI에서 Azure Container Registry에 로그인하세요.
# set the default name for Azure Container Registry, otherwise you need to specify the name in "az acr login" az config set defaults.acr=wingtiptoysregistry az acr loginVisual Studio Code 같은 텍스트 편집기를 사용하여 pom.xml 파일을 엽니다.
code pom.xml<properties>pom.xml 파일의 컬렉션을 Azure Container Registry의 레지스트리 이름과 최신 버전의jib-maven-plugin레지스트리로 업데이트합니다.<properties> <!-- Note: If your ACR name contains upper case characters, be sure to convert them to lower case characters. --> <docker.image.prefix>wingtiptoysregistry.azurecr.io</docker.image.prefix> <jib-maven-plugin.version>2.5.2</jib-maven-plugin.version> <java.version>1.8</java.version> </properties>다음 예제와 같이
<plugins>요소에 대한 항목이 포함되도록<plugin>파일의jib-maven-plugin컬렉션을 업데이트합니다. AZURE 공식적으로 지원되는 JDK를 포함하는 MICROSOFT MCR(Container Registry)mcr.microsoft.com/openjdk/jdk:11-ubuntu의 기본 이미지를 사용합니다. 공식적으로 지원되는 JDK가 있는 다른 MCR 기본 이미지는 OpenJDK의 Microsoft Build 설치를 참조하세요.<plugin> <artifactId>jib-maven-plugin</artifactId> <groupId>com.google.cloud.tools</groupId> <version>${jib-maven-plugin.version}</version> <configuration> <from> <image>mcr.microsoft.com/openjdk/jdk:11-ubuntu</image> </from> <to> <image>${docker.image.prefix}/gs-spring-boot-docker</image> </to> </configuration> </plugin>Spring Boot 애플리케이션에 대해 완료된 프로젝트 디렉터리로 이동하고 다음 명령을 실행하여 이미지를 빌드하고 이미지를 레지스트리에 푸시합니다.
az acr login && mvn compile jib:build
메모
보안상의 이유로 사용하여 az acr login 만든 자격 증명은 1시간 동안 유효합니다. 오류가 표시 401 Unauthorized 되면 명령을 다시 실행 az acr login --name <your registry name> 하여 다시 인증합니다.
Read timed out 오류가 표시되면 mvn -Djib.httpTimeout=7200000 jib:dockerBuild로 시간 제한을 늘려 보거나, 무제한 시간 제한을 위해 -Djib.httpTimeout=0를 사용하세요.
Azure CLI 사용하여 AKS에서 Kubernetes 클러스터 만들기
Azure Kubernetes Service에서 Kubernetes 클러스터를 만듭니다. 다음 명령은
wingtiptoysregistry리소스 그룹에 클러스터 이름을wingtiptoys-kubernetes로, Azure Container Registry(ACR)wingtiptoys-akscluster를 연결하고, DNS 접두사를wingtiptoys-kubernetes로 하여 Kubernetes 클러스터를 만듭니다.az aks create --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster \ --attach-acr wingtiptoysregistry \ --dns-name-prefix=wingtiptoys-kubernetes --generate-ssh-keys이 명령을 완료하는 데 다소 시간이 걸릴 수 있습니다.
Azure CLI를 사용하여
kubectl설치합니다. Linux 사용자는 Kubernetes CLI를/usr/local/bin에 설치하므로 이 명령 앞에sudo를 붙여야 할 수 있습니다.az aks install-cliKubernetes 웹 인터페이스에서 클러스터를 관리하고
kubectl수 있도록 클러스터 구성 정보를 다운로드합니다.az aks get-credentials --resource-group=wingtiptoys-kubernetes --name=wingtiptoys-akscluster
Kubernetes 클러스터에 이미지 배포
이 자습서에서는 앱을 사용하여 kubectl배포한 다음 Kubernetes 웹 인터페이스를 통해 배포를 탐색할 수 있습니다.
kubectl을 사용하여 배포
명령 프롬프트를 엽니다.
kubectl run명령을 사용하여 Kubernetes 클러스터에서 컨테이너를 실행합니다. Kubernetes에서 앱의 서비스 이름과 전체 이미지 이름을 지정합니다. 예를 들어:kubectl run gs-spring-boot-docker --image=wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest이 명령에서 다음을 수행합니다.
run명령 바로 뒤에 컨테이너 이름gs-spring-boot-docker를 지정합니다.매개 변수는
--image결합된 로그인 서버 및 이미지 이름을 .로wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latest지정합니다.
kubectl expose명령을 사용하여 Kubernetes 클러스터를 외부에서 노출합니다. 서비스 이름, 앱에 액세스하는 데 사용되는 공용 TCP 포트 및 앱이 수신 대기하는 내부 대상 포트를 지정합니다. 예를 들어:kubectl expose pod gs-spring-boot-docker --type=LoadBalancer --port=80 --target-port=8080이 명령에서 다음을 수행합니다.
expose pod명령 바로 뒤에 컨테이너 이름gs-spring-boot-docker를 지정합니다.--type매개 변수는 클러스터가 부하 분산 장치를 사용한다고 지정합니다.--port매개 변수는 공용 TCP 포트 80을 지정합니다. 이 포트에서 앱에 액세스합니다.--target-port매개 변수는 8080의 내부 TCP 포트를 지정합니다. 부하 분산 장치는 이 포트에서 앱으로 요청을 전달합니다.
클러스터에 앱을 배포한 후 외부 IP 주소를 쿼리하고 웹 브라우저에서 엽니다.
kubectl get services -o=jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}'
Kubernetes 리소스 뷰를 사용하여 배포
리소스 뷰(네임스페이스, 워크로드, 서비스 및 수신, 스토리지 또는 구성)에서 추가를 선택합니다.
다음 YAML에 붙여넣으세요.
apiVersion: apps/v1 kind: Deployment metadata: name: gs-spring-boot-docker spec: replicas: 1 selector: matchLabels: app: gs-spring-boot-docker template: metadata: labels: app: gs-spring-boot-docker spec: containers: - name: gs-spring-boot-docker image: wingtiptoysregistry.azurecr.io/gs-spring-boot-docker:latestYAML 편집기 아래쪽에 있는 추가을 선택하여 애플리케이션을 배포합니다.
Kubernetes 리소스를 보기, 리소스를 추가합니다.
이전 단계와 마찬가지로 배포
Deployment한 후 YAML 편집기의 맨 아래에 있는 추가 를 선택하여 다음 YAML을 사용하여 배포Service합니다.apiVersion: v1 kind: Service metadata: name: gs-spring-boot-docker spec: type: LoadBalancer ports: - port: 80 targetPort: 8080 selector: app: gs-spring-boot-dockerYAML 파일을 추가하면 리소스 뷰어에 Spring Boot 애플리케이션이 표시됩니다. 외부 서비스에는 연결된 외부 IP 주소가 포함되어 있으므로 브라우저에서 애플리케이션을 쉽게 볼 수 있습니다.
외부 IP을 선택합니다. Azure 실행 중인 Spring Boot 애플리케이션이 표시됩니다.
다음 단계
Spring 및 Azure에 대해 자세히 알아보려면 Spring on Azure 설명서 센터를 계속 진행하세요.
참고 항목
Azure에서 Spring Boot를 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.
- Azure App Service Linux에 Spring Boot 애플리케이션 배포
Java에서 Azure 사용에 대한 자세한 정보는 Java 개발자용 Azure 및 Azure DevOps와 Java 작업하기를 참조하세요.
Visual Studio Code를 사용하여 Kubernetes에 Java 애플리케이션을 배포하는 방법에 대한 자세한 내용은 visual Studio Code Java 자습서
Docker의 Spring Boot 샘플 프로젝트에 대한 자세한 내용은 Spring Boot on Docker 시작하기을 참조하세요.
다음 링크는 Spring Boot 애플리케이션을 만드는 방법에 대한 자세한 정보를 제공합니다.
- 간단한 Spring Boot 애플리케이션을 만드는 방법에 대한 자세한 내용은 https://start.spring.io/Spring Initializr를 참조하세요.
다음 링크는 Azure Kubernetes를 사용하는 방법에 대한 자세한 정보를 제공합니다.
Kubernetes 명령줄 인터페이스 사용에 대한 자세한 내용은 다음의 kubectl 사용자 가이드를 참조하세요 https://kubernetes.io/docs/reference/kubectl/.
Kubernetes 웹 사이트에는 개인 레지스트리의 이미지 사용에 대해 설명하는 몇 가지 문서가 있습니다.
Azure 사용자 지정 Docker 이미지를 사용하는 방법에 대한 자세한 예제는 Linux에서 Azure Web App에 사용자 지정 Docker 이미지 사용을 참조하세요.
Azure Dev Spaces를 사용하여 AKS(Azure Kubernetes Service) 컨테이너를 반복적으로 실행하고 디버깅하는 방법에 대한 자세한 내용은 Java 사용하여 Azure Dev Spaces 시작을 참조하세요.