빌드팩으로 컨테이너 이미지를 빌드하는 방법은 두 가지입니다.
pack
CLI를 사용하여 로컬에서 빌드하여 함수를 로컬에서 테스트하고 배포 전에 신속하게 변경사항의 프로토타입을 제작합니다.- Cloud Build를 사용하여 원격으로 빌드합니다. Cloud Build를 사용해서 빌드하는 방식은 리소스 집약적인 빌드 프로세스를 포함하는 함수에 유용하고 소프트웨어 공급망 보호에도 도움이 됩니다.
함수 빌드를 위한 프로젝트 구성
빌드팩을 사용해서 함수를 빌드하려면 함수 프레임워크 라이브러리를 사용합니다.
GOOGLE_FUNCTION_TARGET
환경 변수를 진입점으로 사용하는 함수 이름으로 설정해야 합니다. Cloud Functions를 사용하여 환경 변수를 사용하는 방법에 대한 자세한 내용은 Cloud Functions 서비스 구성을 참조하세요.
로컬 빌드
pack
CLI를 사용하여 컨테이너 이미지에 함수를 로컬로 빌드합니다.
시작하기 전에
- Docker Community Edition(CE)을 워크스테이션에 설치합니다. Docker는
pack
에서 OCI 이미지 빌더로 사용됩니다. - Pack CLI를 설치합니다.
- Git 소스 제어 도구를 설치하여 GitHub에서 샘플 애플리케이션을 가져옵니다.
로컬에서 함수 빌드
pack build
명령어를 사용하고 기본 빌더 --builder=gcr.io/buildpacks/builder
를 지정하여 컨테이너 이미지를 로컬에서 빌드합니다.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
IMAGE_NAME
을 컨테이너 이미지 이름으로 바꿉니다.
빌드 및 실행 이미지를 확장하여 컨테이너 이미지를 맞춤설정할 수도 있습니다.
로컬에서 샘플 함수 빌드
다음 예시는 로컬에서 샘플을 빌드하는 방법을 보여줍니다.
- 샘플 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 애플리케이션 샘플 코드가 포함된 디렉터리로 변경합니다.
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
pack
을 사용하여 샘플 함수를 빌드합니다.Go
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go
Java
pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn
Node.js
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node
Python
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python
Ruby
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
docker
를 사용하여 이미지를 실행합니다.Go
docker run -p8080:8080 sample-functions-framework-go
Java
docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn
Node.js
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node
Python
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python
Ruby
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
- localhost:8080으로 이동하여 실행 중인 함수로 이동합니다.
원격 빌드
Cloud Build를 사용하여 각 이미지를 저장하고 배포하는 컨테이너 저장소로서 컨테이너 이미지 및 Artifact Registry에 함수를 빌드할 수 있습니다.
시작하기 전에
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
API Cloud Build and Artifact Registry 사용 설정
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
API Cloud Build and Artifact Registry 사용 설정
- Google Cloud CLI를 설치합니다.
-
gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.
gcloud init
- Google Cloud 프로젝트에 컨테이너 이미지 저장소에 대한 액세스 권한이 있는지 확인합니다.
Artifact Registry의 Docker 저장소에 대한 액세스를 구성하려면 다음 안내를 따르세요.
- Google Cloud 프로젝트와 동일한 위치에 새 Docker 저장소를 만듭니다.
gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
다음과 같이 바꿉니다.REPO_NAME
을 Docker 저장소에 선택한 이름으로 바꿉니다.REGION
을 Google Cloud 프로젝트 위치 또는 그와 가장 가까운 위치로 바꿉니다.DESCRIPTION
을 선택한 설명으로 바꿉니다.
예를 들어 'Docker 저장소' 설명과 함께
us-west2
에docker
저장소를 만들려면 다음 명령어를 실행합니다.gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- 저장소가 만들어졌는지 확인합니다.
gcloud artifacts repositories list
목록에 Docker 저장소에 대해 선택한 이름이 표시됩니다.
- Google Cloud 프로젝트와 동일한 위치에 새 Docker 저장소를 만듭니다.
원격으로 함수 빌드
gcloud builds submit
명령어를 사용하여 컨테이너 이미지를 빌드하고 저장소에 업로드합니다.
명령어 자체에서 컨테이너 이미지를 지정하거나 구성 파일을 사용하는 방식을 선택할 수 있습니다.
명령어로 빌드
구성 파일 없이 빌드하려면 image
플래그를 지정합니다.
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
다음과 같이 바꿉니다.
LOCATION
을 컨테이너 저장소의 리전 이름으로 바꿉니다. 예를 들면us-west2
입니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.REPO_NAME
을 Docker 저장소의 이름으로 바꿉니다.IMAGE_NAME
를 컨테이너 이미지 이름으로 바꿉니다.
예를 들면 다음과 같습니다.
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
구성 파일로 빌드
구성 파일을 사용하여 이미지 저장소 구성 세부정보를 정의해서 빌드 명령어를 간소화할 수 있습니다. 구성 파일에는 YAML 파일 형식이 사용되며 pack
CLI를 사용하는 빌드 단계가 포함되어야 합니다.
컨테이너 이미지 저장소의 URI가 포함된
cloudbuild.yaml
이라는 YAML 파일을 만듭니다.options: logging: CLOUD_LOGGING_ONLY pool: {} projectId: PROJECT_ID steps: - name: gcr.io/k8s-skaffold/pack entrypoint: pack args: - build - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME - --builder - gcr.io/buildpacks/builder:latest - --network - cloudbuild
다음과 같이 바꿉니다.
LOCATION
을 컨테이너 저장소의 리전 이름으로 바꿉니다.us-west2
예시PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.REPO_NAME
을 Docker 저장소의 이름으로 바꿉니다.IMAGE_NAME
를 컨테이너 이미지 이름으로 바꿉니다.
애플리케이션을 빌드합니다.
cloudbuild.yaml
이라는 구성 파일을 만들었으면 다음 명령어를 실행할 수 있습니다.gcloud builds submit .
예시: 원격으로 샘플 함수 빌드
다음 예시는 샘플을 원격으로 빌드한 후 Artifact Registry에서 컨테이너 이미지가 저장소에 푸시되었는지 확인하는 방법을 보여줍니다.
- 샘플 저장소를 로컬 머신에 클론합니다.
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- 애플리케이션 샘플 코드가 포함된 디렉터리로 변경합니다.
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
gcloud
를 사용하여 애플리케이션 소스 코드를 Cloud Build에 제출합니다.Go
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go
Java
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle
Node.js
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node
Python
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python
Ruby
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby
다음과 같이 바꿉니다.
LOCATION
을 컨테이너 저장소의 리전 이름으로 바꿉니다. 예를 들면us-west2-docker.pkg.dev
입니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.REPO_NAME
을 Docker 저장소의 이름으로 바꿉니다.
-
샘플 함수가 성공적으로
REPO_NAME
에 게시되었는지 확인합니다.gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
다음과 같이 바꿉니다.
LOCATION
을 컨테이너 저장소의 리전 이름으로 바꿉니다. 예를 들면us-west2
입니다.PROJECT_ID
를 Google Cloud 프로젝트의 ID로 바꿉니다.REPO_NAME
을 Docker 저장소의 이름으로 바꿉니다.
다음 단계
- Cloud Run에 함수 이미지 배포
- 환경 변수 설정
- 빌드 이미지 구성
- 캐시 이미지로 빌드 속도 향상