際際滷

際際滷Share a Scribd company logo
Copyright(c)2022 NTT Corp. All Rights Reserved.
京顎庄鉛糸悪庄岳の古勣と恷除の字嬬
2022/8/20
?云佚幄塀氏芙
ソフトウェアイノベ`ションセンタ
繐 砂峠
Container Runtime Meetup #4
Copyright(c)2022 NTT Corp. All Rights Reserved. 2
兆念
繐 砂峠
GitHub:@ktock / Twitter:@TokunagaKohei
侭奉 ?云佚幄塀氏芙
d龍
コンテナ、蒙にコンテナランタイム
containerdレビュワ、BuildKitメンテナ
Container Runtime Meetup慌揖\
Copyright(c)2022 NTT Corp. All Rights Reserved. 3
?肝
BuildKitの古勣
1.
3. BuildKitの嶄?の古勣
4. BuildKit v0.10からのC嬬と
これからのBuildKit
2. BuildKitのさまざまなC嬬
Copyright(c)2022 NTT Corp. All Rights Reserved. 4
BuildKitの古勣
1.
?肝
3. BuildKitの嶄?の古勣
4. BuildKit v0.10からのC嬬と
これからのBuildKit
2. BuildKitのさまざまなC嬬
Copyright(c)2022 NTT Corp. All Rights Reserved. 5
BuildKitの古勣
l Moby穗造離灰鵐謄淵咼襯瀬廛蹈献Дト
l `docker build`(勣`DOCKER_BUILDKIT=1`)のコアコンポ`ネントsince 18.09
l Dockerに泙蕕Kubernetes貧でのビルドや?のビルダフレ`ムワ`クとして
も聞われる
l Moby&Docker, img, OpenFaaS Cloud, container build interface,
Tekton Pipelines, The Sanic builud tool, vab, Rio, kim, PouchContainer,
Docker Buildx, Okteto Cloud, Earthly earthfiles, Gitpod, Dagger, envd
l ?Z?Dockerfile, Buildipacks, Mockerfile, Gockerfile, bldr, HLB,
Earthly, Cargo Wharf, Nix, mopy, envd, cue(Dagger)
?箭
https://github.com/moby/buildkit#used-by
https://github.com/moby/buildkit#exploring-llb
Copyright(c)2022 NTT Corp. All Rights Reserved. 6
BuildKitプロジェクトのあゆみ
2018 2019 2020 2021 2022
v0.3.0 v0.4.0 v0.5.0 v0.8.0 v0.10.0
(10?) (3?) (4?) (12?) (3?)
?2017
[1] https://docs.docker.com/engine/release-notes/18.09/#new-features ; [2] https://docs.docker.com/engine/release-notes/19.03/#19030 ; [3] https://github.com/knative/build-templates/pull/70 ; [4]
https://github.com/tektoncd/catalog/pull/20 ; [5] https://github.com/moby/buildkit/pull/1446 ; [6] https://github.com/moby/buildkit/pull/2522 ; [7] https://github.com/moby/buildkit/pull/2615
v0.6.0
(8?)
v0.7.0
(3?)
v0.9.0
(7?)
11? Docker Engine 18.09に?[1]
3? Docker EngineにBuildx plugin?[2]
10? Knative Build Templateに?[3]
5? Tektonに?☆[4]
4? Earthlyに?☆ [5]
☆ BuildKitプロジェクトへの鷂?児
12? Gitpodに?☆ [6]
2? Daggerに?☆ [7]
Copyright(c)2022 NTT Corp. All Rights Reserved. 7
4つの?から?るBuildKit
dockerd
BuildKit
docker build
Docker API
buildkitd
buildctlなど
販吭のツ`ル Cluster
buildkitd
buildkitd
buildkitd
buildkitd
buildctl
buildkitd
DockerのビルドC嬬
(`DOCKER_BUILDKIT=1`)
?Dockerfileビルダ
Dockerfile
販吭の
ビルド
峰?Z
Kubernetes鬚
蛍柊ビルダ
?の
ビルダ/ランタイム
フレ`ムワ`ク
Dockerfile
Copyright(c)2022 NTT Corp. All Rights Reserved. 8
?1?Dockerの?何(docker build)
l `docker build`のg廾since 18.09
l h廠篳`DOCKER_BUILDKIT=1`を峺協することでBuildKitを嗤浸できる
l dockerd にBuildKitが岷俊y栽されている
dockerd
BuildKit
docker build
Docker API
Copyright(c)2022 NTT Corp. All Rights Reserved. 9
?2??Dockerfileビルダ
l `buildkitd`というデ`モンを聞ってDockerfileのビルドが辛嬬gRPC APIを戻工。 buildkitd
のクライアントとして嘛するビルダがある
? Docker Buildx(瘁峰) https://github.com/docker/buildx
? nerdctl: Docker札Qのcontainerd CLI https://github.com/containerd/nerdctl
l buildkitが戻工するライブラリを聞ってbuildkitdをアプリケ`ションに托めzむことも辛嬬
? e.g. img https://github.com/genuinetools/img
? Jess Frazelle (Oxide Computer)が_k。daemonless, rootlessなイメ`ジビルダ
img
buildkitd
docker buildx
gRPC API
nerdctl build
buildctl
gRPC API
BuildKit
CLI
Copyright(c)2022 NTT Corp. All Rights Reserved. 10
?3?Kubernetes鬚鰻嵒▲咼襯
l buildkitdをKubernetes貧で蛍柊借Pさせることが辛嬬
l さまざまなデプロイパタ`ンがある
Deployment+Service StatefulSet Job
ランダムロ`ドバランシング。
レジストリを初したキャッ
シュ慌嗤により?堀なビルド
が辛嬬。
クライアント箸任離踪`ドバ
ランシング。consistent hash
を聞えば紳糞弔縫踪`カル
キャッシュを試?辛嬬。
ワンショットなビルドg?。
BuildKitデ`モンの?豚借咾
音勣。ロ`カルキャッシュは
ビルドのたびに茅。
Cluster
BuildKit
buildctl
BuildKit
BuildKit
BuildKit
Service
BuildKit
buildctl
BuildKit
BuildKit BuildKit
buildctl
+
BuildKit
kubectl
Cluster Cluster
https://github.com/moby/buildkit/tree/master/examples/kubernetes
Copyright(c)2022 NTT Corp. All Rights Reserved. 11
?4??のビルダ/ランタイムフレ`ムワ`ク
l BuildKitはLLBというビルドの嶄g燕Fをサポ`ト
l Dockerfileのみならず?なビルド?の?Zを協x辛嬬
l ビルドだけでなくテストなどもg?辛嬬なCI/CDフレ`ムワ`クを戻工するプロジェク
トもあるe.g. Earthly, Dagger
BuildKit
Mockerfile Gockerfile HLB
Earthly
bldr
Nix
Cargo
Wharf
mopy envd
Dockerfile Buildpacks
´
Dagger
(cue)
https://github.com/moby/buildkit#exploring-llb
Copyright(c)2022 NTT Corp. All Rights Reserved. 12
BuildKitの古勣
1.
?肝
3. BuildKitの嶄?の古勣
4. BuildKit v0.10からのC嬬と
これからのBuildKit
2. BuildKitのさまざまなC嬬
Copyright(c)2022 NTT Corp. All Rights Reserved. 13
K双マルチステ`ジビルド
l 光ステ`ジがK双にg?されることで症`docker build`より?堀晒されている
l 症`docker build`ではシ`ケンシャルなg?だった
stage C
FROM image AS stage-a
RUN build a
FROM image AS stage-b
RUN build b
FROM scratch
COPY --from=stage-a a /
COPY --from=stage-b b /
stage A stage B
Copyright(c)2022 NTT Corp. All Rights Reserved. 14
Dockerfileの宴旋?
l type=bind: context嶄のディレクトリや麿のステ`ジなどからマウント辛嬬
RUN --mount
l type=cache: コンパイラなどで聞うキャッシュをビルドgで慌嗤できる
l type=secret: 蜘畜Iなどsecretをイメ`ジにきzむことなく聞?辛嬬
l type=ssh: SSH agentU喇でSSH keyにアクセスできる
RUN --mount=type=cache,target=/root/.cache/go-build go build ´
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials aws s3 cp s3://´ ´
RUN --mount=type=ssh ssh Cq CT git@gitlab.com
docker/dockerfile:1.2
https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md
Copyright(c)2022 NTT Corp. All Rights Reserved. 15
Dockerfileの宴旋?
l RUN、COPY凋綜の哈方にエスケ`プ?忖oしに}方?にわたる凋綜をける
l shebangやset凋綜が聞える
heredoc
FROM ubuntu
RUN <<EOT
set -eu -o pipefail
mkdir -p /foo/bar
echo hello > /foo/bar/hello
EOT
FROM python
RUN <<EOT
#!/usr/bin/env python
print(^hello world ̄)
EOT
docker/dockerfile:1.4
FROM ubuntu
COPY <<EOT /foo
foo
bar
EOT
https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md
Copyright(c)2022 NTT Corp. All Rights Reserved. 16
Dockerfileの宴旋?
l キャッシュミスがしにくくなるよう恷m晒が仏された
l --link=falseとなり、COPY枠のsymlinkが{られないという`いに廣吭
COPY --link docker/dockerfile:1.4
https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md
FROM ubuntu:22.04 AS dev
RUN echo foo > /foo
FROM busybox:1.34
COPY --link --from=dev /foo /
FROM ubuntu:22.04 AS dev
RUN echo foo > /foo
FROM alpine:3.16
COPY --link --from=dev /foo /
キャッシュを聞いまわせる
Copyright(c)2022 NTT Corp. All Rights Reserved. 17
マルチプラットフォ`ムイメ`ジ
l ?つのイメ`ジに}方のプラットフォ`ム鬚韻離ぅ瓸`ジをめzめる
l ランタイムは?蛍が借Pするホストのプラットフォ`ムに栽うものをxんでpullする
l Docker Buildxでビルド辛嬬[1]: https://medium.com/nttlabs/buildx-multiarch-2c6c2df00ca2
? QEMU聞??gDockerfileに筝音勣だがパフォ`マンスペナルティあり
? Dockerfile坪でクロスコンパイラ吉聞??壼い。Dockerfileに筝が駅勣
? タ`ゲットア`キテクチャのマシンを?吭してSSHU喇でビルド?壼い。マシンをe
余?吭する駅勣がある
docker buildx build Ct my/image Cpush ?
--platfom linux/amd64,linux/arm64 .
docker run my/image
Dockerfile
amd64?イメ`ジ
arm?イメ`ジ
???
amd64マシン
armマシン
マルチプラットフォ`
ム鬋ぅ瓸`ジ
pull
pull
[1] Akihiro Suda. ^Preparation toward running Docker on ARM Mac: Building multi-arch images with Docker BuildX ̄. https://medium.com/nttlabs/buildx-multiarch-2c6c2df00ca2
Copyright(c)2022 NTT Corp. All Rights Reserved. 18
リモ`トキャッシュ
l ビルドY惚はBuildKitをg?しているホスト貧だけでなく、レジストリなどリモ`トへの
キャッシュ隠隔が辛嬬
l Kubernetesでの蛍柊ビルドやCIジョブなど、ノ`ドgでキャッシュを慌嗤するのに聞える
l レジストリ參翌にもGitHub ActionsやS3へのキャッシュ鯉{もexperimentalにサポ`ト
local registry
inline
BuildKit
cache
ロ`カルなディレクトリ
にキャッシュ隠隔
キャッシュzみのイメ`
ジをレジストリにpush
BuildKit
image
+ cache
BuildKit
image cache
イメ`ジとキャッシュを
e?にレジストリにpush
Copyright(c)2022 NTT Corp. All Rights Reserved. 19
LLB?ビルド協xの嶄g燕F
LLB is to Dockerfile what LLVM IR is to C.
https://github.com/moby/buildkit#exploring-llb
l LLBにさえQできれば、販吭の?Zで峰したビルドをBulidKitでg?辛嬬
l ビルド?を協xしたDAGを燕Fするデ`タ夛protocol buffers
FROM busybox AS foo
RUN echo foo > /foo
FROM alpine AS bar
RUN echo bar > /bar
FROM scratch
COPY --from=foo /foo /
COPY --from=bar /bar /
LLB
Dockerfile
Copyright(c)2022 NTT Corp. All Rights Reserved. 20
さまざまなBuildKit?Z(?何)
Earthly Earthfile: https://github.com/earthly/earthly
l Earthly TechnologiesによるCI/CDフレ`ムワ`ク
l MakefileとDockerfileを栽わせたような隈でCI/CDのロジックがける
Dagger: https://github.com/dagger/dagger
l DaggerによるCI/CDフレ`ムワ`ク
l cue?ZでCI/CDロジックがける
buildkit-nix: https://github.com/AkihiroSuda/buildkit-nix
l Akihiro Sudaさんmobyメンテナ, BuildKitメンテナが_k
l Nix derivationをDockerfileとして?い、イメ`ジをビルドする
?Zのリスト?https://github.com/moby/buildkit#exploring-llb
? 2022/8/18r泣で11リストされている
? YAMLでビルドを峰するものや、RustやPythonなど蒙協?Zのアプリケ`ションのビル
ドに聞えるものなどいろいろある
Copyright(c)2022 NTT Corp. All Rights Reserved. 21
BuildKitの古勣
1.
?肝
3. BuildKitの嶄?の古勣
4. BuildKit v0.10からのC嬬と
これからのBuildKit
2. BuildKitのさまざまなC嬬
Copyright(c)2022 NTT Corp. All Rights Reserved. 22
BuildKitの撹?クライアントサ`バ
l ?蕉議に?ればクライアント?サ`バ
? クライアントライブラリが戻工されている
? サ`バ箸buildkitdというデ`モンプロセス
l サ`バはクライアントにgRPC API戻工
? ビルド、ビルドY惚の竃?、キャッシュ荷恬、
eコンテナg?などが辛嬬
l クライアントとサ`バは揖?ホスト貧でなくてもいい
クライアント
サ`バ
(buildkitd)
gRPC API
Copyright(c)2022 NTT Corp. All Rights Reserved.
クライアント
23
BuildKitクライアント
l クライアントライブラリを聞いサ`バにビルドを峺?
? ビルド協x?ZのO協
? ビルドY惚竃?枠の峺協
? キャッシュのインポ`ト?エクスポ`ト枠
l BuildKitのAPIは褒?
? clientもソ`スファイル?ビルドコンテキスト?レ
ジストリJ^秤鵑覆匹鯡畊するgRPC APIを隔つ
? buildkitdはビルド嶄駅勣に鬉犬謄ライアントにそ
れらをリクエスト
サ`バ
(buildkitd)
gRPC APIU喇で
ビルド峺?
gRPC
client
コンテキストや
credsを脅業勣箔
セッショ
ンサ`バ
Copyright(c)2022 NTT Corp. All Rights Reserved. 24
BuildKitクライアントツ`ルの箭
l buildctl https://github.com/moby/buildkit
? BuildKitプロジェクトで_kされるCLI
? ビルドやキャッシュ砿尖などBuildKit APIに?院するひ
ととおりのC嬬が聞える
l Docker Buildx https://github.com/docker/buildx
? Dockerによって_kされるBuildKit鬚吋咼襯CLI
? `docker build`にはないBuildKitのC嬬(リモ`トキャッ
シュ、multi-platform、Kubernetesでの蛍柊ビルド, etc)
が旋?辛嬬
サ`バ
(buildkitd)
クライアント
gRPC client?session
Copyright(c)2022 NTT Corp. All Rights Reserved. 25
BuildKitサ`バ
l ビルドにvするほとんどのことが?われる
? ビルド協xのパ`ス
? ビルド、キャッシュ
? ビルドY惚のエクスポ`ト, etc´
l gRPCU喇で荷恬?のControl APIを巷_
? ロ`カルのunixソケットU喇
? リモ`トのクライアントへの巷_も辛嬬
l ビルド協x?ZをLLBにQするコンポ`ネントがプラ
ガブル
? BuildKitにパッチを輝てることなく販吭の?Zのサ
ポ`トが辛嬬
クライアント
サ`バ
(buildkitd)
gRPC API
Copyright(c)2022 NTT Corp. All Rights Reserved. 26
BuildKitサ`バを撹する麼勣なコンポ`ネント
l frontend
? ソ`ス?Zのパ`スやLLBへのQ
? プラグインとして辛嬬
l solver
? LLBをg?する
? K双g?やキャッシュの旋?によりビルドを?堀晒
l worker
? コンテナやキャッシュ、snapshot、レイヤコンテンツ、
ビルドY惚のエクスポ`トなどを砿尖
? runcベ`スのg廾とcontainerdベ`スのg廾がある
? CNI pluginも旋?辛嬬
クライアント
gRPC API
frontend
solver
worker
サ`バbuildkitd
Copyright(c)2022 NTT Corp. All Rights Reserved. 27
BuildKit frontendによる販吭のビルド?Zの協x
l ソ`ス?ZをLLBにQするコンポ`ネント
l コンテナとしてg廾し、BuildKitにプラグイン辛嬬
l フロントエンドコンテナにはstdioを宥じてGateway APIと
よばれるgRPC APIが戻工される
? このAPIU喇でビルドコンテキストを函誼
? LLBを恬撹しそのg?をこのAPIU喇でBuildKitに峺?
クライアント
gRPC API
frontend
Gateway API戻工
(stdioU喇)
l Gateway APIはクライアント鬚APIとしても戻工される
l クライアントから?ると、buildkitd荷恬?APIControl
APIとGateway APIの2つが?える
l クライアントにフロントエンド議C嬬をg廾辛嬬
a?
サ`バbuildkitd
コンテナ
Copyright(c)2022 NTT Corp. All Rights Reserved. 28
2Nのフロントエンド
gateway.v0
? コンテナ晒された販吭のフロントエンドをg?
dockerfile.v0
? Dockerfileフロントエンドg廾
? BuildKitにビルトインされている
? ?で峺協されたフロントエンドをgateway.v0U喇でg?辛嬬
# syntax=docker/dockerfile:1
? 販吭バ`ジョンのdockerfile?フロントエンドを聞?辛嬬。
? BuildKit云悶のアップグレ`ドなしにフロントエンドだけ厚仟できる
? e.g. 恷仟のDockerfile?をしたり、バグ俐屎を鞭け函ったり
# syntax=ghcr.io/akihirosuda/buildkit-nix:v0.0.2
☆ イメ`ジ兆にダイジェストまで峺協することでバ`ジョンの耕協もできる
? Nix derivationをDockerfileとして聞える
箭
# syntax=イメ`ジ兆
Copyright(c)2022 NTT Corp. All Rights Reserved. 29
BuildKitの古勣
1.
?肝
3. BuildKitの嶄?の古勣
4. BuildKit v0.10からのC嬬と
これからのBuildKit
2. BuildKitのさまざまなC嬬
Copyright(c)2022 NTT Corp. All Rights Reserved. 30
BuildKit v0.10/dockerfile v1.4の麼なC嬬
l MergeOpとDiffOp (`COPY --link`凋綜のサポ`ト)
? MergeOp: }方の鏡?のファイルシステムをマ`ジする
? キャッシュミスがしにくくなるよう恷m晒が仏された`COPY --link`凋綜に聞われる
? DiffOp: 2つのファイルシステムの餓蛍を箔める
l eStargzイメ`ジの恬撹
? eStargz: イメ`ジの?堀pull(lazy pulling)を辛嬬にするイメ`ジフォ`マット
? イメ`ジのpull頼阻を棋たずにコンテナ軟咾辛嬬
? ベ`スイメ`ジやremote cacheをeStargzにフォ`マット辛嬬
? FROM凋綜のpull頼阻を棋たずに瘁AのRUN凋綜などをg?辛嬬
$ docker buildx build ?
-o type=registry,name=ktokunaga/hello:esgz,oci-mediatypes=true,compression=estargz .
Copyright(c)2022 NTT Corp. All Rights Reserved. 31
BuildKit v0.10/dockerfile v1.4の麼なC嬬
l イメ`ジレイヤのRsフォ`マットとしてzstdがサポ`ト
? Zstandard/zstd: facebookが戻宛する?堀なRsフォ`マット
? https://github.com/facebook/zstd
? OCI Image Specificationでもzstdがイメ`ジレイヤとして協xされている(隆リリ`ス)
? https://github.com/opencontainers/image-spec/pull/788
? containerd(>=1.5.0)やPodmanなどのランタイムでもzstdのg?がサポ`トされている
? Dockerにもv22.06でサポ`トが?る嚠協: https://github.com/moby/moby/pull/41759
Copyright(c)2022 NTT Corp. All Rights Reserved. 32
これからのBuildKitに鬚韻迅h
l FROMのイメ`ジやADDにおけるgit repositoryのバ`ジョンを耕協するC嬬pinning
? https://github.com/moby/buildkit/pull/2943
? https://github.com/moby/buildkit/issues/2794
l イメ`ジのレイヤにセットされるtimestampの耕協
? https://github.com/moby/buildkit/pull/2918
l Dockerfileのコメントから岷俊Usageドキュメントを恬撹するC嬬
? https://github.com/moby/buildkit/pull/2841
l SBoM?撹のサポ`ト
? https://github.com/moby/buildkit/issues/2773
Copyright(c)2022 NTT Corp. All Rights Reserved. 33
これからのBuildKitに鬚韻迅h
l Dockerfile?の議デバッガ https://github.com/ktock/buildg
? breakpointや凋綜ごとにgHにコンテナを?ち貧げて嶄?を?たりできる
? gdb?の議CLIや、IDE(VS Code, Neovim, Emacs, ´)貧のGUIも聞える
? 繍栖議にはbuildxにもy栽されるはず
? https://github.com/docker/buildx/issues/1104
Copyright(c)2022 NTT Corp. All Rights Reserved. 34
まとめ
BuildKitの4つの?
C嬬
碧Mみ
恷除とこれからのBuildKit
? docker build勣`DOCKER_BUILDKIT=1`
? ?Dockerfileビルダ
? Kubernetesでのビルド
? 販吭のビルド峰?Zサポ`ト
? K双マルチステ`ジビルド
? RUN CmountやCOPY Clink、heredocなどDockerfile宴旋?
? マルチプラットフォ`ムイメ`ジのビルド
? リモ`トキャッシュ
? 販吭のビルド協x?Zの旋?
? クライアントサ`バ
? 販吭のfrontendをコンテナとしてプラグイン辛嬬
? MergeOp/DiffOp, eStargz, zstdなど
? サプライチェ`ンやDockerfileドキュメント?撹、デバッガなどのhがある
? Repo: https://github.com/moby/buildkit
? Slack: #buildkit on Docker Community Slack

More Related Content

What's hot (20)

PPTX
禽看界一艶姻から界看稼岳温庄稼艶姻糸への卞佩
Akihiro Suda
?
PDF
コンテナ隆UY仟繁が僥ぶコンテナ室宝秘壇
Kohei Tokunaga
?
PPTX
京顎庄鉛糸悪庄岳による互堀でセキュアなイメ`ジビルド
Akihiro Suda
?
PPTX
NGINXをBFF (Backend for Frontend)として旋喘した
Hitachi, Ltd. OSS Solution Center.
?
PDF
Dockerfile をくためのベストプラクティス盾h
Masahito Zembutsu
?
PDF
書三籾のいろいろなコンテナランタイムを曳熟してみた
Kohei Tokunaga
?
PDF
PFN のオンプレML児Pの函りMみ / オンプレML児P on Kubernetes ?PFN、ヤフ`?
Preferred Networks
?
PPTX
檎艶糸庄壊の蒙罿隼醵歎酬┐砲弔い
Yuji Otani
?
PDF
Apache Kafkaって云輝に寄嬋健拭絞嬾編^のオ`バ`ビュ`とd龍侮い咾僚B初゛
NTT DATA OSS Professional Services
?
PPTX
kubernetes兜伉宀がKnative Lambda Runtime乾ってみたKubernetes Novice Tokyo #13 k燕Y創
NTT DATA Technology & Innovation
?
PDF
コンテナの恬り圭仝禽看界一艶姻は戦圭で採をしているのか拭
Masahito Zembutsu
?
PDF
禽看界一艶姻イメ`ジの尖盾とコンテナのライフサイクル
Masahito Zembutsu
?
PDF
PFNのML/DL児Pを屶えるKubernetesにおける徭啝 / DevOpsDays Tokyo 2021
Preferred Networks
?
PDF
マイクロサ`ビスバックエンド粥永鴛のための檎掘皆意と乙檎永遺
disc99_
?
PDF
ARM CPUにおけるSIMDを喘いた互堀麻秘T
Fixstars Corporation
?
PDF
Dockerfileを個鋲するためのBest Practice 2019定井
Masahito Zembutsu
?
PDF
階g樹 Cloud Spanner Ov恙
Samir Hammoudi
?
PDF
Kubernetesのしくみ やさしく僥ぶ 坪何夛とア`キテクチャ`
Toru Makabe
?
PPTX
弊順匯わかりやすいClean Architecture
Atsushi Nakamura
?
PDF
Grafana LokiではじめるKubernetesロギングハンズオンNTT Tech Conference #4 ハンズオンY創
NTT DATA Technology & Innovation
?
禽看界一艶姻から界看稼岳温庄稼艶姻糸への卞佩
Akihiro Suda
?
コンテナ隆UY仟繁が僥ぶコンテナ室宝秘壇
Kohei Tokunaga
?
京顎庄鉛糸悪庄岳による互堀でセキュアなイメ`ジビルド
Akihiro Suda
?
NGINXをBFF (Backend for Frontend)として旋喘した
Hitachi, Ltd. OSS Solution Center.
?
Dockerfile をくためのベストプラクティス盾h
Masahito Zembutsu
?
書三籾のいろいろなコンテナランタイムを曳熟してみた
Kohei Tokunaga
?
PFN のオンプレML児Pの函りMみ / オンプレML児P on Kubernetes ?PFN、ヤフ`?
Preferred Networks
?
檎艶糸庄壊の蒙罿隼醵歎酬┐砲弔い
Yuji Otani
?
Apache Kafkaって云輝に寄嬋健拭絞嬾編^のオ`バ`ビュ`とd龍侮い咾僚B初゛
NTT DATA OSS Professional Services
?
kubernetes兜伉宀がKnative Lambda Runtime乾ってみたKubernetes Novice Tokyo #13 k燕Y創
NTT DATA Technology & Innovation
?
コンテナの恬り圭仝禽看界一艶姻は戦圭で採をしているのか拭
Masahito Zembutsu
?
禽看界一艶姻イメ`ジの尖盾とコンテナのライフサイクル
Masahito Zembutsu
?
PFNのML/DL児Pを屶えるKubernetesにおける徭啝 / DevOpsDays Tokyo 2021
Preferred Networks
?
マイクロサ`ビスバックエンド粥永鴛のための檎掘皆意と乙檎永遺
disc99_
?
ARM CPUにおけるSIMDを喘いた互堀麻秘T
Fixstars Corporation
?
Dockerfileを個鋲するためのBest Practice 2019定井
Masahito Zembutsu
?
階g樹 Cloud Spanner Ov恙
Samir Hammoudi
?
Kubernetesのしくみ やさしく僥ぶ 坪何夛とア`キテクチャ`
Toru Makabe
?
弊順匯わかりやすいClean Architecture
Atsushi Nakamura
?
Grafana LokiではじめるKubernetesロギングハンズオンNTT Tech Conference #4 ハンズオンY創
NTT DATA Technology & Innovation
?

Similar to 京顎庄鉛糸悪庄岳の古勣と恷除の字嬬 (20)

PPTX
京顎庄鉛糸悪庄岳による互堀でセキュアなイメ`ジビルド (LT)
Akihiro Suda
?
PPTX
DockerCon歌紗鷂 (`docker build`が30蔚參貧堀くなるなど)
Akihiro Suda
?
PDF
[Docker Tokyo #35] Docker 20.10
Akihiro Suda
?
PDF
RedHat MW 2015
omatsuha
?
PDF
[CNDT] 恷除のDockerの仟C嬬
Akihiro Suda
?
PPTX
DockerCon '17 Feedback at PaaS JP
Go Chiba
?
PPTX
ラズパイ2で咾 Docker PaaSを恬ってみたよ
npsg
?
PPTX
Wasm blazor and wasi 2
Takao Tetsuro
?
PDF
Dockerで[んでみよっか` YAPC::Asia Tokyo 2014
Masahiro Nagano
?
PPTX
ラズパイ2で咾 Docker PaaS
npsg
?
PPTX
Docker & Kubernetes児A
Daisuke Hiraoka
?
PDF
Gws 20120521 gradle
Nobuhiro Sue
?
PDF
コンテナ秤烏住算氏2
Masahide Yamamoto
?
PPTX
WebAssemblyとBlazor 、WebAssembly System InterfaceでコンテナライズのOを盾h
Takao Tetsuro
?
PDF
Docker for Windows & Web Apps for Containers g樹試喘室隈
Microsoft Corporation
?
PDF
Docker秘T-児A いまから兵めるDocker砿尖‐2nd Edition/
Masahito Zembutsu
?
PDF
はてなにおける@A議デプロイメントのF彜と Docker の秘
Yu Nobuoka
?
PDF
して僥べるクラウド室g! OpenShift
Etsuji Nakai
?
PDF
Android App Development with Gradle & Android Studio
Soichiro Kashima
?
京顎庄鉛糸悪庄岳による互堀でセキュアなイメ`ジビルド (LT)
Akihiro Suda
?
DockerCon歌紗鷂 (`docker build`が30蔚參貧堀くなるなど)
Akihiro Suda
?
[Docker Tokyo #35] Docker 20.10
Akihiro Suda
?
RedHat MW 2015
omatsuha
?
[CNDT] 恷除のDockerの仟C嬬
Akihiro Suda
?
DockerCon '17 Feedback at PaaS JP
Go Chiba
?
ラズパイ2で咾 Docker PaaSを恬ってみたよ
npsg
?
Wasm blazor and wasi 2
Takao Tetsuro
?
Dockerで[んでみよっか` YAPC::Asia Tokyo 2014
Masahiro Nagano
?
ラズパイ2で咾 Docker PaaS
npsg
?
Docker & Kubernetes児A
Daisuke Hiraoka
?
Gws 20120521 gradle
Nobuhiro Sue
?
コンテナ秤烏住算氏2
Masahide Yamamoto
?
WebAssemblyとBlazor 、WebAssembly System InterfaceでコンテナライズのOを盾h
Takao Tetsuro
?
Docker for Windows & Web Apps for Containers g樹試喘室隈
Microsoft Corporation
?
Docker秘T-児A いまから兵めるDocker砿尖‐2nd Edition/
Masahito Zembutsu
?
はてなにおける@A議デプロイメントのF彜と Docker の秘
Yu Nobuoka
?
して僥べるクラウド室g! OpenShift
Etsuji Nakai
?
Android App Development with Gradle & Android Studio
Soichiro Kashima
?
Ad

More from Kohei Tokunaga (15)

PDF
P2P Container Image Distribution on IPFS With containerd and nerdctl
Kohei Tokunaga
?
PDF
eStargzイメ`ジとlazy pullingによる互堀なコンテナ軟
Kohei Tokunaga
?
PDF
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Kohei Tokunaga
?
PDF
Introduction and Deep Dive Into Containerd
Kohei Tokunaga
?
PDF
禽看界一艶姻と悪顎恢艶姻稼艶岳艶壊をかけめぐる
Kohei Tokunaga
?
PDF
Starting up Containers Super Fast With Lazy Pulling of Images
Kohei Tokunaga
?
PDF
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Kohei Tokunaga
?
PDF
BuildKitでLazy Pullを嗤燭砲靴謄咼襯匹鰓腓する
Kohei Tokunaga
?
PDF
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
Kohei Tokunaga
?
PDF
Stargz Snapshotter: イメ`ジのpullを福待しcontainerdでコンテナを互堀に軟咾垢
Kohei Tokunaga
?
PDF
Startup Containers in Lightning Speed with Lazy Image Distribution
Kohei Tokunaga
?
PDF
Stargz Snapshotter: イメ`ジのpullを福待してcontainerdでコンテナを互堀に軟咾垢
Kohei Tokunaga
?
PDF
或遺鴛ランタイムの永遊仝姻顎稼界々を県遨する
Kohei Tokunaga
?
PDF
或遺鴛厩2殖−X楚互堀なイケてる肝弊旗イメ`ジ碧の恷仟強鬚鰔屬┐茲Γ
Kohei Tokunaga
?
PDF
5蛍で尅り卦るKubeCon EU 2019坤薀鵐織ぅ爐肇ぅ瓸`ジの}ダイジェスト
Kohei Tokunaga
?
P2P Container Image Distribution on IPFS With containerd and nerdctl
Kohei Tokunaga
?
eStargzイメ`ジとlazy pullingによる互堀なコンテナ軟
Kohei Tokunaga
?
Faster Container Image Distribution on a Variety of Tools with Lazy Pulling
Kohei Tokunaga
?
Introduction and Deep Dive Into Containerd
Kohei Tokunaga
?
禽看界一艶姻と悪顎恢艶姻稼艶岳艶壊をかけめぐる
Kohei Tokunaga
?
Starting up Containers Super Fast With Lazy Pulling of Images
Kohei Tokunaga
?
Build and Run Containers With Lazy Pulling - Adoption status of containerd St...
Kohei Tokunaga
?
BuildKitでLazy Pullを嗤燭砲靴謄咼襯匹鰓腓する
Kohei Tokunaga
?
The overview of lazypull with containerd Remote Snapshotter & Stargz Snapshotter
Kohei Tokunaga
?
Stargz Snapshotter: イメ`ジのpullを福待しcontainerdでコンテナを互堀に軟咾垢
Kohei Tokunaga
?
Startup Containers in Lightning Speed with Lazy Image Distribution
Kohei Tokunaga
?
Stargz Snapshotter: イメ`ジのpullを福待してcontainerdでコンテナを互堀に軟咾垢
Kohei Tokunaga
?
或遺鴛ランタイムの永遊仝姻顎稼界々を県遨する
Kohei Tokunaga
?
或遺鴛厩2殖−X楚互堀なイケてる肝弊旗イメ`ジ碧の恷仟強鬚鰔屬┐茲Γ
Kohei Tokunaga
?
5蛍で尅り卦るKubeCon EU 2019坤薀鵐織ぅ爐肇ぅ瓸`ジの}ダイジェスト
Kohei Tokunaga
?
Ad

京顎庄鉛糸悪庄岳の古勣と恷除の字嬬

  • 1. Copyright(c)2022 NTT Corp. All Rights Reserved. 京顎庄鉛糸悪庄岳の古勣と恷除の字嬬 2022/8/20 ?云佚幄塀氏芙 ソフトウェアイノベ`ションセンタ 繐 砂峠 Container Runtime Meetup #4
  • 2. Copyright(c)2022 NTT Corp. All Rights Reserved. 2 兆念 繐 砂峠 GitHub:@ktock / Twitter:@TokunagaKohei 侭奉 ?云佚幄塀氏芙 d龍 コンテナ、蒙にコンテナランタイム containerdレビュワ、BuildKitメンテナ Container Runtime Meetup慌揖\
  • 3. Copyright(c)2022 NTT Corp. All Rights Reserved. 3 ?肝 BuildKitの古勣 1. 3. BuildKitの嶄?の古勣 4. BuildKit v0.10からのC嬬と これからのBuildKit 2. BuildKitのさまざまなC嬬
  • 4. Copyright(c)2022 NTT Corp. All Rights Reserved. 4 BuildKitの古勣 1. ?肝 3. BuildKitの嶄?の古勣 4. BuildKit v0.10からのC嬬と これからのBuildKit 2. BuildKitのさまざまなC嬬
  • 5. Copyright(c)2022 NTT Corp. All Rights Reserved. 5 BuildKitの古勣 l Moby穗造離灰鵐謄淵咼襯瀬廛蹈献Дト l `docker build`(勣`DOCKER_BUILDKIT=1`)のコアコンポ`ネントsince 18.09 l Dockerに泙蕕Kubernetes貧でのビルドや?のビルダフレ`ムワ`クとして も聞われる l Moby&Docker, img, OpenFaaS Cloud, container build interface, Tekton Pipelines, The Sanic builud tool, vab, Rio, kim, PouchContainer, Docker Buildx, Okteto Cloud, Earthly earthfiles, Gitpod, Dagger, envd l ?Z?Dockerfile, Buildipacks, Mockerfile, Gockerfile, bldr, HLB, Earthly, Cargo Wharf, Nix, mopy, envd, cue(Dagger) ?箭 https://github.com/moby/buildkit#used-by https://github.com/moby/buildkit#exploring-llb
  • 6. Copyright(c)2022 NTT Corp. All Rights Reserved. 6 BuildKitプロジェクトのあゆみ 2018 2019 2020 2021 2022 v0.3.0 v0.4.0 v0.5.0 v0.8.0 v0.10.0 (10?) (3?) (4?) (12?) (3?) ?2017 [1] https://docs.docker.com/engine/release-notes/18.09/#new-features ; [2] https://docs.docker.com/engine/release-notes/19.03/#19030 ; [3] https://github.com/knative/build-templates/pull/70 ; [4] https://github.com/tektoncd/catalog/pull/20 ; [5] https://github.com/moby/buildkit/pull/1446 ; [6] https://github.com/moby/buildkit/pull/2522 ; [7] https://github.com/moby/buildkit/pull/2615 v0.6.0 (8?) v0.7.0 (3?) v0.9.0 (7?) 11? Docker Engine 18.09に?[1] 3? Docker EngineにBuildx plugin?[2] 10? Knative Build Templateに?[3] 5? Tektonに?☆[4] 4? Earthlyに?☆ [5] ☆ BuildKitプロジェクトへの鷂?児 12? Gitpodに?☆ [6] 2? Daggerに?☆ [7]
  • 7. Copyright(c)2022 NTT Corp. All Rights Reserved. 7 4つの?から?るBuildKit dockerd BuildKit docker build Docker API buildkitd buildctlなど 販吭のツ`ル Cluster buildkitd buildkitd buildkitd buildkitd buildctl buildkitd DockerのビルドC嬬 (`DOCKER_BUILDKIT=1`) ?Dockerfileビルダ Dockerfile 販吭の ビルド 峰?Z Kubernetes鬚 蛍柊ビルダ ?の ビルダ/ランタイム フレ`ムワ`ク Dockerfile
  • 8. Copyright(c)2022 NTT Corp. All Rights Reserved. 8 ?1?Dockerの?何(docker build) l `docker build`のg廾since 18.09 l h廠篳`DOCKER_BUILDKIT=1`を峺協することでBuildKitを嗤浸できる l dockerd にBuildKitが岷俊y栽されている dockerd BuildKit docker build Docker API
  • 9. Copyright(c)2022 NTT Corp. All Rights Reserved. 9 ?2??Dockerfileビルダ l `buildkitd`というデ`モンを聞ってDockerfileのビルドが辛嬬gRPC APIを戻工。 buildkitd のクライアントとして嘛するビルダがある ? Docker Buildx(瘁峰) https://github.com/docker/buildx ? nerdctl: Docker札Qのcontainerd CLI https://github.com/containerd/nerdctl l buildkitが戻工するライブラリを聞ってbuildkitdをアプリケ`ションに托めzむことも辛嬬 ? e.g. img https://github.com/genuinetools/img ? Jess Frazelle (Oxide Computer)が_k。daemonless, rootlessなイメ`ジビルダ img buildkitd docker buildx gRPC API nerdctl build buildctl gRPC API BuildKit CLI
  • 10. Copyright(c)2022 NTT Corp. All Rights Reserved. 10 ?3?Kubernetes鬚鰻嵒▲咼襯 l buildkitdをKubernetes貧で蛍柊借Pさせることが辛嬬 l さまざまなデプロイパタ`ンがある Deployment+Service StatefulSet Job ランダムロ`ドバランシング。 レジストリを初したキャッ シュ慌嗤により?堀なビルド が辛嬬。 クライアント箸任離踪`ドバ ランシング。consistent hash を聞えば紳糞弔縫踪`カル キャッシュを試?辛嬬。 ワンショットなビルドg?。 BuildKitデ`モンの?豚借咾 音勣。ロ`カルキャッシュは ビルドのたびに茅。 Cluster BuildKit buildctl BuildKit BuildKit BuildKit Service BuildKit buildctl BuildKit BuildKit BuildKit buildctl + BuildKit kubectl Cluster Cluster https://github.com/moby/buildkit/tree/master/examples/kubernetes
  • 11. Copyright(c)2022 NTT Corp. All Rights Reserved. 11 ?4??のビルダ/ランタイムフレ`ムワ`ク l BuildKitはLLBというビルドの嶄g燕Fをサポ`ト l Dockerfileのみならず?なビルド?の?Zを協x辛嬬 l ビルドだけでなくテストなどもg?辛嬬なCI/CDフレ`ムワ`クを戻工するプロジェク トもあるe.g. Earthly, Dagger BuildKit Mockerfile Gockerfile HLB Earthly bldr Nix Cargo Wharf mopy envd Dockerfile Buildpacks ´ Dagger (cue) https://github.com/moby/buildkit#exploring-llb
  • 12. Copyright(c)2022 NTT Corp. All Rights Reserved. 12 BuildKitの古勣 1. ?肝 3. BuildKitの嶄?の古勣 4. BuildKit v0.10からのC嬬と これからのBuildKit 2. BuildKitのさまざまなC嬬
  • 13. Copyright(c)2022 NTT Corp. All Rights Reserved. 13 K双マルチステ`ジビルド l 光ステ`ジがK双にg?されることで症`docker build`より?堀晒されている l 症`docker build`ではシ`ケンシャルなg?だった stage C FROM image AS stage-a RUN build a FROM image AS stage-b RUN build b FROM scratch COPY --from=stage-a a / COPY --from=stage-b b / stage A stage B
  • 14. Copyright(c)2022 NTT Corp. All Rights Reserved. 14 Dockerfileの宴旋? l type=bind: context嶄のディレクトリや麿のステ`ジなどからマウント辛嬬 RUN --mount l type=cache: コンパイラなどで聞うキャッシュをビルドgで慌嗤できる l type=secret: 蜘畜Iなどsecretをイメ`ジにきzむことなく聞?辛嬬 l type=ssh: SSH agentU喇でSSH keyにアクセスできる RUN --mount=type=cache,target=/root/.cache/go-build go build ´ RUN --mount=type=secret,id=aws,target=/root/.aws/credentials aws s3 cp s3://´ ´ RUN --mount=type=ssh ssh Cq CT git@gitlab.com docker/dockerfile:1.2 https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md
  • 15. Copyright(c)2022 NTT Corp. All Rights Reserved. 15 Dockerfileの宴旋? l RUN、COPY凋綜の哈方にエスケ`プ?忖oしに}方?にわたる凋綜をける l shebangやset凋綜が聞える heredoc FROM ubuntu RUN <<EOT set -eu -o pipefail mkdir -p /foo/bar echo hello > /foo/bar/hello EOT FROM python RUN <<EOT #!/usr/bin/env python print(^hello world ̄) EOT docker/dockerfile:1.4 FROM ubuntu COPY <<EOT /foo foo bar EOT https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md
  • 16. Copyright(c)2022 NTT Corp. All Rights Reserved. 16 Dockerfileの宴旋? l キャッシュミスがしにくくなるよう恷m晒が仏された l --link=falseとなり、COPY枠のsymlinkが{られないという`いに廣吭 COPY --link docker/dockerfile:1.4 https://github.com/moby/buildkit/blob/v0.10.3/frontend/dockerfile/docs/syntax.md FROM ubuntu:22.04 AS dev RUN echo foo > /foo FROM busybox:1.34 COPY --link --from=dev /foo / FROM ubuntu:22.04 AS dev RUN echo foo > /foo FROM alpine:3.16 COPY --link --from=dev /foo / キャッシュを聞いまわせる
  • 17. Copyright(c)2022 NTT Corp. All Rights Reserved. 17 マルチプラットフォ`ムイメ`ジ l ?つのイメ`ジに}方のプラットフォ`ム鬚韻離ぅ瓸`ジをめzめる l ランタイムは?蛍が借Pするホストのプラットフォ`ムに栽うものをxんでpullする l Docker Buildxでビルド辛嬬[1]: https://medium.com/nttlabs/buildx-multiarch-2c6c2df00ca2 ? QEMU聞??gDockerfileに筝音勣だがパフォ`マンスペナルティあり ? Dockerfile坪でクロスコンパイラ吉聞??壼い。Dockerfileに筝が駅勣 ? タ`ゲットア`キテクチャのマシンを?吭してSSHU喇でビルド?壼い。マシンをe 余?吭する駅勣がある docker buildx build Ct my/image Cpush ? --platfom linux/amd64,linux/arm64 . docker run my/image Dockerfile amd64?イメ`ジ arm?イメ`ジ ??? amd64マシン armマシン マルチプラットフォ` ム鬋ぅ瓸`ジ pull pull [1] Akihiro Suda. ^Preparation toward running Docker on ARM Mac: Building multi-arch images with Docker BuildX ̄. https://medium.com/nttlabs/buildx-multiarch-2c6c2df00ca2
  • 18. Copyright(c)2022 NTT Corp. All Rights Reserved. 18 リモ`トキャッシュ l ビルドY惚はBuildKitをg?しているホスト貧だけでなく、レジストリなどリモ`トへの キャッシュ隠隔が辛嬬 l Kubernetesでの蛍柊ビルドやCIジョブなど、ノ`ドgでキャッシュを慌嗤するのに聞える l レジストリ參翌にもGitHub ActionsやS3へのキャッシュ鯉{もexperimentalにサポ`ト local registry inline BuildKit cache ロ`カルなディレクトリ にキャッシュ隠隔 キャッシュzみのイメ` ジをレジストリにpush BuildKit image + cache BuildKit image cache イメ`ジとキャッシュを e?にレジストリにpush
  • 19. Copyright(c)2022 NTT Corp. All Rights Reserved. 19 LLB?ビルド協xの嶄g燕F LLB is to Dockerfile what LLVM IR is to C. https://github.com/moby/buildkit#exploring-llb l LLBにさえQできれば、販吭の?Zで峰したビルドをBulidKitでg?辛嬬 l ビルド?を協xしたDAGを燕Fするデ`タ夛protocol buffers FROM busybox AS foo RUN echo foo > /foo FROM alpine AS bar RUN echo bar > /bar FROM scratch COPY --from=foo /foo / COPY --from=bar /bar / LLB Dockerfile
  • 20. Copyright(c)2022 NTT Corp. All Rights Reserved. 20 さまざまなBuildKit?Z(?何) Earthly Earthfile: https://github.com/earthly/earthly l Earthly TechnologiesによるCI/CDフレ`ムワ`ク l MakefileとDockerfileを栽わせたような隈でCI/CDのロジックがける Dagger: https://github.com/dagger/dagger l DaggerによるCI/CDフレ`ムワ`ク l cue?ZでCI/CDロジックがける buildkit-nix: https://github.com/AkihiroSuda/buildkit-nix l Akihiro Sudaさんmobyメンテナ, BuildKitメンテナが_k l Nix derivationをDockerfileとして?い、イメ`ジをビルドする ?Zのリスト?https://github.com/moby/buildkit#exploring-llb ? 2022/8/18r泣で11リストされている ? YAMLでビルドを峰するものや、RustやPythonなど蒙協?Zのアプリケ`ションのビル ドに聞えるものなどいろいろある
  • 21. Copyright(c)2022 NTT Corp. All Rights Reserved. 21 BuildKitの古勣 1. ?肝 3. BuildKitの嶄?の古勣 4. BuildKit v0.10からのC嬬と これからのBuildKit 2. BuildKitのさまざまなC嬬
  • 22. Copyright(c)2022 NTT Corp. All Rights Reserved. 22 BuildKitの撹?クライアントサ`バ l ?蕉議に?ればクライアント?サ`バ ? クライアントライブラリが戻工されている ? サ`バ箸buildkitdというデ`モンプロセス l サ`バはクライアントにgRPC API戻工 ? ビルド、ビルドY惚の竃?、キャッシュ荷恬、 eコンテナg?などが辛嬬 l クライアントとサ`バは揖?ホスト貧でなくてもいい クライアント サ`バ (buildkitd) gRPC API
  • 23. Copyright(c)2022 NTT Corp. All Rights Reserved. クライアント 23 BuildKitクライアント l クライアントライブラリを聞いサ`バにビルドを峺? ? ビルド協x?ZのO協 ? ビルドY惚竃?枠の峺協 ? キャッシュのインポ`ト?エクスポ`ト枠 l BuildKitのAPIは褒? ? clientもソ`スファイル?ビルドコンテキスト?レ ジストリJ^秤鵑覆匹鯡畊するgRPC APIを隔つ ? buildkitdはビルド嶄駅勣に鬉犬謄ライアントにそ れらをリクエスト サ`バ (buildkitd) gRPC APIU喇で ビルド峺? gRPC client コンテキストや credsを脅業勣箔 セッショ ンサ`バ
  • 24. Copyright(c)2022 NTT Corp. All Rights Reserved. 24 BuildKitクライアントツ`ルの箭 l buildctl https://github.com/moby/buildkit ? BuildKitプロジェクトで_kされるCLI ? ビルドやキャッシュ砿尖などBuildKit APIに?院するひ ととおりのC嬬が聞える l Docker Buildx https://github.com/docker/buildx ? Dockerによって_kされるBuildKit鬚吋咼襯CLI ? `docker build`にはないBuildKitのC嬬(リモ`トキャッ シュ、multi-platform、Kubernetesでの蛍柊ビルド, etc) が旋?辛嬬 サ`バ (buildkitd) クライアント gRPC client?session
  • 25. Copyright(c)2022 NTT Corp. All Rights Reserved. 25 BuildKitサ`バ l ビルドにvするほとんどのことが?われる ? ビルド協xのパ`ス ? ビルド、キャッシュ ? ビルドY惚のエクスポ`ト, etc´ l gRPCU喇で荷恬?のControl APIを巷_ ? ロ`カルのunixソケットU喇 ? リモ`トのクライアントへの巷_も辛嬬 l ビルド協x?ZをLLBにQするコンポ`ネントがプラ ガブル ? BuildKitにパッチを輝てることなく販吭の?Zのサ ポ`トが辛嬬 クライアント サ`バ (buildkitd) gRPC API
  • 26. Copyright(c)2022 NTT Corp. All Rights Reserved. 26 BuildKitサ`バを撹する麼勣なコンポ`ネント l frontend ? ソ`ス?Zのパ`スやLLBへのQ ? プラグインとして辛嬬 l solver ? LLBをg?する ? K双g?やキャッシュの旋?によりビルドを?堀晒 l worker ? コンテナやキャッシュ、snapshot、レイヤコンテンツ、 ビルドY惚のエクスポ`トなどを砿尖 ? runcベ`スのg廾とcontainerdベ`スのg廾がある ? CNI pluginも旋?辛嬬 クライアント gRPC API frontend solver worker サ`バbuildkitd
  • 27. Copyright(c)2022 NTT Corp. All Rights Reserved. 27 BuildKit frontendによる販吭のビルド?Zの協x l ソ`ス?ZをLLBにQするコンポ`ネント l コンテナとしてg廾し、BuildKitにプラグイン辛嬬 l フロントエンドコンテナにはstdioを宥じてGateway APIと よばれるgRPC APIが戻工される ? このAPIU喇でビルドコンテキストを函誼 ? LLBを恬撹しそのg?をこのAPIU喇でBuildKitに峺? クライアント gRPC API frontend Gateway API戻工 (stdioU喇) l Gateway APIはクライアント鬚APIとしても戻工される l クライアントから?ると、buildkitd荷恬?APIControl APIとGateway APIの2つが?える l クライアントにフロントエンド議C嬬をg廾辛嬬 a? サ`バbuildkitd コンテナ
  • 28. Copyright(c)2022 NTT Corp. All Rights Reserved. 28 2Nのフロントエンド gateway.v0 ? コンテナ晒された販吭のフロントエンドをg? dockerfile.v0 ? Dockerfileフロントエンドg廾 ? BuildKitにビルトインされている ? ?で峺協されたフロントエンドをgateway.v0U喇でg?辛嬬 # syntax=docker/dockerfile:1 ? 販吭バ`ジョンのdockerfile?フロントエンドを聞?辛嬬。 ? BuildKit云悶のアップグレ`ドなしにフロントエンドだけ厚仟できる ? e.g. 恷仟のDockerfile?をしたり、バグ俐屎を鞭け函ったり # syntax=ghcr.io/akihirosuda/buildkit-nix:v0.0.2 ☆ イメ`ジ兆にダイジェストまで峺協することでバ`ジョンの耕協もできる ? Nix derivationをDockerfileとして聞える 箭 # syntax=イメ`ジ兆
  • 29. Copyright(c)2022 NTT Corp. All Rights Reserved. 29 BuildKitの古勣 1. ?肝 3. BuildKitの嶄?の古勣 4. BuildKit v0.10からのC嬬と これからのBuildKit 2. BuildKitのさまざまなC嬬
  • 30. Copyright(c)2022 NTT Corp. All Rights Reserved. 30 BuildKit v0.10/dockerfile v1.4の麼なC嬬 l MergeOpとDiffOp (`COPY --link`凋綜のサポ`ト) ? MergeOp: }方の鏡?のファイルシステムをマ`ジする ? キャッシュミスがしにくくなるよう恷m晒が仏された`COPY --link`凋綜に聞われる ? DiffOp: 2つのファイルシステムの餓蛍を箔める l eStargzイメ`ジの恬撹 ? eStargz: イメ`ジの?堀pull(lazy pulling)を辛嬬にするイメ`ジフォ`マット ? イメ`ジのpull頼阻を棋たずにコンテナ軟咾辛嬬 ? ベ`スイメ`ジやremote cacheをeStargzにフォ`マット辛嬬 ? FROM凋綜のpull頼阻を棋たずに瘁AのRUN凋綜などをg?辛嬬 $ docker buildx build ? -o type=registry,name=ktokunaga/hello:esgz,oci-mediatypes=true,compression=estargz .
  • 31. Copyright(c)2022 NTT Corp. All Rights Reserved. 31 BuildKit v0.10/dockerfile v1.4の麼なC嬬 l イメ`ジレイヤのRsフォ`マットとしてzstdがサポ`ト ? Zstandard/zstd: facebookが戻宛する?堀なRsフォ`マット ? https://github.com/facebook/zstd ? OCI Image Specificationでもzstdがイメ`ジレイヤとして協xされている(隆リリ`ス) ? https://github.com/opencontainers/image-spec/pull/788 ? containerd(>=1.5.0)やPodmanなどのランタイムでもzstdのg?がサポ`トされている ? Dockerにもv22.06でサポ`トが?る嚠協: https://github.com/moby/moby/pull/41759
  • 32. Copyright(c)2022 NTT Corp. All Rights Reserved. 32 これからのBuildKitに鬚韻迅h l FROMのイメ`ジやADDにおけるgit repositoryのバ`ジョンを耕協するC嬬pinning ? https://github.com/moby/buildkit/pull/2943 ? https://github.com/moby/buildkit/issues/2794 l イメ`ジのレイヤにセットされるtimestampの耕協 ? https://github.com/moby/buildkit/pull/2918 l Dockerfileのコメントから岷俊Usageドキュメントを恬撹するC嬬 ? https://github.com/moby/buildkit/pull/2841 l SBoM?撹のサポ`ト ? https://github.com/moby/buildkit/issues/2773
  • 33. Copyright(c)2022 NTT Corp. All Rights Reserved. 33 これからのBuildKitに鬚韻迅h l Dockerfile?の議デバッガ https://github.com/ktock/buildg ? breakpointや凋綜ごとにgHにコンテナを?ち貧げて嶄?を?たりできる ? gdb?の議CLIや、IDE(VS Code, Neovim, Emacs, ´)貧のGUIも聞える ? 繍栖議にはbuildxにもy栽されるはず ? https://github.com/docker/buildx/issues/1104
  • 34. Copyright(c)2022 NTT Corp. All Rights Reserved. 34 まとめ BuildKitの4つの? C嬬 碧Mみ 恷除とこれからのBuildKit ? docker build勣`DOCKER_BUILDKIT=1` ? ?Dockerfileビルダ ? Kubernetesでのビルド ? 販吭のビルド峰?Zサポ`ト ? K双マルチステ`ジビルド ? RUN CmountやCOPY Clink、heredocなどDockerfile宴旋? ? マルチプラットフォ`ムイメ`ジのビルド ? リモ`トキャッシュ ? 販吭のビルド協x?Zの旋? ? クライアントサ`バ ? 販吭のfrontendをコンテナとしてプラグイン辛嬬 ? MergeOp/DiffOp, eStargz, zstdなど ? サプライチェ`ンやDockerfileドキュメント?撹、デバッガなどのhがある ? Repo: https://github.com/moby/buildkit ? Slack: #buildkit on Docker Community Slack