際際滷

際際滷Share a Scribd company logo
一沿温界一によるコンテナイメ`ジのビルド
VMware DevOps Meetup #6
2020/10/21
云晩の坪否
一沿温界一を聞って悪顎恢艶姻稼艶岳艶壊桟廠でコンテナイメ`ジを恬撹する圭隈を府初します
1. コンテナイメ`ジのビルド圭隈
2. Cloud Native Buildpacks
3. kpack
4. デモ
¢ 歌深
$ Dockerfileかきたくないでござる
$ Getting Started with VMware Tanzu Build Service 1.0
$ Tanzu Build Service を乾ってみる
$ Buildpacksのビルダ`をスクラッチから恬ってみる
コンテナイメ`ジのビルド圭隈
¢ ホスト貧でコンテナイメ`ジをビルド
$ docker : Dockerfileからコンテナイメ`ジを恬撹
$ buildah : デ`モンを旋喘せずに Dockerfileからコンテナイメ`ジを恬撹
$ pack : Cloud Native Buildpacksを旋喘してコンテナイメ`ジを恬撹
¢ Kubernetes貧でコンテナイメ`ジをビルド
$ kaniko : Kubernetes貧でDockerfileからコンテナイメ`ジを恬撹
$ Source-to-Image (S2I) : OpenShiftのC嬬でコンテナイメ`ジを恬撹
$ kpack : Kubernetes貧でCloud Native Buildpacksを旋喘してコンテナイメ`ジを恬撹
¢ クラウドサ`ビス
$ Google Cloud Build : Cloud Native Buildpacksに (2020/10/10)
$ AWS CodeBuild
$ Azure Container Registry Tasks
Cloud Native Buildpacks(CNB) ?
¢ BuildpackはPaaSであるCloud FoundryやHerokuで旋喘されているアプリケ`
ションg佩h廠を恬撹する碧Mみ。
$ ソ`スコ`ドからアプリケ`ションのフレ`ムワ`クをJRし、アプリケ`ションをビルドし、g佩辛嬬
なイメ`ジ(Droplet/Slug)を恬撹する。
¢ Cloud Native BuildpacksはDockerやKubernetes吉でBuildpackの碧Mみを試喘
してOCIのコンテナイメ`ジを恬撹する並を辛嬬にする。
$ CNBはCNCFのSandboxプロジェクト。
$ CNBのg廾
* Paketo Buildpacks : Cloud Foundry Foundationのプロジェクト
* Heroku Buildpacks : Heroku鬚韻Buildpack
* Google Cloud Buildpacks : Google Cloudのコンテナプラットフォ`ムに恷m晒
https://buildpacks.io/
CNBのコンポ`ネント
¢ Builder : ビルドに旋喘するコンテナイメ`ジ。Buildpackとビルドに旋喘するBuild/Runイメ`
ジ(Stack)で撹される。
¢ Buildpack : ソ`スコ`ドの奮、アプリケ`ションのビルドやg佩圭隈を協x
¢ Stack : Builderがイメ`ジ恬撹rに旋喘する、ビルド喘?g佩喘のイメ`ジ
¢ Lifecycle : Buildpackのg佩をオ`ケストレ`ションし、アプリケ`ションイメ`ジをMみ羨て
る。
¢ Platform : OCIイメ`ジを恬撹するために旋喘されるプラットフォ`ム(pack cli、kpack、
tekton吉)
https://buildpacks.io/docs/concepts/components/
pack : Buildpack CLI
¢ Dockerとpackコマンドによりコンテナイメ`ジを恬
撹
¢ Builderイメ`ジを峺協して、Dockerfileを旋喘せ
ずにアプリケ`ションソ`スコ`ドから、アプリケ`
ションを徭奮してコンテナイメ`ジを恬撹
¢ ビルドしたコンテナイメ`ジをレジストリにプッシュ
することも辛嬬。(--publish)
¢ リベ`スによりベ`スイメ`ジだけ筝することも
辛嬬。(pack rebase)
# git clone https://github.com/buildpacks/samples
# cd samples
# ls apps/
aspnet bash-script batch-script java-maven kotlin-gradle README.md ruby-bundler
# ls java-maven/
mvnw mvnw.cmd pom.xml src
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# pack build -p apps/java-maven --builder cnbs/sample-builder:bionic sample-app
===> DETECTING
[detector] samples/java-maven 0.0.1
===> ANALYZING
===> RESTORING
===> BUILDING
[builder] ---> Java buildpack
[builder] ---> Installing JDK
===> EXPORTING
[exporter] Adding layer 'samples/java-maven:jdk'
[exporter] Adding 1/1 app layer(s)
[exporter] Adding layer 'launcher'
[exporter] Adding layer 'config'
[exporter] Adding layer 'process-types'
[exporter] Adding label 'io.buildpacks.lifecycle.metadata'
[exporter] Adding label 'io.buildpacks.build.metadata'
[exporter] Adding label 'io.buildpacks.project.metadata'
[exporter] Setting default process type 'web'
[exporter] *** Images (68472453e67b):
[exporter] sample-app
[exporter] Reusing cache layer 'samples/java-maven:jdk'
[exporter] Adding cache layer 'samples/java-maven:maven_m2'
Successfully built image sample-app
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cnbs/sample-stack-run bionic d57edd2cacb1 3 weeks ago 70.3MB
cnbs/sample-builder bionic a1fff020741a 40 years ago 180MB
sample-app latest 68472453e67b 40 years ago 300MB
buildpacksio/lifecycle 0.9.1 1a8d17b1a7a7 40 years ago 15.1MB
https://buildpacks.io/docs/app-journey/
base-1
Java
App
base-2
Java
App
rebase
kpack
¢ Kubernetes Native Container Build Service
¢ Kubernetesをして、Kubernetes貧でCNBを旋喘するための碧Mみ
$ コンテナイメ`ジのビルドは Kubernetes貧のPod坪で佩われる
$ builderやstack、恬撹されるimage吉がKubernetesのCRD(Custom Resource Definition)として砿
尖される。
¢ VMware(症Pivotal)が嶄伉となって_k
$ Tanzu Build Service(TBS)はkpackをVMwareがサポ`トするもの (2020/8 GA v1.0.2)
$ TBSではStackやBuilder吉が並念協xされていて、 kpack鬚韻Custom Resourceを岷俊荷恬せ
ずにkpコマンドを旋喘してgに旋喘辛嬬
¢ Cloud Foundry for Kubernetes(cf-for-k8s)のコンポ`ネントとしても旋喘されてい
る。(cf pushされたソ`スコ`ドからコンテナイメ`ジをビルド)
https://github.com/pivotal/kpack
kpackのインスト`ル
¢ kpack Tutorial : https://github.com/pivotal/kpack/blob/master/docs/tutorial.md
# kubectl get pods -n kpack
NAME READY STATUS RESTARTS AGE
kpack-controller-6f57d5f7d-zzrf7 1/1 Running 0 10m
kpack-webhook-5cf99c5cd7-tf87m 1/1 Running 0 10m
# kubectl get crd | grep kpack
builders.kpack.io 2020-10-14T05:54:54Z
builds.kpack.io 2020-10-14T05:54:54Z
clusterbuilders.kpack.io 2020-10-14T05:54:54Z
clusterstacks.kpack.io 2020-10-14T05:54:54Z
clusterstores.kpack.io 2020-10-14T05:54:54Z
images.kpack.io 2020-10-14T05:54:54Z
sourceresolvers.kpack.io 2020-10-14T05:54:54Z
kpackではbuilderをCRにより撹。
Builder = Store + Stack
apiVersion: kpack.io/v1alpha1
kind: ClusterStore
metadata:
name: default
spec:
sources:
- image: gcr.io/paketo-buildpacks/go
- image: gcr.io/paketo-buildpacks/java
- image: gcr.io/paketo-buildpacks/nodejs
apiVersion: kpack.io/v1alpha1
kind: ClusterStack
metadata:
name: full
spec:
id: "io.buildpacks.stacks.bionic"
buildImage:
image: "paketobuildpacks/build:full-cnb"
runImage:
image: "paketobuildpacks/run:full-cnb"
apiVersion: kpack.io/v1alpha1
kind: Builder
metadata:
name: my-builder
spec:
tag: masanara/my-builder
serviceAccount: kpack-service-account
stack:
name: full
kind: ClusterStack
store:
name: default
kind: ClusterStore
order:
- group:
- id: paketo-buildpacks/go
- group:
- id: paketo-buildpacks/java
- group:
- id: paketo-buildpacks/nodejs
Imageの恬撹
恬撹するコンテナイメ`ジのレジストリ/タグ、ビルドに旋喘するBuilder、ビルドに旋喘す
るソ`スコ`ドのリポジトリを峺協。
apiVersion: kpack.io/v1alpha1
kind: Image
metadata:
name: go-demoweb
namespace: demo
spec:
tag: harbor.example.com/project/go-demoweb-kpack
serviceAccount: tutorial-service-account
builder:
name: tiny-builder
kind: Builder
source:
git:
url: https://github.com/user/go-demoweb
revision: master
デモ
デモにはTanzu Build Service / kpコマンドを旋喘しています
Container
Registry
1. イメ`ジの恬撹
build-1image
$ kp image create go-helloworld 
--tag harbor.examle.com/app-image/go-helloworld 
--git https://github.com/user/go-helloworld.git 
--git-revision master
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Container
Registry
2. イメ`ジの厚仟
imageimage¨ build-1
build-2
masterブランチ
にコミット
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Container
Registry
3. ベ`スイメ`ジの厚仟 (リベ`ス)
image build-1
build-2
image¨¨
build-3
Builder
(default)
Stack
(full)
Store
(Buildpacks)
Builder
(tiny)
Stack
(tiny)
Store
(Buildpacks)
$ kp image patch go-demoweb --cluster-builder tiny
kpackをつかうと
¢ Dockerfileをかずにコンテナイメ`ジを恬撹できる
¢ Kubernertesクラスタ`坪でコンテナイメ`ジを恬撹することが辛嬬
¢ ベ`スイメ`ジに巌樋來がkされた栽もリベ`スにより鬉g
¢ kpackだけでgitリポジトリのコミットをトリガ`にしてコンテナイメ`ジのビルドを徭
晒できる

More Related Content

一沿温界一によるコンテナイメ`ジのビルド

  • 2. 云晩の坪否 一沿温界一を聞って悪顎恢艶姻稼艶岳艶壊桟廠でコンテナイメ`ジを恬撹する圭隈を府初します 1. コンテナイメ`ジのビルド圭隈 2. Cloud Native Buildpacks 3. kpack 4. デモ ¢ 歌深 $ Dockerfileかきたくないでござる $ Getting Started with VMware Tanzu Build Service 1.0 $ Tanzu Build Service を乾ってみる $ Buildpacksのビルダ`をスクラッチから恬ってみる
  • 3. コンテナイメ`ジのビルド圭隈 ¢ ホスト貧でコンテナイメ`ジをビルド $ docker : Dockerfileからコンテナイメ`ジを恬撹 $ buildah : デ`モンを旋喘せずに Dockerfileからコンテナイメ`ジを恬撹 $ pack : Cloud Native Buildpacksを旋喘してコンテナイメ`ジを恬撹 ¢ Kubernetes貧でコンテナイメ`ジをビルド $ kaniko : Kubernetes貧でDockerfileからコンテナイメ`ジを恬撹 $ Source-to-Image (S2I) : OpenShiftのC嬬でコンテナイメ`ジを恬撹 $ kpack : Kubernetes貧でCloud Native Buildpacksを旋喘してコンテナイメ`ジを恬撹 ¢ クラウドサ`ビス $ Google Cloud Build : Cloud Native Buildpacksに (2020/10/10) $ AWS CodeBuild $ Azure Container Registry Tasks
  • 4. Cloud Native Buildpacks(CNB) ? ¢ BuildpackはPaaSであるCloud FoundryやHerokuで旋喘されているアプリケ` ションg佩h廠を恬撹する碧Mみ。 $ ソ`スコ`ドからアプリケ`ションのフレ`ムワ`クをJRし、アプリケ`ションをビルドし、g佩辛嬬 なイメ`ジ(Droplet/Slug)を恬撹する。 ¢ Cloud Native BuildpacksはDockerやKubernetes吉でBuildpackの碧Mみを試喘 してOCIのコンテナイメ`ジを恬撹する並を辛嬬にする。 $ CNBはCNCFのSandboxプロジェクト。 $ CNBのg廾 * Paketo Buildpacks : Cloud Foundry Foundationのプロジェクト * Heroku Buildpacks : Heroku鬚韻Buildpack * Google Cloud Buildpacks : Google Cloudのコンテナプラットフォ`ムに恷m晒 https://buildpacks.io/
  • 5. CNBのコンポ`ネント ¢ Builder : ビルドに旋喘するコンテナイメ`ジ。Buildpackとビルドに旋喘するBuild/Runイメ` ジ(Stack)で撹される。 ¢ Buildpack : ソ`スコ`ドの奮、アプリケ`ションのビルドやg佩圭隈を協x ¢ Stack : Builderがイメ`ジ恬撹rに旋喘する、ビルド喘?g佩喘のイメ`ジ ¢ Lifecycle : Buildpackのg佩をオ`ケストレ`ションし、アプリケ`ションイメ`ジをMみ羨て る。 ¢ Platform : OCIイメ`ジを恬撹するために旋喘されるプラットフォ`ム(pack cli、kpack、 tekton吉) https://buildpacks.io/docs/concepts/components/
  • 6. pack : Buildpack CLI ¢ Dockerとpackコマンドによりコンテナイメ`ジを恬 撹 ¢ Builderイメ`ジを峺協して、Dockerfileを旋喘せ ずにアプリケ`ションソ`スコ`ドから、アプリケ` ションを徭奮してコンテナイメ`ジを恬撹 ¢ ビルドしたコンテナイメ`ジをレジストリにプッシュ することも辛嬬。(--publish) ¢ リベ`スによりベ`スイメ`ジだけ筝することも 辛嬬。(pack rebase) # git clone https://github.com/buildpacks/samples # cd samples # ls apps/ aspnet bash-script batch-script java-maven kotlin-gradle README.md ruby-bundler # ls java-maven/ mvnw mvnw.cmd pom.xml src # docker images REPOSITORY TAG IMAGE ID CREATED SIZE # pack build -p apps/java-maven --builder cnbs/sample-builder:bionic sample-app ===> DETECTING [detector] samples/java-maven 0.0.1 ===> ANALYZING ===> RESTORING ===> BUILDING [builder] ---> Java buildpack [builder] ---> Installing JDK ===> EXPORTING [exporter] Adding layer 'samples/java-maven:jdk' [exporter] Adding 1/1 app layer(s) [exporter] Adding layer 'launcher' [exporter] Adding layer 'config' [exporter] Adding layer 'process-types' [exporter] Adding label 'io.buildpacks.lifecycle.metadata' [exporter] Adding label 'io.buildpacks.build.metadata' [exporter] Adding label 'io.buildpacks.project.metadata' [exporter] Setting default process type 'web' [exporter] *** Images (68472453e67b): [exporter] sample-app [exporter] Reusing cache layer 'samples/java-maven:jdk' [exporter] Adding cache layer 'samples/java-maven:maven_m2' Successfully built image sample-app # docker images REPOSITORY TAG IMAGE ID CREATED SIZE cnbs/sample-stack-run bionic d57edd2cacb1 3 weeks ago 70.3MB cnbs/sample-builder bionic a1fff020741a 40 years ago 180MB sample-app latest 68472453e67b 40 years ago 300MB buildpacksio/lifecycle 0.9.1 1a8d17b1a7a7 40 years ago 15.1MB https://buildpacks.io/docs/app-journey/ base-1 Java App base-2 Java App rebase
  • 7. kpack ¢ Kubernetes Native Container Build Service ¢ Kubernetesをして、Kubernetes貧でCNBを旋喘するための碧Mみ $ コンテナイメ`ジのビルドは Kubernetes貧のPod坪で佩われる $ builderやstack、恬撹されるimage吉がKubernetesのCRD(Custom Resource Definition)として砿 尖される。 ¢ VMware(症Pivotal)が嶄伉となって_k $ Tanzu Build Service(TBS)はkpackをVMwareがサポ`トするもの (2020/8 GA v1.0.2) $ TBSではStackやBuilder吉が並念協xされていて、 kpack鬚韻Custom Resourceを岷俊荷恬せ ずにkpコマンドを旋喘してgに旋喘辛嬬 ¢ Cloud Foundry for Kubernetes(cf-for-k8s)のコンポ`ネントとしても旋喘されてい る。(cf pushされたソ`スコ`ドからコンテナイメ`ジをビルド) https://github.com/pivotal/kpack
  • 8. kpackのインスト`ル ¢ kpack Tutorial : https://github.com/pivotal/kpack/blob/master/docs/tutorial.md # kubectl get pods -n kpack NAME READY STATUS RESTARTS AGE kpack-controller-6f57d5f7d-zzrf7 1/1 Running 0 10m kpack-webhook-5cf99c5cd7-tf87m 1/1 Running 0 10m # kubectl get crd | grep kpack builders.kpack.io 2020-10-14T05:54:54Z builds.kpack.io 2020-10-14T05:54:54Z clusterbuilders.kpack.io 2020-10-14T05:54:54Z clusterstacks.kpack.io 2020-10-14T05:54:54Z clusterstores.kpack.io 2020-10-14T05:54:54Z images.kpack.io 2020-10-14T05:54:54Z sourceresolvers.kpack.io 2020-10-14T05:54:54Z
  • 9. kpackではbuilderをCRにより撹。 Builder = Store + Stack apiVersion: kpack.io/v1alpha1 kind: ClusterStore metadata: name: default spec: sources: - image: gcr.io/paketo-buildpacks/go - image: gcr.io/paketo-buildpacks/java - image: gcr.io/paketo-buildpacks/nodejs apiVersion: kpack.io/v1alpha1 kind: ClusterStack metadata: name: full spec: id: "io.buildpacks.stacks.bionic" buildImage: image: "paketobuildpacks/build:full-cnb" runImage: image: "paketobuildpacks/run:full-cnb" apiVersion: kpack.io/v1alpha1 kind: Builder metadata: name: my-builder spec: tag: masanara/my-builder serviceAccount: kpack-service-account stack: name: full kind: ClusterStack store: name: default kind: ClusterStore order: - group: - id: paketo-buildpacks/go - group: - id: paketo-buildpacks/java - group: - id: paketo-buildpacks/nodejs
  • 10. Imageの恬撹 恬撹するコンテナイメ`ジのレジストリ/タグ、ビルドに旋喘するBuilder、ビルドに旋喘す るソ`スコ`ドのリポジトリを峺協。 apiVersion: kpack.io/v1alpha1 kind: Image metadata: name: go-demoweb namespace: demo spec: tag: harbor.example.com/project/go-demoweb-kpack serviceAccount: tutorial-service-account builder: name: tiny-builder kind: Builder source: git: url: https://github.com/user/go-demoweb revision: master
  • 11. デモ デモにはTanzu Build Service / kpコマンドを旋喘しています
  • 12. Container Registry 1. イメ`ジの恬撹 build-1image $ kp image create go-helloworld --tag harbor.examle.com/app-image/go-helloworld --git https://github.com/user/go-helloworld.git --git-revision master Builder (default) Stack (full) Store (Buildpacks)
  • 14. Container Registry 3. ベ`スイメ`ジの厚仟 (リベ`ス) image build-1 build-2 image¨¨ build-3 Builder (default) Stack (full) Store (Buildpacks) Builder (tiny) Stack (tiny) Store (Buildpacks) $ kp image patch go-demoweb --cluster-builder tiny
  • 15. kpackをつかうと ¢ Dockerfileをかずにコンテナイメ`ジを恬撹できる ¢ Kubernertesクラスタ`坪でコンテナイメ`ジを恬撹することが辛嬬 ¢ ベ`スイメ`ジに巌樋來がkされた栽もリベ`スにより鬉g ¢ kpackだけでgitリポジトリのコミットをトリガ`にしてコンテナイメ`ジのビルドを徭 晒できる