Jib로 자바 컨테이너 빌드

Jib는 Dockerfile을 사용하지 않거나 Docker를 설치할 필요 없이 컨테이너를 빌드합니다. Maven 또는 Gradle용 Jib 플러그인에서 Jib를 사용하거나 Jib 자바 라이브러리를 사용할 수 있습니다.

Jib는 무엇을 하나요?

Jib는 애플리케이션을 컨테이너 이미지로 패키징하는 모든 단계를 처리합니다. Dockerfile을 만들거나 Docker를 설치하기 위한 권장사항을 알 필요가 없습니다.

Docker 빌드 흐름:

Docker를 사용하여 프로젝트에서 Container Registry까지의 단계를 보여주는 다이어그램

Jib 빌드 흐름:

Jib를 사용하여 프로젝트에서 Container Registry까지의 중간 단계를 보여주는 다이어그램

Jib는 애플리케이션을 종속 항목, 리소스, 클래스 등 별개의 레이어로 구성하고 Docker 이미지 레이어 캐싱을 활용하여 변경사항만 다시 빌드함으로써 빌드를 빠르게 유지합니다. Jib 레이어 구성과 작은 기본 이미지는 전체 이미지 크기를 작게 유지하여 성능과 휴대성을 향상시킵니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  6. Enable the Container Registry API.

    Enable the API

  7. 자바가 없으면 다운로드하여 설치하고 구성합니다.
  8. Maven 3.5 이상을 설치합니다.
  9. Google Cloud CLI를 설치하고 초기화합니다.
  10. Google Cloud CLI를 Docker 사용자 인증 정보 도우미로 사용하여 Container Registry에 인증합니다.
    gcloud auth configure-docker
    원하는 경우 다른 인증 방법은 Jib 구성 문서를 참조하세요.

Jib를 사용하여 빌드

  1. 기존 프로젝트를 선택하고 소스 폴더로 이동하거나 다음 명령어를 사용하여 샘플을 클론합니다.

         git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
         cd java-docs-samples/run/helloworld

  2. pom.xml에 플러그인을 추가합니다.

    <plugin>
      <groupId>com.google.cloud.tools</groupId>
      <artifactId>jib-maven-plugin</artifactId>
      <version>2.8.0</version>
      <configuration>
        <to>
          <image>gcr.io/PROJECT/IMAGE</image>
        </to>
      </configuration>
    </plugin>
    

    다음과 같이 바꿉니다.

    • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
    • IMAGE를 이미지 이름으로 바꿉니다.

    pom.xml을 수정하지 않으려면 다음 명령어를 사용합니다.

        mvn compile com.google.cloud.tools:jib-maven-plugin:2.8.0:build \
            -Dimage=gcr.io/PROJECT/IMAGE
  3. 이미지를 빌드하고 Container Registry에 푸시합니다.

    mvn compile jib:build

    Container Registry에서 컨테이너를 보면 성공을 확인할 수 있습니다.

    원하는 경우 Docker를 설치하면 로컬 Docker 설치를 빌드하여 이미지를 검사하거나 다른 로컬 컨테이너로 실행할 수 있습니다.

    mvn compile jib:dockerBuild

추가 맞춤설정

환경 변수를 추가하고 기본 이미지를 선택하는 것과 같이 Dockerfile과 유사한 방식으로 Jib 빌드를 맞춤설정할 수 있습니다.

환경 변수 추가

다음과 같이 Dockerfile의 ENV 명령어와 유사한 환경 변수를 빌드에 추가할 수 있습니다.

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>2.8.0</version>
  <configuration>
    <to>
      <image>gcr.io/PROJECT/IMAGE</image>
    </to>
    <container>
      <environment>
        <ENV_VAR>VALUE</ENV_VAR>
      </environment>
    </container>
  </configuration>
</plugin>

다음과 같이 바꿉니다.

  • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
  • IMAGE를 이미지 이름으로 바꿉니다.
  • NAME 포함 ENV_VAR
  • VALUE를 원하는 값으로 바꿉니다.

이제 애플리케이션이 Hello <var>VALUE</var>!로 응답합니다.

기본 이미지 변경

기본 이미지는 Dockerfile의 FROM 명령어와 동일합니다. from.image 필드를 변경하여 기본 이미지를 업데이트할 수 있습니다.

디버깅할 수 있도록 셸을 포함하려면 기본 이미지를 alpine:3 또는 openjdk:VERSION으로 설정합니다(자바가 필요한 경우).

시스템 패키지를 추가하려면 이 패키지가 설치된 기본 이미지를 만들어야 합니다. 자세한 내용은 컨테이너 빌드를 참조하세요.

  <plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>2.8.0</version>
    <configuration>
      <from>
        <image>gcr.io/PROJECT/BASE_IMAGE</image>
      </from>
      <to>
        <image>gcr.io/PROJECT/IMAGE_NAME</image>
      </to>
    </configuration>
  </plugin>

from.image 필드를 openjdk:8-alpine과 같은 다른 자바 기본 이미지로 업데이트해보세요.

기타 자바 요소 맞춤설정

Jib은 애플리케이션을 실행하는 데 필요할 수 있는 자바 런타임 구성을 지원합니다. 맞춤설정에 대한 자세한 내용은 확장 사용을 참조하십시오.

코드 제공

gcloud 기본값 설정

Cloud Run 서비스의 기본값으로 gcloud를 구성하려면 다음 안내를 따르세요.

  1. 기본 프로젝트를 설정합니다.

    gcloud config set project PROJECT_ID

    PROJECT_ID를 이 튜토리얼용으로 만든 프로젝트 이름으로 바꿉니다.

  2. 선택한 리전에 맞게 gcloud를 구성합니다.

    gcloud config set run/region REGION

    REGION을 지원되는 Cloud Run 리전 중 원하는 리전으로 바꿉니다.

Cloud Run 위치

Cloud Run은 리전을 기반으로 합니다. 즉, Cloud Run 서비스를 실행하는 인프라가 특정 리전에 위치해 있으며 해당 리전 내의 모든 영역에서 중복으로 사용할 수 있도록 Google이 관리합니다.

Cloud Run 서비스를 실행하는 리전을 선택하는 데 있어 중요한 기준은 지연 시간, 가용성 또는 내구성 요구사항입니다. 일반적으로 사용자와 가장 가까운 리전을 선택할 수 있지만 Cloud Run 서비스에서 사용하는 다른 Google Cloud 제품 위치도 고려해야 합니다. 여러 위치에서 Google Cloud 제품을 함께 사용하면 서비스 지연 시간과 비용에 영향을 미칠 수 있습니다.

Cloud Run은 다음 리전에서 사용할 수 있습니다.

등급 1 가격 적용

  • asia-east1(타이완)
  • asia-northeast1(도쿄)
  • asia-northeast2(오사카)
  • europe-north1(핀란드) 리프 아이콘 낮은 CO2
  • europe-southwest1(마드리드) 리프 아이콘 낮은 CO2
  • europe-west1(벨기에) 리프 아이콘 낮은 CO2
  • europe-west4(네덜란드)
  • europe-west8(밀라노)
  • europe-west9(파리) 리프 아이콘 낮은 CO2
  • us-central1(아이오와) 리프 아이콘 낮은 CO2
  • us-east1(사우스캐롤라이나)
  • us-east4(북 버지니아)
  • us-east5(콜럼버스)
  • us-west1(오리건) 리프 아이콘 낮은 CO2

등급 2 가격 적용

  • asia-east2(홍콩)
  • asia-northeast3(대한민국 서울)
  • asia-southeast1(싱가포르)
  • asia-southeast2 (자카르타)
  • asia-south1(인도 뭄바이)
  • asia-south2(인도 델리)
  • australia-southeast1(시드니)
  • australia-southeast2(멜버른)
  • europe-central2(폴란드 바르샤바)
  • europe-west2(영국 런던)
  • europe-west3(독일 프랑크푸르트)
  • europe-west6(스위스 취리히) 리프 아이콘 낮은 CO2
  • northamerica-northeast1(몬트리올) 리프 아이콘 낮은 CO2
  • northamerica-northeast2(토론토) 리프 아이콘 낮은 CO2
  • southamerica-east1(브라질 상파울루) 리프 아이콘 낮은 CO2
  • southamerica-west1(칠레 산티아고)
  • us-west2(로스앤젤레스)
  • us-west3(솔트레이크시티)
  • us-west4(라스베이거스)

Cloud Run 서비스를 이미 만들었다면 Cloud Console의 Cloud Run 대시보드에서 리전을 확인할 수 있습니다.

Cloud Run에 배포

gcloud CLI를 사용하여 컨테이너를 Container Registry에서 Cloud Run 또는 Cloud Run for Anthos로 배포합니다.

다음 명령어를 사용하여 컨테이너 이미지를 배포합니다.

gcloud run deploy SERVICE-NAME \
    --image gcr.io/PROJECT/IMAGE \
    --platform managed

다음과 같이 바꿉니다.

  • SERVICE-NAME을 선택한 서비스 이름으로 바꿉니다.
  • PROJECT를 Google Cloud 프로젝트 ID로 바꿉니다.
  • IMAGE를 이미지 이름으로 바꿉니다.

컨테이너 이미지는 이전에 gcloud 설정에서 구성한 서비스, 리전(Cloud Run) 또는 클러스터(Cloud Run for Anthos)에 배포됩니다.

Cloud Run에 배포할 경우 인증되지 않은 호출을 허용하라는 메시지가 표시됩니다. 서비스에 즉시 액세스하려면 '인증되지 않은 호출 허용' 프롬프트에 y('예')로 응답합니다. 서비스가 비공개이고 요청에 인증이 포함되어야 하는 경우 "인증되지 않은 호출 허용"프롬프트에 n('아니요')로 응답합니다.

서비스가 공개이면 배포 성공 후 표시되는 URL을 사용하여 배포된 컨테이너에 방문합니다. 서비스가 비공개이면 다음 curl 명령어를 사용하여 서비스를 호출합니다.

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL

Cloud Run for Anthos에 배포하는 경우 배포된 서비스에 액세스를 참조하세요.

삭제

이 튜토리얼용으로 새 프로젝트를 만든 경우 이 프로젝트를 삭제합니다. 기존 프로젝트를 사용한 경우 이 가이드에 추가된 변경사항은 제외하고 보존하려면 가이드용으로 만든 리소스를 삭제합니다.

프로젝트 삭제

비용이 청구되지 않도록 하는 가장 쉬운 방법은 가이드에서 만든 프로젝트를 삭제하는 것입니다.

프로젝트를 삭제하려면 다음 안내를 따르세요.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

가이드 리소스 삭제

  1. 이 가이드에서 배포한 Cloud Run 서비스를 삭제합니다.

    gcloud run services delete SERVICE-NAME

    여기서 SERVICE-NAME은 선택한 서비스 이름입니다.

    Google Cloud Console에서 Cloud Run 서비스를 삭제할 수도 있습니다.

  2. 튜토리얼 설정 중에 추가한 gcloud 기본 리전 구성을 삭제합니다.

     gcloud config unset run/region
    
  3. 프로젝트 구성을 삭제합니다.

     gcloud config unset project
    

다음 단계

  • 컨테이너를 Cloud Run에 배포하려면 준수해야 하는 계약에 대한 자세한 내용은 컨테이너 계약을 참조하세요.
  • Cloud Build Trigger를 사용하여 Cloud Run 서비스의 빌드 및 배포를 자동화하려면 지속적 배포를 설정하세요.
  • Jib 사용 및 맞춤설정에 대한 자세한 내용은 Jib의 GitHub 저장소를 참조하세요.