Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cloud Native Buildpackで めんどうなコンテナイメージ作成を自動化しよう
Search
Kazuto Kusama
October 18, 2018
Technology
4.3k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cloud Native Buildpackで めんどうなコンテナイメージ作成を 自動化しよう
第39回 PaaS勉強会で発表した資料です。
Cloud Native Buildpackを使えば、Dockerfileを書くこと無くコンテナイメージを作れちゃいいます
Kazuto Kusama
October 18, 2018
More Decks by Kazuto Kusama
See All by Kazuto Kusama
AIで開発は速くなったのに、なぜ現場は楽にならないのか 〜あなたの組織のボトルネックを突き止めるワークショップ〜
jacopen
1
380
趣味でイベント配信をやっている者だ
jacopen
1
48
自宅LLMの話
jacopen
2
1.3k
プラットフォームエンジニアリングはAI時代の開発者をどう救うのか
jacopen
9
5.9k
OpenClawで回す組織運営
jacopen
3
1.4k
SREの仕事を自動化する際にやっておきたい5つのポイント
jacopen
6
1.7k
AI時代のインシデント対応 〜時代を切り抜ける、組織アーキテクチャ〜
jacopen
4
450
AI時代の開発とPlatform Engineeringについて考える
jacopen
0
310
AI によってシステム障害が増える!? ~AI エージェント時代だからこそ必要な、インシデントとの向き合い方~
jacopen
4
450
Other Decks in Technology
See All in Technology
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
2
1.5k
品質と信頼性を地続きにする
grimoh
2
960
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
380
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
絵ではじめるKubernetesセキュリティ
aoi1
5
710
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
660
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
170
2026_devsumi_ozono.pdf
o3
3
590
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
710
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
140
Goodbye ShellScript, Hello File-based App
shunsock
0
870
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
520
The Mindset for Success: Future Career Progression
greggifford
PRO
0
510
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Are puppies a ranking factor?
jonoalderson
2
3.9k
Claude Code のすすめ
schroneko
67
230k
So, you think you're a good person
axbom
PRO
2
2.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
The agentic SEO stack - context over prompts
schlessera
0
940
Accessibility Awareness
sabderemane
1
220
Transcript
© Copyright 2017 Pivotal Software, Inc. All rights Reserved. Version
1.0 Cloud Native Buildpackで めんどうなコンテナイメージ作成を 自動化しよう
Pivotal Japan - Solutions Architect Kazuto Kusama @jacopen
普段からコンテナ使っている人?
Dockerfile書くなんて 造作もないっていう人?
Dockerの Build-Ship-Runモデル Build Ship Run $ docker build $ docker
push $ docker run Dockerfile書いて イメージ作って どこかのレジストリに上げて 実行する
Dockerの Build-Ship-Runモデル Build Ship Run $ docker build $ docker
push $ docker run Dockerfile書いて イメージ作って どこかのレジストリに上げて 実行する 特にこのへんが大変
ここ特化のMeetupがあるレベル https://build.connpass.com/event/98947/
『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法 https://www.slideshare.net/jacopen/k8spaasserverless 考えることが増えて面倒くさい・・・
一方PaaSならこうなる
Demo HerokuとCFにアプリをデプロイしてみるデモをしました。動画はこちら https://youtu.be/MfzvZQeLDFU https://youtu.be/8xpr84ox8yQ
$ cf push PaaSの例 (Cloud Foundry) コマンド一発 あとは全部おまかせ
コンテナイメージ コンテナレジストリ マニフェスト $ cf push
なぜこんなことが出来るのか
Buildpack
Buildpackがうまいことやってくれる Buildpack 実行 $ cf push
Buildpackとは Herokuによって作られた、PaaS上で任意の言語や フレームワークを利用できるようにする仕組み Cloud FoundryやGitLab、Dokkuなどでも利用可能
Buildpackとは Herokuによって作られた、PaaS上で任意の言語や フレームワークを利用できるようにする仕組み Cloud FoundryやGitLab、Dokkuなどでも利用可能 ?
補足: GitLab Auto DevOpsってのがあります https://about.gitlab.com/auto-devops/
Buildpackのしくみ
Cover w/ Image 必須スクリプト Herokuで使えるBuildpackの場合、bin以下にな らず以下のスクリプトが存在します • bin/detect • bin/compile
• bin/release
1. Detect 言語を検出するためのスクリプト
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)
1. Detect 言語を検出するためのスクリプト デプロイされたソースコードに対してdetectを実行し、 終了コードが0か1かで判断する。 0であれば、そのBuildpackの次のフェーズに移行する 1であれば、そのBuildpackは該当しなかったということで、 次のBuildpackのdetectに移行する
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を使った次の処理へ
1. Detect Exit 0か1が返せればいいので、bashでなくともよい。 例: cloudfoundry/java-buildpack detectでRubyを実行している 例: cloudfoundry/php-buildpack bashの中でpythonを実行している
2. Compile 実行可能なイメージを作成するフェーズ 言語の実行環境の設定 • たとえばPython自体、Ruby自体の実行環境 ライブラリ類の解決 • Pythonならpip install、Rubyならbundle
installなど ここでその名の通り環境のコンパイルを行うことができるが、実際のとこ ろは処理時間の都合上、コンパイル済みのバイナリを持ってくることが 多い
2. Compile このフェーズの処理は複雑なことが多いため、外部のスクリプトを呼ん で実行しているケースが多い 例: heroku-buildpack-ruby
$ cf push Pythonのコード compile script Application Library Runtime 2.
Compile
2. Compile なお、Cloud FoundryにおいてはCompileはDeprecatedとされ、 Supplyとfinalizeの2スクリプトに細分化されている (仕様が分裂している)
3. Release 実行時に必要なメタデータを生成するスクリプト
Buildpack適用後 デプロイされた アプリは何か? (detect) アプリ向けの 準備 (compile) コンテナイメージ Buildpack deploy
Slug (Heroku) Droplet (Cloud Foundry)
Diego Cell runC Garden Diego Cell •内部ではコンテナを活用 •Buildpackを使ってDropletを作 成し、Diego Cellで実行
•開発者はコンテナについて 意識する必要なし Cloud Foundryの場合
ここまでの話で 重要なポイント
• HerokuやCloud Foundryは、開発者が楽になるような仕組みを Buildpackによって実現している • BuildpackのDetectで、アプリがどんな 言語・フレームワークかを自動検出している • Compileなどを通じ、最終的にはアプリやランタイムがセットになっ たコンテナイメージが生成される
あれ
これでDocker image作れば いいんでは・・・
Cloud Native Buildpacks
The Cloud Native Buildpacks project PivotalとHerokuにより、2018年の1月から開始されたプロジェクト Cloud FoundryとHerokuのBuildpackの仕様を統一。 ソースコードからOCIイメージを作成できる仕組みに
CNCF Sandboxプロジェクト入り
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コマンドを一発打つだけで、 自動的にイメージのビルドやってくれて超らくちん というデモをしました
従来のBuildpackとの違い
仕様がみっちり決められた https://github.com/buildpack/spec
内部的にはV3扱い Buildpack API v2a - Heroku Buildpack API v2b -
Cloud Foundry Buildpack API v3 - Cloud Native Buildpacks https://github.com/buildpack/resources
Platform Lifecycle Buildpack
Platform Lifecycle Buildpack アプリケーションのソースコードを実行 可能なアーティファクトに変換するソフト ウェア
Buildpack • 考え方はこれまでのBuildpackとあまり変わらない • DetectとBuildの2コマンドが必須 • Releaseは無くなった https://github.com/buildpack/samples/tree/master/nodejs-buildpack/bin
Platform Lifecycle Buildpack Buildpackを利用し、アーティファクトを OCIイメージに変換するソフトウェア
Lifecycle • 4つのフェーズを経てOCIイメージを作成 • 最後に実行 https://github.com/buildpack/spec/blob/master/buildpack.md#launch Detection Analysis Build Export
Launch
Lifecycle https://github.com/buildpack/spec/blob/master/buildpack.md#launch Detection Analysis Build Export Launch Buildpackの/bin/detectを 実行してDetect
Lifecycle https://github.com/buildpack/spec/blob/master/buildpack.md#launch Detection Analysis Build Export Launch 既存イメージを解析して、変 更点を検出
Lifecycle https://github.com/buildpack/spec/blob/master/buildpack.md#launch Detection Analysis Build Export Launch 変更点があった部分に対し、 Buildpackの/bin/buildを実行
Lifecycle https://github.com/buildpack/spec/blob/master/buildpack.md#launch Detection Analysis Build Export Launch 変更されたレイヤーを イメージに反映
Implementation buildpack/lifecycle には、Lifecycleのリファレンス実装がある https://github.com/buildpack/lifecycle
pack CLI コマンドラインからBuildpackを利用したイメージ作成ができるツール。 今回のデモで利用 Lifecycleリファレンス実装を利用している https://github.com/buildpack/pack
Platform Lifecycle Buildpack アプリ開発者(エンドユーザー)に Buildpackを利用した機能を提供するソ フトウェア
Platform
Platform
None
Cloud Native Buildpackによってもたらされるもの • 開発者の生産性向上 ◦ アプリケーション開発に注力できる ▪ どうやってDockerfile書くかとか気にしなくていい ◦
一貫した操作でデプロイできる ▪ cf push / git push ▪ packコマンド叩けば様々な言語で同様にイメージ作成できる • 持続可能な運用 ◦ Opsのガードレールの元で開発者の生産性を高める ◦ スケーラブルなセキュリティ
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push 詳しい人
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
どのbase imageにするか Dockerfileの書き方の知識 イメージビルドの環境 プライベートレジストリへの push このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが
これまでのCaaSのワークフロー Dockerfileの作成 docker build docker push Kubernetes manifestの作成 kubectl apply
このDockerfile酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが コンテナ疲れ™
誰もが同じようなことをやる 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の作成 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酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人
誰もが同じようなことをやる 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酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが クソが クソが
誰もが同じようなことをやる 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酷いですね(笑) イメージサイズでかいですよ(笑) 詳しい人 クソが クソが クソが コンテナ疲れ™
Cloud Native Buildpacksのときのワークフロー pack build Buildpackの管理と builderの提供 Dev Ops Kubernetes
manifestの作成 kubectl apply
Cloud Native Buildpacksのときのワークフロー Dev cf push / git push
Cloud Native Buildpacksのときのワークフロー Dev kubectl apply
今後のCloud Native Buildpack • Cloud FoundryのBuildpackは、順次V3 API対応が行われる ◦ 現時点ではNodeJS Buildpackが対応完了
◦ https://github.com/cloudfoundry/nodejs-cnb.git
もくもく会やってます
その他詳しい情報 buildpacks.io https://buildpacks.io/ spec https://github.com/buildpack/spec samples https://github.com/buildpack/samples まずは試そう 仕様を詳しく知るなら Buildpackのサンプルを
見るなら
Transforming How The World Builds Software © Copyright 2017 Pivotal
Software, Inc. All rights Reserved.