개요
빌드팩은 컨테이너 이미지를 빌드하는 또 다른 접근방식이며 소스 코드를 컨테이너 이미지로 변환하는 대체 접근방식을 제공합니다. 빌드팩은 빌더라고 부르는 이미지로 배포 및 실행됩니다. 각 빌더에는 하나 이상의 빌드팩이 있을 수 있습니다. 빌더는 소스 코드를 컨테이너 이미지로 변환합니다. 빌드팩은 Cloud Run에 배포하거나 로컬에서 Docker로 실행할 수 있는 컨테이너 이미지를 빌드하고 패키징하는 실제 작업을 수행합니다.
자체 빌드팩을 만들거나 여러 공급업체에서 제공하는 빌드팩을 사용할 수 있습니다. Google Cloud 빌드팩을 사용하면 개발자가 로컬에 Docker를 설치하거나 Dockerfile을 만들지 않고도 컨테이너화된 애플리케이션을 만들고 배포할 수 있습니다. 또한 소스 기반 배포 워크플로를 지원하기 위해 빌드팩이 Cloud Run에 기본 제공됩니다.
목표
이 실습에서 학습할 내용은 다음과 같습니다.
- 빌더와 함께 사용하여 소스 코드에서 컨테이너 이미지를 만드는 명령줄 도구인
pack
으로 애플리케이션을 빌드합니다.
- Google Cloud의 빌드팩 빌더를 사용하여 컨테이너 이미지를 빌드합니다.
- Docker를 사용하여 로컬로 컨테이너를 실행하고 테스트합니다.
- 컨테이너를 빌드하고 Cloud Run에 다시 배포합니다.
설정
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
-
실습 사용 가능 시간(예: 1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
-
준비가 되면 실습 시작을 클릭합니다.
-
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
-
Google Console 열기를 클릭합니다.
-
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
-
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
Google Cloud Shell 활성화하기
Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.
Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
-
Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.

-
계속을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
- 다음 명령어를 사용하여 사용 중인 계정 이름을 나열할 수 있습니다.
gcloud auth list
출력:
Credentialed accounts:
- @.com (active)
출력 예시:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 다음 명령어를 사용하여 프로젝트 ID를 나열할 수 있습니다.
gcloud config list project
출력:
[core]
project =
출력 예시:
[core]
project = qwiklabs-gcp-44776a13dea667a6
참고:
gcloud 전체 문서는 gcloud CLI 개요 가이드를 참조하세요.
작업 1. 환경 및 프로젝트 구성
이 작업에서는 환경 변수를 설정하고 Cloud Shell 환경을 구성합니다.
Cloud Shell 환경 구성
-
Cloud Shell에서 프로젝트 ID 및 리전 환경 변수를 설정하려면 다음 명령어를 실행합니다.
PROJECT_ID=$(gcloud config get-value project)
REGION={{{project_0.default_region|us-central1}}}
-
Cloud Shell에서 컴퓨팅 리전을 설정합니다.
gcloud config set compute/region $REGION
Google API 사용 설정
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
사용 설정된 Google API
작업 2. Docker로 애플리케이션 빌드 및 실행
이 작업에서는 pack
명령줄 도구와 Google Cloud 빌드팩 빌더를 사용하여 샘플 애플리케이션을 빌드합니다.
애플리케이션 개발
-
app
디렉터리를 만들고 해당 디렉터리로 변경합니다.
mkdir app && cd app
-
Cloud Storage에서 이 실습의 샘플 python
애플리케이션을 복사하고 보관 파일에서 콘텐츠를 추출합니다.
gcloud storage cp gs://cloud-training/CBL513/sample-apps/sample-py-app.zip . && unzip sample-py-app
-
샘플 애플리케이션 파일 및 소스 코드를 확인합니다.
ls sample-py-app
cat sample-py-app/main.py
Python 빌드팩은 애플리케이션의 기본 컨테이너 진입점을 생성하지 않으므로 Procfile을 사용하여 애플리케이션의 시작 명령어를 구성합니다.애플리케이션은 Python으로 작성되었으며 애플리케이션에 대한 요청에 응답하여 샘플 환영 메시지를 반환합니다.
컨테이너 빌드
-
샘플 애플리케이션 디렉터리로 변경합니다.
cd sample-py-app
-
컨테이너를 빌드하려면 pack
을 실행합니다.
pack build --builder=gcr.io/buildpacks/builder sample-py-app
부분 출력은 다음과 비슷합니다.
...
...
[exporter] Setting default process type 'web'
[exporter] Saving sample-py-app...
[exporter] *** Images (9f9f9a48fd46):
[exporter] sample-py-app
[exporter] Adding cache layer 'google.python.pip:pip'
[exporter] Adding cache layer 'google.python.pip:pipcache'
Successfully built image sample-py-app
참고: pack를 사용하면 컨테이너 이미지를 빌드하기 위해 Dockerfile을 작성하고 제공할 필요가 없습니다.
-
Cloud Shell 호스트에서 다운로드하고 빌드한 이미지를 보려면 다음을 실행합니다.
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/buildpacks/builder latest 514fb6f1bbfe 29 hours ago 804MB
gcr.io/buildpacks/gcp/run v1 22db1b5e48e3 29 hours ago 177MB
buildpacksio/lifecycle 0.16.0 67e021546a3f 43 years ago 30.5MB
sample-py-app latest 9f9f9a48fd46 43 years ago 571MB
-
PORT 환경 변수를 애플리케이션에 전달하고 호스트의 포트 8080을 컨테이너 포트에 바인딩하여 Docker에서 컨테이너를 로컬로 실행합니다.
docker run -it -e PORT=8080 -p 8080:8080 -d sample-py-app
애플리케이션 코드는 환경 변수에 제공된 포트(이 경우 포트 8080)에서 수신 대기합니다.
-
curl
명령어를 사용하여 컨테이너화된 애플리케이션을 테스트합니다.
curl http://localhost:8080/
다음과 같은 메시지가 응답으로 표시됩니다.
Welcome to this sample app, built with Buildpacks.
작업 3. Cloud Run에서 애플리케이션 빌드 및 실행
일반적으로 개발 및 배포 수명 주기의 다음 단계로 이전 작업에서 빌드한 컨테이너 이미지를 Artifact Registry에 푸시한 다음 Google Kubernetes Engine 또는 Cloud Run과 같은 컨테이너 기반 환경에 이미지를 배포해야 합니다.
이 작업에서는 샘플 애플리케이션 코드를 수정한 다음 Cloud Run을 사용하여 소스에서 직접 컨테이너화된 애플리케이션을 빌드하고 배포합니다.
애플리케이션 코드 수정
샘플 애플리케이션 코드를 수정하여 영어 텍스트를 스페인어로 번역하는 Google Translation API를 사용합니다.
-
원하는 편집기(예: vi 또는 nano)로 main.py
파일을 편집합니다. Cloud Shell 메뉴에서 편집기 열기를 클릭하여 파일을 편집할 수도 있습니다.
-
main.py
파일의 전체 콘텐츠를 아래 코드로 바꿉니다.
from flask import Flask, request
import google.auth
from google.cloud import translate
app = Flask(__name__)
_, PROJECT_ID = google.auth.default()
TRANSLATE = translate.TranslationServiceClient()
PARENT = 'projects/{}'.format(PROJECT_ID)
SOURCE, TARGET = ('en', 'English'), ('es', 'Spanish')
@app.route('/', methods=['GET', 'POST'])
def index():
# reset all variables
text = translated = None
if request.method == 'POST':
text = request.get_json().get('text').strip()
if text:
data = {
'contents': [text],
'parent': PARENT,
'target_language_code': TARGET[0],
}
# handle older call for backwards-compatibility
try:
rsp = TRANSLATE.translate_text(request=data)
except TypeError:
rsp = TRANSLATE.translate_text(**data)
translated = rsp.translations[0].translated_text
# create context
context = {
'trtext': translated
}
return context
if __name__ == "__main__":
# Dev only: run "python main.py" and open http://localhost:8080
import os
app.run(host="localhost", port=int(os.environ.get('PORT', 8080)), debug=True)
애플리케이션 코드는 Google Translate API를 사용하여 JSON 요청으로 전달된 텍스트를 영어에서 스페인어로 번역합니다.
컨테이너 빌드 및 배포
-
Cloud Run에 컨테이너를 빌드하고 배포하려면 다음 명령어를 실행합니다.
gcloud run deploy sample-py-app --source . --region=${REGION} --allow-unauthenticated
allow-unauthenticated 옵션을 사용하면 인증 없이 서비스에 액세스할 수 있습니다.
-
메시지가 표시되면 Y를 입력하여 컨테이너 이미지를 저장하기 위해 Artifact Registry에 생성된 기본 저장소를 수락합니다.
-
명령어가 완료되면 sample-py-app
이라는 이름의 Cloud Run 서비스가 생성됩니다.
명령어 출력은 다음과 비슷합니다.
Building using Buildpacks and deploying container to Cloud Run service [sample-py-app] in project [qwiklabs-gcp-00-0d56d42aca1a] region [asia-east1]
OK Building and deploying new service... Done.
OK Creating Container Repository...
OK Uploading sources...
OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/8bea2ded-4745-41f9-a82d-128e409daa20?project=34240880885].
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [sample-py-app] revision [sample-py-app-00001-nec] has been deployed and is serving 100 percent of traffic.
Service URL: https://sample-py-app-ulvp7xw3bq-de.a.run.app
Cloud Run 서비스 테스트
-
이전 단계에서 만든 Cloud Run 서비스의 환경 변수를 설정합니다.
SERVICE_URL=$(gcloud run services describe sample-py-app --region=${REGION} --format="value(status.url)"); echo $SERVICE_URL
-
서비스를 테스트하려면 curl
명령어를 실행합니다.
curl $SERVICE_URL -H 'Content-Type: application/json' -d '{"text" : "Welcome to this sample app, built with Google Cloud buildpacks."}'
서비스가 번역된 텍스트로 응답합니다.
{"trtext":"Bienvenido a esta aplicaci\u00f3n de muestra, creada con paquetes de compilaci\u00f3n de Google Cloud."}
내 진행 상황 확인하기를 클릭하여 목표를 확인합니다.
Cloud Run에 애플리케이션 배포
수고하셨습니다
이 실습에서는 pack
명령어와 Google Cloud의 빌드팩 빌더를 사용하여 샘플 Python 애플리케이션의 컨테이너 이미지를 빌드하는 애플리케이션을 빌드했습니다. 먼저 Docker를 사용하여 컨테이너를 로컬에서 실행하고 테스트한 다음 컨테이너를 다시 빌드하고 Cloud Run에 배포했습니다.
다음 단계/자세히 알아보기
자세한 내용은 다음 문서를 참조하세요.
GKE, Anthos, Container-Optimized OS와 같은 다양한 컨테이너 플랫폼을 위한 Google Cloud 빌드팩에 대해 알아봅니다.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.