タイトルのサービスの基本的な違いすらわかりません。これらのサービスは、VMの構成/整理/管理に役立つソフトウェアを提供するだけですか、それともVMを実行するための物理インフラストラクチャを提供しますか?つまり、開発者とAWS、Rackspace、Azureの間の便利なインターフェイスにすぎませんか?
ではない正確に。
Chef/Puppetは「同じ」であり、構成管理です。それらを使用して仮想マシンまたはパブリック/プライベートクラウドを管理できますが、ほとんどの人はそのように使用する傾向はありません。それらは構成管理です。通常、仮想マシンが起動して目的の状態になると、これらが機能します。つまり、仮想マシンで必要なソフトウェア、追加する必要があるユーザー、必要な構成などです。したがって、インフラストラクチャのスケーリングに使用される傾向があります。
Vagrantは、仮想マシンとパブリック/プライベートクラウドの管理にも使用できますが、通常、1つのオフ環境でのみ使用されます。仮想マシンを作成するためのまとまりのあるファイルを提供します。シェフ/人形に似ていますが、大規模に使用される傾向はありません。
Dockerは別の獣です。これにはいくつかのコンポーネントがありますが、主に「バンドル」(注:それ以上の機能がありますが、ELI5の回答です)ソフトウェアで使用され、ホストシステム(またはインフラストラクチャ)を実行する必要があります。これは、アプリケーションに少しセキュリティを追加しますが、ほとんどの場合、アプリケーションを実行するための一貫した「OS」を提供します。
実際には、これらはすべて環境で利用できます。次に例を示します。
アプリケーションFunTimeがあるとします。これに貢献する開発者が8人いて、FunTimeはAWSのスケーラブルなインフラストラクチャで実行されるように設計されています。フロントエンド(FunTime-Front)とバックエンド(FunTime-API)を持つように設計されており、postgresが必要です。 4人の開発者がフロントエンドで作業し、4人の開発者がバックエンドで作業します。
私は次のようにします(この猫のスキンを作成する方法はたくさんありますが、これは1つの例です):
FunTime-FrontとFunTime-APIにはDockerを使用します。私はVagrantを使用して、開発者向けの開発環境をセットアップします(さまざまなコンポーネントを調整できるようにするため)。 Vagrantは、VMローカルで(または必要に応じてクラウド上で)起動し、Dockerをインストールし、FunTime-FrontおよびFunTime-APIのDockerイメージをプルダウンし、postgresをインストールして、postgresにダミーデータ、さまざまなコンポーネントにネットワークポートを構成します。
これで、開発者はローカルマシンに完全なFunTimeスタックを持っているので、自分で何かを設定する必要はありません。「vagrant up」と入力するだけです。
インフラストラクチャ側では、chef(またはパペット)を使用して環境を構成します:プロダクション、ステージ、および開発(または必要なもの)、そしてchefは「アプリケーション」サーバーにdockerをインストールし、postgresサーバーに「postgres」をインストールします、セキュリティ設定などを適用します。このように、関連するすべてのサーバーは同じです。サーバーを更新したりパッチを追加したりする必要がある場合は、構成管理を行うと簡単です。
すべてのケースでDockerが使用されるため、開発者のワークステーションを含め、環境間でアプリケーションに違いがありません。
これは、「まあ、それは私のローカルマシンで動作します!」という言い訳を聞かないようにするためです。よく。さらに、バンドルされたデプロイメントがある場合、Dockerを使用すると、アプリケーションのロールバックが非常に簡単になります。
それらがどのように使用できるかについてもう少し洞察が得られることを願っています。
日常会話のように売り込みます
Vagrant-同じプロジェクトで、理想的には数分以内に新しい開発者のマシンで開発環境を起動するため。通常、virtualboxの上で使用されますが、さまざまなマシンプロバイダーで使用できます。
Docker-ここでは仮想的なものは何もありません。実際のプロセスを想像して、必要なライブラリがサンドボックス化され、アーカイブとしてサーバーに送信されます。リソースの使用は、コマンドの実行時に決定されます。
Chef/Puppet-bashに入力したものを自動化してプロジェクトをセットアップするために使用できます(アプリケーションキーなどを除く)。これらを使用して、Dockerイメージまたはvagrant環境を構築できます。そのため、物理的な実稼働サーバーに存在する必要はありません。 Packer を参照してください。
AWS/Rackspace/Azure-IaaSプロバイダーです。プレーンな英語では、要求に応じてサーバーを起動し、SSHアクセスを提供します。もちろん、それだけではありません。
何を考えれば、それらは相互に使用できます。
これらのツールは展開を容易にするように見えましたが、経験則として、あなたとあなたのチームの時間を節約するのでない限り、それらを一緒に使用しないでください。手動でEC2を起動してプロジェクトをscp
手動で構成する方が簡単な場合があります。後で自動化できます。
時期尚早の最適化はすべての悪の根源です-トニー・ホアー卿
Chef:Chefは、インフラストラクチャをコードに変換する自動化プラットフォームです。一般に、構成管理ソフトウェアと呼ばれます。構成ファイル、ソフトウェア、ツール、アクセスタイプ、リソースタイプなど、さまざまなパラメーターで状態を定義できます。また、必要に応じて、さまざまな機能を備えたさまざまなマシンを構成できます。
Puppet:Puppetは、ターゲットマシンの特定の概念を抽象化し、構成プロセスをオペレーティングシステムにとらわれないようにするツールです。起動時に個別にパッケージをインストールしたり、バックグラウンドサービスを実行したりできます。コマンドを定義し、インストールが必要なパッケージ、依存関係のステップ、ファイルの内容、および問題なくマシンを稼働させるために必要なその他のことを定義します。
Vagrant:Vagrantは、仮想マシンの生成を支援するプロジェクトです。それはVirtualBoxのコマンドラインとして始まりました。これはVMのGemfileに似ています。ネットワーク、IP、共有フォルダーから開始するベースイメージを選択し、すべてをファイルに配置して、誰でも再利用して同じ構成済みマシンを生成できます。 Vagrantにはさまざまな拡張機能、プロビジョニングオプション、およびVMプロバイダーがあります。VirtualBox、VMwareを実行でき、EC2でインスタンスを作成できるほど十分に拡張可能です。
Docker:Docker。依存関係のあるアプリケーションをソフトウェア開発の標準化されたユニットにパッケージ化できます。したがって、開発者、QA、およびテストの間の摩擦を減らします。アプリケーションを動的に変更し、毎日新しい機能を追加し、サービスをスケールアウトして問題の領域をすばやく変更します。 Dockerは、基盤となるインフラストラクチャを気にする必要のないアプリケーションによるネットワーク、検出、サービス検出などのPaaSへのインターフェイスとして、興奮する場所に身を置いています。はい、それらはまだ運用中のDockerの問題です(すべての主要企業が既にインフラストラクチャをDockerに移行していると考えられます)が、うまくいけば、Dockerチームと貢献者がこれらの問題に懸命に取り組んでいるため、これらの問題の解決策が見つかるでしょう。 Dockerボリュームドライバーを使用すると、サードパーティのコンテナーデータ管理ソリューションで、データベース、Key-Valueストア、その他のステートフルアプリケーションなどのデータを操作するコンテナーにデータボリュームを提供できます。ご覧のとおり、ボリュームプラグインとしてのrexrayは、高度なストレージ機能を提供します。 emccode/rexrayついにイメージとランタイムだけでなく、それ以上のものに合意し始めました。