Docker vs Kaniko: daemonなしでイメージをビルドする
Dockerは特権的なdaemon経由でイメージをビルドする。KanikoはDockerfileからコンテナ内でdaemonなし、rootなしでビルドし、Kubernetesに理想的だ。
Dockerは標準的なイメージビルダーだが、daemonと通常は特権アクセスを必要とする。Kaniko (Google) は、コンテナ内で完全にuserspaceでDockerfileからイメージをビルドする - daemonなし、Docker socketなし - ため、非特権のKubernetesベースCIでイメージをビルドするのに人気がある。
| Docker | Kaniko | |
|---|---|---|
| daemonの要否 | 必要 | 不要 |
| 特権 | しばしば特権 | 非特権 |
| 最適な環境 | VM、標準runner | Kubernetes、制限されたrunner |
| ローカル開発との一致 | 高い | ビルドのみ |
| cache | layer cache + BuildKit | registryへのlayer cache |
CIにおいて
Docker daemonを備えた標準的なVM runnerでは、Docker (BuildKit付き) が最もシンプルで高速だ。KanikoはKubernetes内でビルドする場合や、Docker socketや特権モードを禁止するrunner上でその居場所を得る - daemonなしにDockerfileからビルドしpushする。Kanikoのcacheは、ローカルなdaemon cacheではなくregistry cacheを介して機能する。
高速化する
registryにlayer cacheをpushして再利用し、再ビルドが変更されていないstageをスキップするようにする。両者はCI runnerで動く。高速なマネージドrunnerがイメージのビルドそのものを短縮する。
結論
daemonを備えた標準的なrunner: BuildKit付きのDocker。daemonなし、非特権、あるいはKubernetes内のビルド: Kaniko。runnerのセキュリティと分離の制約で選ぶ。
関連ガイド
Kaniko vs BuildKit: Daemonless Image Builds ComparedKaniko vs BuildKit for CI: in-container daemonless builds vs rootless BuildKit, caching, and speed. Which bui…
docker build vs BuildKit: Faster Image Builds in CILegacy docker build vs BuildKit for CI: parallelism, cache mounts, secrets, and build speed. Which backend ma…
Docker vs Podman: Which Container Engine for CI?Docker vs Podman for CI: daemon vs daemonless, rootless security, compatibility, and pipeline fit. Which cont…