分離された環境を作成するには、VagrantまたはDockerを使用する必要がありますか?[閉まっている]


2083

私は開発とデプロイメントにUbuntuを使用しており、分離された環境を作成する必要があります。

この目的のために、VagrantまたはDockerを検討しています。長所と短所は何ですか、またはこれらのソリューションはどのように比較されますか?


27
両方が結合可能になりました:docs.vagrantup.com/v2/provisioning/docker.html
Alp

78
ミッチェルとソロモンHykes:あなたの質問は2つのサービスの作家の回答の両方を取得するのに十分幸運である
itsazzad

4
新しい要約をしたいと思います-質問はほとんど間違っています。正しい質問は次のとおりです。分離された環境を作成するには、Vagrantまたはdocker-composeを使用する必要がありますか?その答えは、Vagrantとdocker-composeが環境を記述するのと同じタスクを実行するためです。代わりに、DockerをVirtualboxと比較する必要があります。違いは、VagrantはDocker、VMWare、Virtualboxなどの仮想化をWindows、Linux、またはOSXで使用できることですが、docker-composeはLinuxベースのDockerイメージのみを使用できることです。
PHZ.fi-Pharazon 2018年

私にとっての答えは、「通常の仕事であなたにとってスピードはどれほど重要か」です。VagrantはDockerよりも遅いことがわかりました。dockerでは、特に最初のpullの後、dockerのキャッシュとレイヤーのアプローチにより、開発者として最も簡単かつ迅速に使用できるようになります
Michael Durrant

回答:


1155

あなたの目的が分離である場合、Dockerがあなたの望んでいるものだと思います。

Vagrantは仮想マシンマネージャーです。仮想マシンの構成とプロビジョニングをスクリプト化できます。ただし、VirtualBox(またはその他)に依存する仮想マシンであり、オーバーヘッドが非常に大きくなります。巨大になる可能性のあるハードドライブファイルが必要であり、RAMを大量に消費し、パフォーマンスがあまり良くない場合があります。

一方、DockerはLXCを介してカーネルcgroupとネームスペースを使用します。これは、ホストと同じカーネルと同じファイルシステムを使用していることを意味します。コンテナーdocker buildのプロビジョニングと構成を処理するために、コマンドでDockerfileを使用できます。docs.docker.comに、Dockerfileを作成する方法の例があります。とても直感的です。

Vagrantを使用する唯一の理由は、UbuntuボックスでBSD、Windows、またはその他のLinux以外の開発を行う必要がある場合です。それ以外の場合は、Dockerを使用します。


13
残念ながらまだです。32ビットシステムを使用している場合、dockerを実行するには64ビットのゲストシステムを備えたVMが必要です。しかし、go1.1と32ビットのサポートが良くなって、ドッキングウィンドウはすぐに32ビットのアーチをサポートすることも可能である
creack

8
これはMacとWindowsに当てはまりますが、docker 0.7以降、どのLinuxディストリビューションでも問題なく動作します。機能していないものをご存知の場合は、お知らせください。また、MacまたはWindowsスタック(可能性は低いですが発生する可能性があります)がない限り、Linux以外の場所でDockerを実行する必要はありません。DockerクライアントはMacでも問題なく動作し、BSDでもすぐに動作し、デーモンは最終的にBSD、Solaris、Macをサポートするようになります。
2014年

9
誰かがこれらのコメントを読んだ場合、Dockerはわずか12日前(blog.docker.com/2014/06/its-here-docker-1-0)にver1.0にヒットし、さまざまなプラットフォームの多くが安定していることを知っているはずです&今(サポートdocs.docker.com/installation
JorgeArtware

17
vagrantにはLXCとdockerプロビジョナーがあります。ただし、VagrantとDockerは根本的に異なります。Vagrantは純粋に開発環境向けであり、dockerはむしろ本番環境およびLinux専用です。
Dannyboy 2014年

2
DockerがWindows 10 Pro以降およびWindows Server 2016で動作するようになりました。Windows10 HomeからWindows 10 Proにアップグレードして、Dockerアプリをインストールしました。これで、Windows 10でLinux dockerイメージを実行できるようになりました。すばらしいです。
PrestonDocks 2016

2339

免責事項:私はヴァグラントを書いた!しかし、私はVagrantを作成したため、ほとんどの時間をDockerなどのソフトウェアを含むDevOpsの世界に住んでいます。私はVagrantを使用している多くの企業と協力しており、多くの企業がDockerを使用しており、2つがどのように相互作用するかを理解しています。

話をする前に、直接的な答えを述べます。特定のシナリオ(自分で作業している、Linuxで作業している、本番環境でDockerを使用している)では、Dockerだけに固執して単純化できます。他の多くのシナリオ(後で説明します)では、それほど簡単ではありません。

VagrantとDockerを直接比較するのは正しくありません。一部のシナリオでは重複しますが、大多数では重複しません。実際、より適切な比較は、VagrantとBoot2Docker(Dockerを実行できる最小OS)のようなものです。Vagrantは、抽象化の観点からDockerより上のレベルであるため、ほとんどの場合、それは公平な比較ではありません。

Vagrantは、開発を目的としてアプリやサービスを実行するための機能を起動します。これは、VirtualBox、VMwareにあります。AWSやOpenStackのようにリモートにすることもできます。その中で、コンテナーを使用する場合、Vagrantは気にせず、それを受け入れます。たとえば、Dockerコンテナーを自動的にインストール、プルダウン、ビルド、および実行できます。Vagrant 1.6では、VagrantはDocker ベースの開発環境を備えており、Linux、Mac、Windows全体でVagrantと同じワークフローでDockerの使用をサポートしています。Vagrantは、ここでDockerを置き換えることを試みていません。Dockerプラクティスを採用しています。

Dockerは、特にDockerコンテナーを実行します。Vagrantと直接比較している場合:具体的には(Dockerコンテナーのみを実行できます)、柔軟性が低く(どこかにLinuxまたはLinuxホストが必要)ソリューションです。もちろん、本番またはCIについて話している場合、Vagrantに匹敵するものはありません!Vagrantはこれらの環境には存在しないため、Dockerを使用する必要があります。

組織がすべてのプロジェクトでDockerコンテナーのみを実行していて、Linuxで実行している開発者しかいない場合は、Dockerが確実に機能します。

それ以外の場合、Dockerを単独で使用することの利点はわかりません。Vagrantが提供するものの多くが失われるため、実際のビジネス/生産性の利点があります。

  • VagrantはVirtualBox、VMware、AWS、OpenStackなどのマシンを起動できます。必要なものは関係ありません。Vagrantが起動できます。Dockerを使用している場合、VagrantはこれらのいずれにもDockerをインストールできるため、その目的で使用できます。

  • Vagrantは、すべてのプロジェクトに対する単一のワークフローです。言い換えれば、Dockerコンテナー内にあるかどうかに関係なく、プロジェクトを実行するために人々が学ばなければならないことの1つにすぎません。たとえば、将来、Dockerと直接競合する競合他社が発生した場合、Vagrantもそれを実行できます。

  • Vagrantは、Windows(XPに戻る)、Mac(10.5に戻る)、およびLinux(カーネル2.6に戻る)で動作します。3つのケースすべてで、ワークフローは同じです。Dockerを使用する場合、Vagrantはこれら3つのシステムすべてでDockerを実行できるマシン(VMまたはリモート)を起動できます。

  • Vagrantは、ネットワークやフォルダーの同期など、高度な機能または重要な機能を構成する方法を知っています。例:Vagrantは静的IPをマシンまたは転送ポートに接続する方法を知っており、使用するシステム(VirtualBox、VMwareなど)に関係なく構成は同じです。同期フォルダーの場合、Vagrantはローカルに取得するための複数のメカニズムを提供しますリモートマシンにファイルを転送します(VirtualBox共有フォルダー、NFS、rsync、Samba [プラグイン]など)。Dockerを使用している場合は、VagrantのないVMを備えたDockerでも、手動でこれを実行する必要があります。そうしないと、Vagrantを再発明する必要があります。

  • Vagrant 1.6は、Dockerベースの開発環境をファーストクラスでサポートしています。これはLinuxでは仮想マシンを起動せず、MacおよびWindowsで仮想マシンを自動的に起動します。最終的な結果として、Dockerでの作業はすべてのプラットフォームで統一されていますが、Vagrantはネットワーキング、同期フォルダーなどの面倒な詳細を処理します。

私がVagrantの代わりにDockerを使用することを支持して聞いた特定の反論に対処するには:

  • 「可動部分が少ない」-はい、そうです。Dockerをすべてのプロジェクトで独占的に使用している場合はそうです。それでも、Dockerロックインの柔軟性を犠牲にしています。過去、現在、未来のプロジェクトでDockerを使用しないことにした場合、より多くの可動部分があります。Vagrantを使用していた場合、残りをサポートする可動部品が1つあります。

  • 「もっと速い!」-Linuxコンテナを実行できるホストが用意できたら、Dockerは、仮想マシンを起動するよりもコンテナを実行するほうが確実に高速です。ただし、仮想マシン(またはリモートマシン)の起動には1回限りのコストがかかります。1日を通して、ほとんどのVagrantユーザーは実際にVMを破棄することはありません。これは、開発環境にとって奇妙な最適化です。Dockerが本当に優れている本番環境では、コンテナーをすばやくスピンアップ/スピンダウンする必要性を理解しています。

DockerとVagrantを比較することは非常に困難であり、正しくないと私は確信していることを明確にしたいと思います。開発環境では、Vagrantはより抽象的でより一般的です。Docker(およびVagrantのように動作させるためのさまざまな方法)は、Vagrantが提供する他のすべてを無視して、Vagrantの特定の使用例です。

結論として、非常に具体的なユースケースでは、DockerはVagrantに取って代わる可能性があります。ほとんどの場合、そうではありません。VagrantはDockerの使用を妨げません。それは実際にその経験をよりスムーズにするためにできることをします。Vagrantの目標はどのシステムでも同じようにうまく機能することなので、これが真実でないとわかった場合は、改善のための提案をさせていただきます。

これで問題が解決することを願っています!


4
@JaredMarkellたぶん彼は、ProtoboxなどのVagrantマシンを管理できるWebベースのサービスを探していると思います。
ライアンケネディ

73
@ミッチェル私はこれをそのように詳細に説明してくれてありがとうと言いたかっただけです。もちろん、完全に客観的になることは不可能です。そのため、ニュアンスや、それらが使用されるさまざまな状況を説明するのに時間を割いていただきありがとうございます。今日のさまざまなツールに関する混乱の多くは、ツールが重複していることだと思います。多くの人々は、誰かが何をすべきかを指示し、実装できる、万能のソリューションを望んでいます。あなたの答えの素晴らしさは、根本的な質問に答えることです:どうすれば孤立した環境を作成できますか?(ツールに関係なく)。
ジョーダン


3
@OğuzÇelikdemirVagrantはそれ以上のことができます。もちろん、すべてのプロジェクトに特定の仮想マシンを準備した場合、これは持続します。しかし、開発中にサービス/デーモン/設定を追加してしまうことがよくあります(たとえば、開発中にプロジェクトでRabbitMQを使用することを決定した場合)。純粋にVMのアプローチでは、RabbitMQをインストールして構成した新しいイメージを準備し、開発者にVMをこの新しいイメージに変更するように強制する必要があります。Vagrantの場合-私はVagrant構成に適切な行を追加していますvagrant provision。すべての開発者はVMを簡単に(を使用して)アップグレードできます。
TomaszStruczyński2015

5
(「開示」を意味し、「免責事項」ではなく重要な何かを明らかにし、責任を否定する:english.stackexchange.com/q/115850
Jerry101

1418

私はDockerの作者です。

簡単に言えば、マシンを管理したい場合は、Vagrantを使用する必要があります。また、アプリケーション環境を構築して実行する場合は、Dockerを使用する必要があります。

Vagrantは、仮想マシンを管理するためのツールです。Dockerは、アプリケーションを軽量コンテナにパッケージ化して構築およびデプロイするためのツールです。コンテナは、ほとんどすべてのソフトウェアコンポーネントとその依存関係(実行可能ファイル、ライブラリ、構成ファイルなど)を保持でき、保証された再現可能なランタイム環境で実行できます。これにより、一度アプリをビルドしてどこにでもデプロイすることが非常に簡単になります。テスト用にラップトップに、次にライブデプロイ用に別のサーバーに配置するなどです。

LinuxではDockerしか使用できないというのは、よくある誤解です。それは不正解です。MacおよびWindowsにDockerをインストールすることもできます。DockerをMacにインストールすると、コンテナーのラッパーとして機能する小さなLinux VM(ディスク上で25 MB!)がバンドルされます。インストールすると、これは完全に透過的です。Dockerコマンドラインをまったく同じ方法で使用できます。これにより、両方の長所が得られます。非常に軽量で、テストが簡単で、移動が簡単なコンテナーを使用して、アプリケーションをテストおよび開発できます(再利用可能なコンテナーを共有するためのhttps://hub.docker.comを参照してください)。 Dockerコミュニティ)、そして仮想マシンの管理の詳細について心配する必要はありません。これはとにかく目的を達成するための手段にすぎません。

理論的には、Dockerの抽象化レイヤーとしてVagrantを使用することが可能です。次の2つの理由により、これはお勧めしません。

  • まず、VagrantはDockerの優れた抽象化ではありません。Vagrantは仮想マシンを管理するために設計されました。Dockerは、アプリケーションランタイムを管理するように設計されています。つまり、設計上、Dockerはより豊かな方法でアプリケーションと対話でき、アプリケーションランタイムに関する詳細情報を持っています。Dockerのプリミティブは、プロセス、ログストリーム、環境変数、コンポーネント間のネットワークリンクです。Vagrantのプリミティブは、マシン、ブロックデバイス、sshキーです。Vagrantは単にスタックの下位に位置し、コンテナーとやり取りできる唯一の方法は、「ブート」および「ログイン」できる別の種類のマシンのふりをすることです。したがって、確かに、Dockerプラグインで「vagrant up」と入力すると、かなりのことが起こります。Dockerができることのすべての代わりになりますか?ネイティブDockerを数日間試して、自分の目で確かめてください。

  • 次に、ロックイン引数です。「抽象としてVagrantを使用する場合、Dockerにロックされることはありません!」。マシンを管理するように設計されたVagrantの観点からは、これは完全に理にかなっています。コンテナーは別の種類のマシンではないのですか?Amazon EC2やVMwareと同様に、プロビジョニングツールを特定のベンダーに関連付けないように注意する必要があります。これはロックインを作成します-Vagrantですべてを抽象化する方が良いでしょう。これを除いて、Dockerのポイントを完全に逃しています。Dockerはマシンをプロビジョニングしません。どこにでもドロップできる軽量のポータブルランタイムでアプリケーションをラップします。

アプリケーション用に選択するランタイムは、マシンのプロビジョニング方法とは関係ありません。たとえば、他の誰かがプロビジョニングしたマシン(たとえば、システム管理者がデプロイしたEC2インスタンス、おそらくVagrantを使用)にアプリケーションをデプロイしたり、Vagrantがまったくプロビジョニングできないベアメタルマシンにアプリケーションをデプロイしたりするのはかなり頻繁です。逆に、Vagrantを使用して、アプリケーションの開発とは何の関係もないマシン(たとえば、すぐに使用できるWindows IISボックスなど)をプロビジョニングできます。または、Vagrantを使用して、Dockerを使用しないプロジェクト用のマシンをプロビジョニングできます。たとえば、依存関係の管理やサンドボックス化にrubygemsとrvmの組み合わせを使用している可能性があります。

要約すると、Vagrantはマシンの管理用であり、Dockerはアプリケーション環境の構築と実行用です。


396
この答えの浮浪者の側面は正しくないことに注意したいだけです。Vagrantはマシンの管理用ではなく、Vagrantは開発環境の管理用です。Vagrantがマシンを起動するという事実は、ほとんど歴史的です。Vagrantの次のバージョンは、ホストまたは任意のVM(Mac、Win)でプロバイダーとしてDockerを直接使用して開発環境を起動するファーストクラスのサポートを備えています。また、誰かが(ホストまたはVMで)必要な場合は、未加工のLXCを起動することもできます。Vagrantは、移植可能な開発環境を作成するための最善の方法(VMを作成するかどうかに関係なく)に関心があります。
ミッチェル

7
@Davideこれは、より詳細にそれを説明します。vagrantup.com/blog/...
ミッチェル

48
「LinuxではDockerしか使用できないというのはよくある誤解です」確かにそうですが、DockerではLinuxしか使用できないと言っても間違いありません。さまざまな環境構成(異なるデータベース、PHPバージョン、キャッシュバックエンドなど)でアプリケーションを実行するテストランナーをセットアップする場合、Dockerコンテナーを使用して簡単に実行できます。しかし、私のアプリケーションがWindows IIS環境、またはBSDやOSXで適切に実行されるかどうかはわかりません。
Mixologic、2014年

10
Vagrantにはdockerの
Alp

19
投稿が古くなっています。Vagrantは現在、プロバイダーとしてDockerをサポートしています。また、VagrantとDockerを連携させてブログで使用する方法を示すビデオがいくつかあります。
sargas 14

86

私はDockerの経験がないことを認めて、私の返信の前置きとして、非常にきちんとしたソリューションであると思われるものの熱心な観察者として以外に、多くの牽引力を得ています。

私はVagrantでかなりの量の経験があり、強くお勧めできます。LXCベースではなくVMベースであるという点で、それは確かにより重いソリューションです。ただし、適切なラップトップ(8 GB RAM、i5 / i7 CPU)では、開発ツールと一緒にVagrant / VirtualBoxを使用してVMを実行しても問題はないことがわかりました。

Vagrantのすばらしい点の1つは、構成を自動化するためのPuppet / Chef / shellスクリプトとの統合です。これらのオプションのいずれかを使用して本番環境を構成している場合は、取得しようとしているものとほぼ同じ開発環境を作成できます。これはまさに必要なことです。

Vagrantのもう1つの優れた点は、Vagrantfileをアプリケーションコードと共にバージョン管理できることです。つまり、チームの他の全員がこのファイルを共有でき、全員が同じ環境設定で作業していることが保証されます。

興味深いことに、VagrantとDockerは実際には補完的である場合があります。Vagrantは、さまざまな仮想化プロバイダーをサポートするように拡張できます。Dockerは、近い将来サポートされるプロバイダーの1つである可能性があります。このトピックに関する最近の議論については、https://github.com/dotcloud/docker/issues/404を参照してください


7
皆さん、私はdockerの実験的なvagrantプロバイダーをリリースしました:github.com/fgrehm/docker-provider
fgrehm 2013年

2
Dockerは仮想化ではありませんが、同じホストカーネルを使用して独自のコンテナー内でOSを実行します。他のVMのようなプロバイダーではないため、DockerはVagrantによって既にサポートされています。
Aftab Naveed 2014年

1
DockerはOS自体の仮想化であり、暗黙的に基盤となるハードウェアを再利用します。コンテナで実行されているファイルシステム、ネットワーク、プロセスを抽象化および分離する仮想化です。
jose.angel.jimenez

63

それらは非常に相補的です。

私はすべてのプロジェクトでVirtualBox、Vagrant、Dockerの組み合わせを数か月間使用しており、次の利点を強く感じています。

Vagrantでは、Chefのソロプロビジョニングを完全に排除でき、Vagrantファイルに必要なのは、Dockerをインストールする単一の小さなシェルスクリプトを実行するマシンを準備することだけです。つまり、すべてのプロジェクトのVagrantfilesはほとんど同じで非常に単純です。

ここに典型的なVagrantfileがあります

# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "mark2"
  config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  [3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
    config.vm.network :forwarded_port, guest: p, host: p
  end
  config.vm.network :private_network, ip: "192.168.56.20"
  config.vm.synced_folder ".", "/vagrant", :type => "nfs"
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "2048"]
    vb.customize ["modifyvm", :id, "--cpus", "2"]
  end
  # Bootstrap to Docker
  config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
  # Build docker containers
  config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
  # Start containers
  # config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end

dockerをインストールするBootstrapファイルは次のようになります

#!/usr/bin/env bash
echo 'vagrant  ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y

実行する必要があるすべてのサービスを取得するために、次のようなdocker_startスクリプトがあります。

#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211  ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"

この例では、MongoDB、Elastisearch、RabbitMQおよびMemcachedを実行しています。

非ドッカーChefのソロ構成は、かなり複雑になります。

最後の大きなプラスは、本番環境に移行するときに得られます。Dockerを実行するのに十分な構成があるだけで、実際にはほとんど作業を行わないという点で、開発環境をすべて同じホストのインフラストラクチャに変換します。

興味があれば、私自身のWebサイトに、開発環境に関するより詳細な記事があります。

Vagrant / Docker開発環境の実装


2
そのすべてのdocker_startオーケストレーションを実行しましたが、コンテナーを一緒にリンクする手間はありませんでした。Vagrantで実行しているので、ハードコードされたポート番号を使用しているだけですか?
2014年

6
こんにちはWineSoakedです。上記の例では、実際にこれらすべてのサービスを使用するコンテナは示されていません。上記のブログ投稿を見ると、プロジェクトの開発コンテナーを起動する別のスクリプトscript / vagrant / docker_webがあります。これは実際にdocker runコマンドで--linkを使用しており、Railsプロジェクトはdockerによって注入された環境変数を使用してサービスに接続します。
Mark Stratmann、2014年

1
両方の製品がマージされる可能性があることがわかります。環境テストおよびアプリラッパーのドッカーとしての浮浪者。両方をマージすると、単一のアプリをテストすることも、多くのシナリオで単体テストを実行することもできます。「テストプラットフォームサービス」の多くは、Vagrant + Dockerを使用していると思います。
m3nda

8
「彼らは非常に無料です。」—実際、どちらも無料で使用できます。
Underyx 2016年

2
こんにちは@koppor私が最後にdocker machineを使用したのは約3か月前で、まだ戻っていません。私が抱えていた問題は、VMWareドライバーを使用しているときに、MACホストホストからVMを実行しているdockerへのフォルダーの共有にバグがあることでした。これは、Macでローカルにコードを編集できず、変更をdockerコンテナーに反映できないことを意味しました。彼らがまだそれを修正しているかどうかはわかりませんが、修正されたら実際に切り替えます。しかし、私はこの回答を書いてから、すべてのコンテナーオーケストレーションをdocker composeに切り替えました
Mark Stratmann

53

Vagrant-lxcVagrantのプラグインで、LXCを使用してVagrantをプロビジョニングできます。デフォルトのvagrant VM(VirtualBox)が持つすべての機能を備えているわけではありませんが、Dockerコンテナーよりも柔軟性があります。リンクに、見る価値のある機能を示すビデオがあります。


5
そして、ここにプロジェクトgithub.com/fgrehm/vagrant-lxc
gertas

46

Vagrantを使用すると、Dockerをプロバイダーとして使用できます。http://docs.vagrantup.com/v2/docker/。VirtualBoxまたはVMwareの代わりにDockerプロバイダーを使用できます。

VagrantでのプロビジョニングにDockerを使用することもできます。これは、Dockerをプロバイダーとして使用する場合とは大きく異なります。http://docs.vagrantup.com/v2/provisioning/docker.html

つまり、ChefまたはPuppetをDockerに置き換えることができます。プロバイダー(VM)としてのDockerとプロビジョニングツールとしてのChefのような組み合わせを使用できます。または、VirtualBoxをプロバイダーとして、Dockerをプロビジョナーとして使用できます。


23
世界はクレイジーになりました;)私たちは、
Docker

@ zainengineer、WindowsのVagrantのDockerプロバイダーはまだboot2dockerを使用していますか、それともDocker Toolboxのバリアントを使用していますか?
Derek Mahar

@zainengineer説明用の例へのリンクがありますか(浮浪者のドキュメントではありません)?
2016

16

両方を使用することは、アプリケーション配信テストの重要な部分です。私はDockerに参加し始めたばかりで、ソフトウェアの構築と配信が非常に複雑なアプリケーションチームについて非常に熱心に考えています。クラシックなフェニックスプロジェクト/継続的デリバリーの状況を考えてみてください。

考え方は次のようになります。

  • Java / Goアプリケーションコンポーネントを取得し、それをコンテナーとして構築します(注:アプリをコンテナー内に構築するか、構築してからコンテナーにインストールする必要があるかは不明です)
  • コンテナーをVagrant VMに配信します。
  • すべてのアプリケーションコンポーネントに対してこれを繰り返します。
  • コード化するコンポーネントを反復します。
  • Vagrantが管理するVMへの配信メカニズムを継続的にテストする
  • コンテナーをデプロイするタイミングがわかったら、十分に睡眠を取ってください。その統合テストは、Docker以前よりもずっと継続的に行われていました。

これは、ヴァグラントが継続的デリバリーにおけるファーリー/ハンブルズの思考と組み合わせた開発のためのものであるというミッチェルの声明の論理的な拡張のようです。開発者として、統合テストとアプリケーション配信のフィードバックループを縮小できれば、より高品質でより良い作業環境が実現します。

開発者として、私は常に一貫してVMにコンテナーを提供し、アプリケーションをより総合的にテストしているという事実は、製品リリースがさらに簡素化されることを意味します。

したがって、Vagrantは、Dockerがアプリのデプロイメントにもたらす素晴らしい影響の一部を活用する方法として進化していると思います。


たまたまこれについてのブログ投稿がありますか?もう2年になりますがどうですか?まだvagrantをdockerまたはdockerとdocker-fleat / machineで使用していますか?
Andrzej Rehmann 2016年

私が働いていた会社が買収され、私のコンテンツ@Hotoがすべて削除されました。簡単に言えば、私はペットプロジェクトに自宅でdocker-machineを使用しています。私は職場で<gulp>マネージャー</ gulp>であり、あまり技術的なことはしていません。Dockerを使用する予定はないため、通常、ツールはVagrantです。
Boyd Hemphill

10

勝利のための間違いなくDocker!

ご存知かもしれませんが、Vagrantは仮想マシン管理用であり、Dockerはソフトウェアコンテナ管理用です。違いを認識していない場合は、次のとおりです。ソフトウェアコンテナは、同じマシンとカーネルを他のソフトウェアコンテナと共有できます。コンテナーを使用すると、複数のオペレーティングシステム(カーネル)でリソースを無駄にしないため、コストを節約できます。サーバーごとにより多くのソフトウェアをパックして、十分な分離を維持できます。

もちろん、独自の落とし穴や課題を気にする新しい分野です。

要件が単一マシンのリソース制限を超える場合は、Docker Swarmを使用してください。


8

実際のOracle Javaマガジンには、DockerをVagrant(およびPuppet)と組み合わせて使用​​することに関する非常に有益な記事があります。

結論

Dockerの軽量コンテナーは、クラシックVMと比較して高速であり、開発者の間で、そしてCDおよびDevOpsイニシアチブの一部として人気を博しています。目的が分離である場合は、Dockerが最適です。Vagrantは、個々のVMの構成をスクリプト化し、プロビジョニングを実行できるVMマネージャーです。ただし、それは比較的大きなオーバーヘッドを持つVirtualBox(または別のVMマネージャー)に依存するVMです。巨大になる可能性のあるハードドライブアイドルが必要であり、RAMを大量に消費し、パフォーマンスが最適でない可能性があります。DockerはLXCを介してカーネルcgroupと名前空間の分離を使用します。これは、ホストと同じカーネルと同じファイルシステムを使用していることを意味します。Vagrantは、抽象化の観点からDockerより上のレベルなので、実際には比較できません。Puppetなどの構成管理ツールは、ターゲット環境のプロビジョニングに広く使用されています。Dockerを使用すると、既存のPuppetベースのソリューションを簡単に再利用できます。ソリューションをスライスして、インフラストラクチャをPuppetでプロビジョニングすることもできます。ミドルウェア、ビジネスアプリケーション自体、またはその両方がDockerでプロビジョニングされます。DockerはVagrantによってラップされています。この範囲のツールを使用すると、シナリオに最適な方法を実行できます。

DevOpsでDockerコンテナーを構築、使用、オーケストレーションする方法 http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0


1
非常に多くのtが欠落していた
Paul Verest
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.