GOAL
- 컨테이너란 무엇인지 학습
- 애플리케이션 배포 시 컨테이너를 사용할 경우 어떤 이점이 있는지 학습
- 어떤 식으로 구성되고 빌드되는지 학습
- 쿠버네티스와 같은 컨테이너 관리 솔루션이 어떤 기능을 제공하는지 학습
- 자체적으로 빌드한 컨테이너 관리 인프라에 비해 어떤 장점이 있는지 학습
- Cloud Build를 사용해 컨테이너를 만드는 방법과 Container Registry에 저장하는 방법 학습
GOAL
- 애플리케이션을 배포할 때 컨테이너를 사용하면 어떤 장점이 있을까?
컴퓨팅 성능 확보, 보안, 확장을 위해서는 컴퓨터를 더 추가해야 했음
애플리케이션 외의 다른 환경적인 부분을 고려할 필요가 없음
✨ 컨테이너 : 가볍고 독립적이며 리소스 효율이 높고 이식성을 갖춘 실행 가능한 패키지
- 동일한 컨테이너는 어디서든 동작할 수 있음
- 효율적인 개발
- 마이크로 서비스 패턴으로 구성된 앱을 쉽게 빌드 할 수 있음
- 애플리케이션의 구성요소 확장 및 업데이트를 가능하게 해줌
- 이미지 : 애플리케이션과 종속성이 정의됨
- 컨테이너 : 이미지의 인스턴스
✨ 컨테이너 이미지로 소프트웨어를 빌드하면 외부 환경을 고려하지 않아도 쉽게 패키지와 빌드가 가능
🐳 Container에서 애플리케이션을 생성하고 실행하게 해주는 오픈소스
- 단, 애플리케이션들의 orchestrate를 지원하지 않음
구성
구조
container manifest
파일을 이용하여 구성할 수 있음 Dockerfile
을 사용 예시
실제로 사용하는 것 보다 단순한 예제
FROM
public repository에서 가져와 base layer 생성 COPY
새로운 레이어 추가, build tool의 현재 디렉토리로부터 파일 복사RUN
make command로 애플리케이션을 빌드하고 세번째 레이어에 빌드 결과를 추가✨ 요즘의 애플리케이션 패키징은 multi-stage build process에 의존
- 하나의 컨테이너는 마지막 실행가능한 이미지이고 애플리케이션이 필요한 것들을 모두 포함하는 이미지를 분리
이미지로부터 새로운 컨테이너를 실행하면 컨테이너는 실시간으로 쓰기 가능한 레이어를 추가
✨ 제공된 Dockerfile과 Source Code를 활용하여 1 ) Cloud Build를 사용해 Docker 컨테이너 이미지를 빌드하고 2 ) 컨테이너를 Container Registry에 업로드 해보자.
Cloud Build API 활성화
✨ Build File에는 종속성, 유닛 테스트, 분석 등을 정의해서 수행할 수 있음
- DockerFile을 만들고 Cloud Build로 build하는 과제 수행하기
quickstart.sh
nano quickstart.sh
#!/bin/sh
echo "Hello, world! The time is $(date)."
Dockerfile
nano Dockerfile
FROM alpine
COPY quickstart.sh /
CMD ["/quickstart.sh"]
실행 권한 부여
chmod +x quickstart.sh
Cloud Build에서 Docker container image를 bulid하기 위한 명령어 실행
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/quickstart-image .
참고
- 가장 끝에 붙는
.
은 빌드 시간에 소스 코드가 현재 working directory에 있음을 나타냄
Container Registry에서 이미지 확인
빌드가 완료되면 Docker image가 빌드되고 Container Registry에 올라감
✨ Cloud Build로 YAML 형식의 custom build file을 사용하여 기존 Docker 컨테이너에 통합해보기
소스코드 받기
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
working director에 연결되는 soft link 생성
ln -s ~/training-data-analyst/courses/ak8s/v1.1 ~/ak8s
cd ~/ak8s/Cloud_Build/a
Custom Cloud Build Configuration File 확인
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'
cloudbuild.yaml 파일을 이용하여 빌드 시작
gcloud builds submit --config cloudbuild.yaml .
빌드가 완료되면 새 버전의 이미지가 Container Registry의 Images 리스트에 올라감
Build History
✨ Custom Build Configuration File은 간단히 빌드된 컨테이너에 추가로 (병렬/순차적으로) 다른 행동을 수행할 때 빛을 발한다!
- 빌드된 컨테이너를 테스트하고 결과를 리포트하는 build configuration file 예제
cd ~/ak8s/Cloud_Build/b
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'
cloudbuild.yaml 을 사용하여 gcloud build 시작
gcloud builds submit --config cloudbuild.yaml .
echo $?
출력 : 1 (non-zero)
✨ 쿠버네티스는 컨테이너 관리 및 조정 솔루션으로 부하 분산, 로깅, 모니터링 그리고 기타 관리 기능을 자동화
쿠버네티스
쿠버네티스의 특징
✨ 컨테이너들을 관리, 확장, 배포를 도와주는 GKE는 어떤 장점이 있을까 ?
특징
✨ Computing Option (Compute Engine, GKE, App Engine 등등)에 대해 더 알아보자!