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

Cloud Native Buildpackで めんどうなコンテナイメージ作成を 自動化しよう

Kazuto Kusama
October 18, 2018

Cloud Native Buildpackで めんどうなコンテナイメージ作成を 自動化しよう

第39回 PaaS勉強会で発表した資料です。
Cloud Native Buildpackを使えば、Dockerfileを書くこと無くコンテナイメージを作れちゃいいます

Kazuto Kusama

October 18, 2018
Tweet

More Decks by Kazuto Kusama

Other Decks in Technology

Transcript

  1. © Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version

    1.0 Cloud Native Buildpackで めんどうなコンテナイメージ作成を 自動化しよう
  2. Dockerの Build-Ship-Runモデル Build Ship Run $ docker build $ docker

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

    push $ docker run Dockerfile書いて イメージ作って どこかのレジストリに上げて 実行する 特にこのへんが大変
  4. 1. Detect #!/usr/bin/env bash BUILD_DIR=$1 # Exit early if app

    is clearly not Python. if [ ! -f "$BUILD_DIR/requirements.txt" ] && [ ! -f "$BUILD_DIR/setup.py" ] && [ ! -f "$BUILD_DIR/Pipfile" ]; then exit 1 fi echo Python https://github.com/heroku/heroku-buildpack-python/blob/master/bin/detect requirement.txtかsetup.pyかPipfileが無かったら exit 1 見つかった場合、Pythonと文字を出して終わる(exit 0)
  5. 1. Detect $ cf push Pythonのコード Java Buildpack PHP Buildpack

    Ruby Buildpack Python Buildpack ① detectを実行 Javaではないのでexit 1が返る ② detectを実行 PHPではないのでexit 1が返る ③detectを実行 Rubyではないのでexit 1が返る ④ detectを実行 Pythonのファイルがあるので exit 0が返る ⇒Python Buildpackを使った次の処理へ
  6. 2. Compile 実行可能なイメージを作成するフェーズ 言語の実行環境の設定 • たとえばPython自体、Ruby自体の実行環境 ライブラリ類の解決 • Pythonならpip install、Rubyならbundle

    installなど ここでその名の通り環境のコンパイルを行うことができるが、実際のとこ ろは処理時間の都合上、コンパイル済みのバイナリを持ってくることが 多い
  7. Demo $ ls README.md app manifest.yml node_modules package.json public server.js

    views $ pack build jacopen/testapp 2018/11/19 17:14:31 Pulling builder image 'packs/samples' (use --no-pull flag to skip this step) 2018/11/19 17:14:33 Selected run image 'packs/run' from stack 'io.buildpacks.stacks.bionic' 2018/11/19 17:14:33 Pulling run image 'packs/run' (use --no-pull flag to skip this step) *** DETECTING: 2018/11/19 08:14:43 Group: Sample Node.js Buildpack: pass *** ANALYZING: Reading information from previous image for possible re-use 2018/11/19 17:14:44 WARNING: skipping analyze, image not found 中略 ---> 170c76d2c366 Successfully built 170c76d2c366 Successfully tagged jacopen/testapp:latest Dockerfileすら無いnode.jsアプリのディレクトリで pack buildコマンドを一発打つだけで、 自動的にイメージのビルドやってくれて超らくちん というデモをしました
  8. 内部的にはV3扱い Buildpack API v2a - Heroku Buildpack API v2b -

    Cloud Foundry Buildpack API v3 - Cloud Native Buildpacks https://github.com/buildpack/resources
  9. Cloud Native Buildpackによってもたらされるもの • 開発者の生産性向上 ◦ アプリケーション開発に注力できる ▪ どうやってDockerfile書くかとか気にしなくていい ◦

    一貫した操作でデプロイできる ▪ cf push / git push ▪ packコマンド叩けば様々な言語で同様にイメージ作成できる • 持続可能な運用 ◦ Opsのガードレールの元で開発者の生産性を高める ◦ スケーラブルなセキュリティ
  10. これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push
  11. これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push 詳しい人
  12. これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人
  13. これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが
  14. これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが コンテナ疲れ™
  15. 誰もが同じようなことをやる Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
  16. 誰もが同じようなことをやる Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人
  17. 誰もが同じようなことをやる Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが クソが クソが
  18. 誰もが同じようなことをやる Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply

    Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが クソが クソが コンテナ疲れ™