目次
Toggle記事の目的
Dockerイメージビルドして、Container Registryに登録するまでは複数ステップがあって、毎回各ステップ別で実施するとめんどくさい。
それを解決するため、Cloudbuildを使って複数ステップをまとめてビルドを行います。
Cloudbuildを使わない場合、GKEにデプロイする手順は下記のステップとなる
- Dockerイメージのビルド
- GCP Container RegistryにDockerイメージを登録(複数操作実施)
- Container RegistryからアプリケーションをGKEにデプロイ
この記事では、Cloudbuildを使って最初の2つの手順をまとめて1回で実施できる。
- Cloudbuildでイメージ作成とContainer Registryに登録(まとめて1回実施)
- Container RegistryからアプリケーションをGKEにデプロイ
実施手順
1. サンプルアプリケーション準備
※以前記事のwebアプリケーションを再利用してCloudbuildを入れます。
フォルダ構成
cloudbuild
├── README.md
├── cloudbuild.simplewebapp.yaml
├── go.mod
├── go.sum
├── simplewebapp.Dockerfile
├── simplewebapp.deployment.yaml
└── webapp
├── handler
│ └── simplewebapp_handler.go
└── simplewebapp.go
2. Cloudbuildでイメージ作成とContainer Registryに登録
cloudbuild.simplewebapp.yaml
options:
env:
- GO111MODULE=on
volumes:
- name: go-modules
path: /go
steps:
# go test
- name: golang:1.12
dir: .
args: ['go', 'test', './...']
# go build
- name: golang:1.12
dir: .
args: ['go', 'build', '-o', 'simplewebapp', 'webapp/simplewebapp.go']
env: ["CGO_ENABLED=0"]
# docker build
- name: 'gcr.io/cloud-builders/docker'
dir: .
args: [
'build',
'-t', '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}:${_GCR_TAG}',
'-f', 'simplewebapp.Dockerfile',
'--cache-from', '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}:${_GCR_TAG}',
'.'
]
# push image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ["push", '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}']
substitutions:
# # GCR region name to push image
_GCR_REGION: asia.gcr.io
# # Project ID
_GCR_PROJECT: ds-project
# # Image name
_GCR_IMAGE_NAME: ds-cloudbuild-test
# # Image tag
_GCR_TAG: latest
simplewebapp.Dockerfile は下記のように修正する
FROM alpine:latest WORKDIR /app COPY ./simplewebapp /app EXPOSE 80 ENTRYPOINT ["./simplewebapp"]
Cloudbuild実行
cd path_to_app_folder gcloud builds submit --config cloudbuild.simplewebapp.yaml
実施後、Container Registry上の作成イメージを確認
3. Container RegistryからGKEにデプロイ
デプロイメント定義ファイルを準備する。
simplewebapp.deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: simple-webapp-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: simple-webapp
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: simple-webapp
spec:
replicas: 2
template:
metadata:
labels:
app: simple-webapp
spec:
containers:
- name: simple-webapp
image: asia.gcr.io/ds-project/ds-cloudbuild-test:latest
ports:
- containerPort: 80
このデプロイメント定義ファイルは、1つのLoad
Balancing作成、ポート80で公開する。webアプリケーションは後ろの2つのContainersで稼働とする。
# k8sコントロールツールをインストール gcloud components install kubectl kubectl version # GKEのクラスタにアクセスするため、credentialsを設定 gcloud container clusters get-credentials --zone asia-northeast1-b ds-gke-small-cluster # GKEにアプリケーションを設定する kubectl apply -f simplewebapp.deployment.yaml
デプロイ後、結果確認
外部からwebアプリケーションへのアクセス確認
curl http://34.85.10.96/ > Hello, World!
本記事で利用したソースコードはこちら
https://github.com/itdevsamurai/gke/tree/master/cloudbuild
最後まで読んで頂き、どうも有難う御座います!
DevSamurai 橋本
