13. App image that has
● a reproducible build
● metadata that can be inspected
● logical mapping of layers to components
OS
app
dependencies
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
The Result
14. CNB: An Open Standard
Platform Lifecycle Buildpacks
CNB Specification v3
Platform API 0.6 Buildpack API 0.6
Pack
kpack
Heroku
Tekton
Google Cloud Run Button
Cloud Build
CircleCI
Gitlab Auto DevOps
Distribution API 0.2
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
15. Build
stack
build image run image
build image
lifecycle
buildpack C
buildpack B
buildpack A
builder image
</>
source
run image
dependency B
dependency A
app
app image
pack
dependency C
...
https://github.com/buildpacks/spec/blob/main/README.md,
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
16. Lifecycle
Finds an ordered group of buildpacks to use during the build phase.
Restores files that buildpacks may use to optimize the build and export
phases.
Restores layers from the cache.
Transforms application source code into runnable artifacts that can be
packaged into a container.
Creates the final OCI image.
Detect
Analysis
Restore
Build
export
https://github.com/buildpacks/spec/blob/main/platform.md#lifecycle-interface
https://docs.google.com/presentation/d/14cjPH520VGx9aGi4rHRIqgl7RHdUmCRj6PYFEBINPhs/view#slide=id.g7438596d61_1_588
17. $ pack builder suggest
Suggested builders:
Google: gcr.io/buildpacks/builder:v1 Ubuntu 18 base image with
buildpacks for .NET, Go, Java,
Node.js, and Python
Heroku: heroku/buildpacks:18 Base builder for Heroku-18
stack, based on ubuntu:18.04
base image
Heroku: heroku/buildpacks:20 Base builder for Heroku-20
stack, based on ubuntu:20.04
base image
Paketo Buildpacks: paketobuildpacks/builder:base Ubuntu bionic base image with
buildpacks for Java, .NET Core,
NodeJS, Go, Ruby, NGINX and Procfile
Paketo Buildpacks: paketobuildpacks/builder:full Ubuntu bionic base image with
buildpacks for Java, .NET Core,
NodeJS, Go, PHP, Ruby, Apache HTTPD,
NGINX and Procfile
Paketo Buildpacks: paketobuildpacks/builder:tiny Tiny base image (bionic build image,
distroless-like run image) with
buildpacks for Java Native Image and
Go
19. 1. General purpose for Cloud Run (Cloud Run Button), GKE, Anthos, App Engine, Cloud
functions, 100% compatible with Cloud Native Buildpacks.
2. Supported languages
Runtime App Support Function Support
Go 1.10 + ✓ ✓
Node.js 10 + ✓ ✓
Python 3.7 + ✓ ✓
Java 8, 11 ✓ ✓ (11 only)
.NET Core 3.1 + ✓ ✓
3. Usage: suitable for use with pack, kpack, tekton, skaffold
4. Using with Google Cloud Build / gcloud command
Google Cloud Buildpacks
20. pack build Usage:
pack build <image-name> [flags]
Examples:
pack build test_img --path apps/test-app --builder cnbs/sample-builder:bionic
Flags:
-B, --builder string Builder image (default "index.docker.io/paketobuildpacks/builder:base")
-b, --buildpack strings Buildpack to use. One of:
a buildpack by id and version in the form of '<buildpack>@<version>',
path to a buildpack directory (not supported on Windows),
path/URL to a buildpack .tar or .tgz file, or
a packaged buildpack image name in the form of '<hostname>/<repo>[:<tag>]'
Repeat for each buildpack in order, or supply once by comma-separated list
-r, --buildpack-registry string Buildpack Registry by name
--cache-image string Cache build layers in remote registry. Requires --publish
Create an image from buildpack
pack build my-golang-app --builder gcr.io/buildpacks/builder:v1 golang-sample
pack build my-golang-app2 --builder paketobuildpacks/builder:base golang-sample
21.
22. FROM gcr.io/gcp-runtimes/go1-builder:1.14 AS builder
# Set working directory
WORKDIR /go/src/github.com/cage1016/ms-sample/
ENV GO111MODULE=on
ENV PATH="${PATH}:/usr/local/go/bin"
COPY . .
RUN go mod download
RUN GOOS=linux go build -o /exe cmd/add/main.go
FROM gcr.io/distroless/base:latest
COPY --from=builder /exe .
ENTRYPOINT ["/exe"]
23. apiVersion: skaffold/v2beta13
kind: Config
build:
artifacts:
- image: index.docker.io/cage1016/ms-sample-add
buildpacks:
builder: gcr.io/buildpacks/builder:v1
env:
- GOOGLE_BUILDABLE=cmd/add/main.go
Usage: Skaffold
In Skaffold 1.11 (schema v2beta5), the singular buildpack field was renamed to buildpacks.
25. steps:
- name: gcr.io/cloud-builders/gcloud
args:
- builds
- submit
-
--pack=builder=gcr.io/buildpacks/builder:v1,env=GOOGLE_BUILDABLE=cmd/add/main.go,image=index.
docker.io/cage1016/ms-sample-add
Usage: gcloud command
gcloud builds submit - submit a build using Google Cloud Build
ONLY support pack builder, env, image parameters
26. steps:
- name: gcr.io/k8s-skaffold/pack
entrypoint: pack
args:
- build
- index.docker.io/cage1016/ms-sample-add // --publish=index.docker.io/cage1016/ms-sample-add
- --builder=gcr.io/buildpacks/builder
- --env=GOOGLE_BUILDABLE=cmd/add/main.go
Usage: Cloud Build
instance by using the pack builder image provided by the Skaffold project
27. [[build.env]]
name = "GOOGLE_BUILDABLE"
value = "cmd/add/main.go"
Usage: Cloud Run Button
Sample: https://github.com/cage1016/gokit-add-cloud-run
Let anyone deploy your GitHub repos to Google Cloud Run with a
single click