Skip to content
Latchkey

Packer vs Docker: マシンイメージ vs コンテナ

Packer は多くのプラットフォーム向けにマシンイメージ(AMI、VM イメージ)をビルドします。Docker はコンテナイメージをビルドします - 異なるデプロイ先向けの異なる成果物です。

Packer(HashiCorp)は、単一のソース設定から複数のプラットフォームにわたって同一のマシンイメージ - AMI、Azure イメージ、VM イメージ - をビルドすることを自動化します。Docker は container engine で実行されるコンテナイメージをビルドします。両者は競合というより、異なる成果物タイプ向けのツールです: 完全なマシンイメージ vs レイヤー化されたコンテナ。

PackerDocker
成果物マシンイメージ(AMI、VM)コンテナイメージ
対象VM、クラウドインスタンスcontainer runtime
boot モデル完全な OS イメージコンテナ内のプロセス
マルチプラットフォーム多くの builderOCI registry
最適な用途golden な VM/AMI イメージコンテナ化されたアプリ

CI で

runtime や Kubernetes にコンテナを出荷するなら Docker を使います。golden な VM またはクラウドイメージを焼くなら Packer を使います - 例えば tooling を AMI に事前インストールして、インスタンスが起動時に準備完了になるようにします。多くの pipeline は両方を使います: ベースインスタンスイメージには Packer、その中のアプリには Docker。インフラが実際に何を動かすかで選びましょう。

高速化する

どちらのイメージ build も重いです。レイヤーを cache し(Docker)、ベースイメージを再利用し(Packer)、build を CI で実行します。より高速な managed runner は、これらの長時間のイメージ焼き付けを短縮します。

結論

コンテナをデプロイする場合: Docker。VM/クラウドのマシンイメージ(AMI)を焼く場合: Packer。両者は異なる成果物を対象とし、しばしば一緒に機能します - host イメージには Packer、アプリには Docker。

関連ガイド