[실습-중급02]Working with Cloud Build
두번째 실습은 Cloud Build
와 빌드 구성 파일
또는 Dockerfile
을 사용해서 Docker 컨테이너 이미지
를 빌드를 해보고 Container Registry
에 업로드 해보겠습니다.
아래 4개의 Task를 해결하면서 간접적으로 경험해 봅시다.
Objectives(목표)
- Use Cloud Build to build and push containers
- Use Container Registry to store and deploy containers
Task 1. 필요한 API 확인하기
이 과제에서는 Google Cloud 프로젝트에서 필요한 API가 활성화되어 있는지 확인합니다.
-
Navigation menu > APIs & Services > Enable APIs and Services 클릭 후 아래 설정을 진행
-
Cloud Build
검색 후Enable
설정 -
Container Registry
검색 후Enable
설정
-
설정 모습
Task 2. DockerFile과 Cloud Build를 이용한 컨테이너 빌드하기
이 태스크에서는 DockerFile을 생성하고 이를 Cloud Build의 빌드 구성 스크립트로 사용하여 컨테이너를 빌드합니다. 또한, 간단한 셸 스크립트(quickstart.sh
)를 생성하여 컨테이너 내의 애플리케이션을 대표합니다.
1. quickstart.sh(실행파일), dockerfile 생성
-
Cloud Shell에서
nano quickstart.sh
명령어를 실행하여 nano text editor로 접근 및quickstart.sh
파일을 생성합니다. -
이후 editor에서 다음의 내용을 추가합니다.
#!/bin/sh echo "Hello, world! The time is $(date)."
-
다시 Cloud Shell로 돌아와서 이번엔
nano Dockerfile
로 nano text editor로 접근 및Dockerfile
을 생성합니다. -
마찬가지로 editor에서 다음의 내용을 추가합니다.
- alpine : use Alpine Linux base image.
- COPY quickstart.sh / : 이미지의 디렉토리 ‘/’ 에
quickstart.sh
스크립트 복제 - CMD [“/quickstart.sh”] : 컨테이너가 생성 및 실행될 때
quickstart.sh
실행되게 설정
FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"]
-
chmod +x quickstart.sh
명령어를 실행하여quickstart.sh
스크립트를 실행 가능하게 만듭니다.
2. docker 컨테이너 이미지 생성
-
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/quickstart-image .
명령어를 실행하여 Docker 컨테이너 이미지를 Cloud Build에서 빌드합니다.- 뒤에 ‘.’ 의 경우 소스 코드가 빌드 시 필요 파일(dockerfile 포함)들이 현재 작업 디렉토리에 있음을 지정합니다.
- 즉, 위 명령은 현재 디렉토리에 있는 Dockerfile을 사용하여
quickstart-image
이름으로 Docker 이미지를 빌드하고, 빌드된 이미지를gcr.io/${GOOGLE_CLOUD_PROJECT}/quickstart-image
의 태그로 Google Cloud Registry에 업로드하는 작업을 수행합니다.
도커 이미지 생성후 모습(Navigation menu > Container Registry > Images)
Task 3. 빌드 구성 파일과 Cloud Build를 이용한 컨테이너 빌드하기
Cloud Build는 커스텀 빌드 구성 파일도 지원합니다. 이 과제에서는 커스텀 YAML 형식의 빌드 파일을 Cloud Build와 함께 사용하여 기존 Docker 컨테이너를 통합합니다.
1. 실습 파일 다운로드
- Cloud Shell에서
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
명령어를 실행하여 레포지토리를 복제합니다.- 해당 실습 파일에는 우리가 Task1,2에서 만든 dockerfile과 quickstart.sh 복제본이 존재하며,
- 추가로 실습할 cloudbuild.yaml(커스텀 빌드 구성 파일)이 있습니다.
-
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
명령어를 실행하여 작업 디렉토리에 대한 소프트 링크를 생성합니다. -
cd ~/ak8s/Cloud_Build/a
명령어를 실행하여 이번 실습에 필요한 샘플 파일이 있는 디렉토리로 이동합니다. -
cat cloudbuild.yaml
로 내용을 보면 아래와 같습니다.steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ] images: - 'gcr.io/$PROJECT_ID/quickstart-image'
- 이 파일은 Cloud Build가 Docker를 사용하여 현재 로컬 디렉토리의 Dockerfile 사양을 사용하여 이미지를 빌드하고 gcr.io/$PROJECT_ID/quickstart-image로 태그를 지정하도록 지시합니다.
- ($PROJECT_ID)는 Cloud Build에서 프로젝트로 자동으로 채워지는 대체 변수입니다. 연결된 프로젝트의 ID 이미지를 Container Registry로 푸시합니다.
2. 빌드
-
gcloud builds submit --config cloudbuild.yaml .
명령어를 실행하여cloudbuild.yaml
을 빌드 구성 파일로 사용하여 Cloud Build를 시작합니다.
생성된 도커 이미지 모습
Cloud Build 모습
Task 4. 빌드 구성 파일과 Cloud Build를 이용한 컨테이너 빌드 및 테스트하기
사용자 지정 빌드 구성 파일(yaml)의 진정한 힘은 단순히 컨테이너를 빌드하는 것 외에도 다른 작업을 병렬 또는 순서대로 수행할 수 있는 기능입니다. 새로 빌드된 컨테이너에서 테스트를 실행하고 다양한 대상으로 푸시하고 심지어 Kubernetes Engine에 배포할 수도 있습니다.
이 실습에서는 빌드한 컨테이너를 테스트하고 그 결과를 호출 환경에 보고하는 빌드 구성 파일과 같은 간단한 예를 살펴보겠습니다.
- Cloud Shell에서
cd ~/ak8s/Cloud_Build/b
명령어를 실행하여 이번 실습에 필요한 샘플 파일이 있는 디렉토리로 이동합니다.- Task 3과 달리 이번엔 /b 경로이며 cloudbuild.yaml 파일이 서로 다름을 알고 넘어갑시다.
-
cat cloudbuild.yaml
명령어를 실행하여cloudbuild.yaml
파일의 내용을 확인합니다.steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ] - name: 'gcr.io/$PROJECT_ID/quickstart-image' args: ['fail'] images: - 'gcr.io/$PROJECT_ID/quickstart-image
- 두번째 name 부분은 이전 단계(첫번째 name)에서 빌드한 Docker 이미지를 실행하는 단계입니다.
- 물론, [‘fail’] 인수가 전달될 때 테스트 실패를 시뮬레이트하도록 quickstart.sh 스크립트가 수정되었습니다.
-
gcloud builds submit --config cloudbuild.yaml .
명령어를 실행하여cloudbuild.yaml
을 빌드 구성 파일로 사용하여 Cloud Build를 시작합니다.Finished Step #1 ERROR ERROR: build step 1 "gcr.io/ivil-charmer-227922klabs-gcp-49ab2930eea05/quickstart-image" failed: exit status 127 --------------------------------------------------------------------------------------------------------- ERROR: (gcloud.builds.submit) build f3e94c28-fba4-4012-a419-48e90fca7491 completed with status "FAILURE"
- 일부러 발생시킨 ‘fail’ 에러를 볼 수 있습니다.
아래는 에러의 모습입니다.
에러 History 확인을 해보면, 에러가 어느 액션에서 발생했는지도 찾을수 있습니다.
마무리
생략
댓글남기기