Trong bài viết này, DS Solution Vietnam hướng dẫn dùng cloudbuild để build và push image lên Container Registry.
Ở bài viết hướng dẫn tạo và deploy một web app lên GKE, chúng ta đang đi theo các bước sau.
- Trước tiên sẽ tạo một web app như thông thường.
- Sau đó build thành docker image
- Push Docker image lên GCP container registry
- Deploy image từ Container Registry lên GKE
Ở bài viết này sẽ hướng dẫn cách dùng cloudbuild để gộp 3 step đầu tiên lại và run 1 lần trong cloudbuild.
- Dùng cloudbuild để build và push docker image lên Container Registry
- Deploy image từ Container Registry lên GKE
Tìm hiểu cách tạo và chạy một web app trên GKE
Cách tạo và chạy một batch job trên GKE
Sau đây là hướng dẫn cách thực hiện.
1. Cấu trúc thư mục app
Sử dụng lại web app ở bài viết trước và thêm file cho cloudbuild
Cấu trúc thư mục như sau
cloudbuild
├── README.md
├── cloudbuild.simplewebapp.yaml
├── go.mod
├── go.sum
├── simplewebapp.Dockerfile
├── simplewebapp.deployment.yaml
└── webapp
├── handler
│ └── simplewebapp_handler.go
└── simplewebapp.go
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
cần sửa lại như bên dưới
FROM alpine:latest
WORKDIR /app
COPY ./simplewebapp /app
EXPOSE 80
ENTRYPOINT ["./simplewebapp"]
2. Run Cloudbuild
cd path_to_app_folder
gcloud builds submit --config cloudbuild.simplewebapp.yaml
Confirm image đã build trên Container Registry
3. Deploy web app image lên GKE
Nội dung file config deployment như dưới
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
Nội dung config này sẽ tạo ra 1 load balacing public port 80. Và 2 containers chạy web app phía sau.
# deploy web app image to GKE
kubectl apply -f simplewebapp.deployment.yaml
Check kết quả trong GKE
Test request
curl http://34.85.10.96/
> Hello, World!
Trên đây DS Solution Vietnam đã hướng dẫn cách tối ưu công đoạn build và push image lên Container Registry với Cloud Build. Hãy liên hệ tới chúng tôi để nhận tư vấn chi tiết, hướng dẫn cách chuyển đổi sang các nền tảng điện toán đám mây GCP, AWS, IBM, hybrid cloud và cách xây dựng các ứng dụng cloud-native.