web-dev-qa-db-ja.com

DockerとAMIの違い

AWSのコンテキスト:

AMIはソフトウェアのパッケージ化に使用され、EC2にデプロイできます。 Dockerはソフトウェアのパッケージ化にも使用でき、EC2にデプロイすることもできます。

両方の違いは何ですか?また、どのように選択しますか?

24
Schleir

AMIはイメージです。これは、新しいインスタンスを開始できるマシン全体です。 Dockerコンテナは、より軽量でポータブルです。 Dockerコンテナーはプロバイダー間で転送可能である必要がありますが、AMIは(簡単に)転送できません。

AMIは基本的にVMイメージです。Dockerコンテナは、隔離された環境でいくつかのVMで実行されるパッケージ化されたミニイメージです。

24
Jerry Vines

このリンクには、DockerとAMIの違いに関する詳細が記載されています。 https://forums.docker.com/t/how-would-you-differentiate-between-docker-vs-ec2-image/1235/2

6
Vinay

しかし、これは質問に直接答えませんが、それらがどのように使用されるかについての背景を提供します。

1つのアプローチは、Amazon AMI(または任意のAMI)でEC2インスタンスを起動し、その上でdockerコンテナー(すべての依存関係を含む)を実行することです。このアプローチでは、Dockerイメージは時間の経過とともに肥大化し、時間の経過に伴ってコンテナがドリフトします。また、Ec2を起動し、Dockerでアプリサーバーを起動する必要があるため、アプリケーションの起動と実行にかかる時間が長くなります。

別のアプローチは、「Immutable Ec2インスタンス」です。このアプローチでは、Amazon AMIをベースとして使用し、すべての依存関係をインストールして(シェルスクリプトまたはAnsibleを使用)、AMIでそれらをベイク処理します。素晴らしいツールであるHashicorp Packerを使用しています。ここでは、すべての依存関係(Java8、Tomcat、warファイルなど)がすでにAMIにインストールされているため、アプリケーションの実行にかかる時間は大幅に短縮されます。

実稼働ユースケースでは、Packerを使用してAMIを作成し、Terraformを使用してクラウドリソースを起動してこのAMIを使用します。これらすべてをJenkinsパイプラインで結びます。

0
VimalKumar