Slide 1

Slide 1 text

Dockerfile書きたくないでござる 絶対にDockerfile書きたくないでござる

Slide 2

Slide 2 text

KAZUTO KUSAMA @jacopen 2 Senior Solutions Architect @

Slide 3

Slide 3 text

https://www.atmarkit.co.jp/ait/series/16443/ @IT 草間一人×青山真也 クラウドネイティブ対談

Slide 4

Slide 4 text

You love Containers? We love containers too! You love Kubernetes? We love Kubernetes too! You love Dockerfile? Hmm … https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/5

Slide 5

Slide 5 text

Dockerの Build-Ship-Runモデル Build Ship Run $ docker build $ docker push $ docker run Dockerfile書いて イメージ作って どこかのレジストリに上げて 実行する

Slide 6

Slide 6 text

Dockerの Build-Ship-Runモデル Build Ship Run $ docker build $ docker push $ docker run Dockerfile書いて イメージ作って どこかのレジストリに上げて 実行する 特にこのへんが大変

Slide 7

Slide 7 text

『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless 考えることが増えて面倒くさい・・・

Slide 8

Slide 8 text

Dockerfile Best Practices https://www.docker.com/blog/intro-guide-to-dockerfile-best-practices/

Slide 9

Slide 9 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/17 そういえば何年か前にこういう大きめの脆弱性が発見され たりしましたよね

Slide 10

Slide 10 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/18

Slide 11

Slide 11 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/19 たとえばベースイメージのほうに脆弱性があったとすると

Slide 12

Slide 12 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/20 500 Apps

Slide 13

Slide 13 text

500 Apps https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/21 アプリ数が多いと、影響範囲がとんでもないことになりま す。

Slide 14

Slide 14 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/22 あとアプリによってベースイメージが異なるなんてことも多 いですよね。こうなると、修正にかかる時間はさらに伸びて しまいます

Slide 15

Slide 15 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/6

Slide 16

Slide 16 text

Life is too short for an app developer to write a Dockerfile

Slide 17

Slide 17 text

PaaSが実現していた世界 cf push myapp -p app.jar git push heroku master

Slide 18

Slide 18 text

$ cf push コマンド一発 あとは全部おまかせ

Slide 19

Slide 19 text

https://twitter.com/onsijoe/status/598235841635360768 プラットフォームのある べき姿

Slide 20

Slide 20 text

Buildpackがうまいことやってくれる Buildpack 実行 $ cf push

Slide 21

Slide 21 text

Buildpackとは Herokuによって作られた、PaaS上で任意の言語や フレームワークを利用できるようにする仕組み アップロードされたアプリを処理して実行可能なイメージに してくれる

Slide 22

Slide 22 text

BuildpackがあればDockerfile要らない

Slide 23

Slide 23 text

悲報: Heroku, Cloud Foundryでしか使えません

Slide 24

Slide 24 text

朗報: DockerやKubernetesで使えるようにしました

Slide 25

Slide 25 text

Cloud Native Buildpacks 従来のBuildpackを発展させ、 ソースコードをOCI標準の コンテナイメージに変換可能にし たツール ● OCI標準によるポータリビリティ ● モジュラー性の向上 ● ビルドの高速化 ● ローカル環境で実行可能に。 トラブルシューティングが高速化 ● HerokuとPivotalの協力で開発 ● CNCF Sandobox project https://buildpacks.io

Slide 26

Slide 26 text

Docker != Dockerfile

Slide 27

Slide 27 text

DEMO

Slide 28

Slide 28 text

デモ用のSpringBootアプリのディレクトリを表示していま す。 ここにはDockerfileはありません

Slide 29

Slide 29 text

おもむろに pack build コマンドを実行します。 すると自動的に言語やフレームワークを検出してイメージ のビルドが始まります。

Slide 30

Slide 30 text

できましたー。

Slide 31

Slide 31 text

作ったimageでdocker runします。 ちゃんと動いてますね

Slide 32

Slide 32 text

つぎは別のディレクトリで試します。 これはshowKs企画で利用した、NodeJSのお絵描きア プリです。 Pack buildするとちゃんとnodeと認識されていることが 分かります。

Slide 33

Slide 33 text

Pack CLI pack build [--builder ] [--publish] ● brew tap buildpack/tap && brew install pack https://buildpacks.io/docs/install-pack/ ● Platformの代表的な実装 ● 手軽にCloud Native Buildpacksを使ってOCIイメージを作成可能 ● Dockerが必要

Slide 34

Slide 34 text

Rebase https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/33

Slide 35

Slide 35 text

Rebase https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/34

Slide 36

Slide 36 text

Rebase pack rebase [--publish] https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/35

Slide 37

Slide 37 text

500 Java Apps https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/39

Slide 38

Slide 38 text

https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/40

Slide 39

Slide 39 text

500 Java Apps https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s/41

Slide 40

Slide 40 text

Kpack https://github.com/pivotal/kpack KubernetesのCRD(Custom Resource Definition)としてBuilder / Imageを扱える。 apiVersion: build.pivotal.io/v1alpha1 kind: Image metadata: name: tutorial-image spec: tag: making/hello-jsug serviceAccount: tutorial-service-account builder: name: default-builder kind: ClusterBuilder cacheSize: "1.5Gi" source: git: url: https://github.com/making/hello-jsug.git revision: master apiVersion: build.pivotal.io/v1alpha1 kind: ClusterBuilder metadata: name: default-builder spec: image: cloudfoundry/cnb:bionic updatePolicy: polling

Slide 41

Slide 41 text

DEMO

Slide 42

Slide 42 text

kpackがインストールされたk8sで、Imageというリソー スを作成します。 Imageリソースにはgitリポジトリを指定しており、自動で このリポジトリをclone⇒イメージビルドを行ってくれます

Slide 43

Slide 43 text

logsコマンドで進行中のビルドログを確認

Slide 44

Slide 44 text

しばらくするとイメージがリポジトリに pushされます。

Slide 45

Slide 45 text

こんな機能もあります。 まず、参照先のリポジトリを更新してみます。

Slide 46

Slide 46 text

しばらくするとkpackがリポジトリの変更を検出し、自動的 にイメージのビルドを開始します。

Slide 47

Slide 47 text

できましたー。 イメージのtagが増えていることが分かりますね。

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

Pack to the Future https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s

Slide 51

Slide 51 text

詳しくは @pyama86さんのセッションで https://speakerdeck.com/pyama86/cloudnative-buildpacksdechuang-ru-cloudnativenakai-fa-ti-yan

Slide 52

Slide 52 text

参考文献 資料 Buildpacks.io https://buildpacks.io/ Pack to the Future: Cloud-Native Buildpacks on k8s https://es.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s Cloud Native BuildpackでToil減らしていこうという話 https://speakerdeck.com/jacopen/cloud-native-buildpackdetoiljian-rasiteikoutoiuhua コンテナ標準化時代における次世代 Buildpack『Cloud Native Buildpack』について https://qiita.com/TakeshiMorikawa/items/c9d4eb3a866ed56a6efd CN Buildpacksが作る未来 https://speakerdeck.com/pyama86/cn-buildpacksgazuo-ruwei-lai