web-dev-qa-db-ja.com

DockerとPackerの違いは何ですか?そして、イメージをプロビジョニングするとき、どちらを優先すべきですか?

パッカーとドッカーはどう違うのですか?プロビジョニング/メンテナンスが簡単/迅速なものはどれですか?その理由は? Dockerファイルを持つことの長所と短所は何ですか?

25
Abhineetraj

Docker は、構築、配布、実行するためのシステムです Dockerコンテナー 。コンテナはLinuxおよびWindowsで実行できます。

Packer は、コンテナおよび仮想マシンのイメージの作成を管理する自動ビルドシステムです。イメージを出力し、必要なプラットフォームで実行できます。

V1.1の場合-Alicloud ECS、Amazon EC2、Azure、CloudStack、DigitalOcean、Docker、Google Cloud、Hyper-V、LXC、LXD、1&1、OpenStack、Oracle OCI、Parallels、ProfitBricks、QEMU、Triton、VirtualBox、VMware

ドッカーDockerfile

Dockerは Dockerfile を使用して、コンテナの構築方法に関する特定の指示とルールのセットを持つビルドを管理します。

画像はレイヤーで構築されます。各FROMRUNADDCOPYコマンドは、Dockerイメージに含まれるレイヤーを変更します。これらのレイヤーはキャッシュすることができ、ビルドのスピードアップに役立ちます。各レイヤーを個別にアドレス指定することもできます。これにより、複数のイメージがレイヤーを共有する場合のディスクの使用とダウンロードの使用に役立ちます。

Dockerfileには少し学習曲線があります。従うべきプラクティスについては、いくつかの 公式Dockerイメージ を調べるのが最善です。

Packers Dockerビルダー

Packerは、コンテナイメージをビルドするためにDockerfileを必要としません。指定されたベースイメージ(FROMなど)から開始します。その後、Packerを使用すると、そのイメージの上で "Provisioners" という標準のシステム構成ツールを実行できます。 Ansible、Chef、Salt、Shellsスクリプトなど。このイメージは単一レイヤーとしてエクスポートされるため、Dockerfileビルドに比べてレイヤーのキャッシュ/アドレス指定の利点が失われます。

Packerでは、--privilegedとして実行したり、ビルド時にボリュームをマウントしたりするなど、Dockerビルドでは許可されないビルドコンテナーへのいくつかの変更が許可されます。

Packerを使用するのは、複数のプラットフォーム用のイメージを構築し、同じセットアップを使用する場合です。また、 provisioner があれば、既存のビルドスクリプトを簡単に使用できます。

36
Matt