Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dockerfile書きたくないでござる

 Dockerfile書きたくないでござる

CloudNative Days Kansai 2019前夜祭のLTで発表した資料です。

発表の大筋は@makingの『Pack to the Future - SpringOne Platform 2019報告会』
https://docs.google.com/presentation/d/1rzaxReQ92WaWI24v-GsTwjtLCMq2YaFSTl9t6SEjPxQ/mobilepresent?slide=id.g6ad6e2f668_0_5

およびその元ネタの『Pack to the Future: Cloud-Native Buildpacks on k8s』
https://www.slideshare.net/SpringCentral/pack-to-the-future-cloudnative-buildpacks-on-k8s

をベースにしています。

Cloud Native Buildpackの詳細については、CNDK2019の @pyama86 さんのセッション『CloudNative Buildpacksで創る、CloudNativeな開発体験』が参考になります。
https://speakerdeck.com/pyama86/cloudnative-buildpacksdechuang-ru-cloudnativenakai-fa-ti-yan

Kazuto Kusama

November 27, 2019
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

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

    View Slide

  2. KAZUTO KUSAMA
    @jacopen
    2
    Senior Solutions Architect @

    View Slide

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

    View Slide

  4. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. BuildpackがあればDockerfile要らない

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. Docker != Dockerfile

    View Slide

  27. DEMO

    View Slide

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

    View Slide

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

    View Slide

  30. できましたー。

    View Slide

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

    View Slide

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

    View Slide

  33. 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が必要

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. 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

    View Slide

  41. DEMO

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  48. View Slide

  49. View Slide

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

    View Slide

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

    View Slide

  52. 参考文献
    資料
    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

    View Slide