Docker をプロバイダーおよびプロビジョナーとして Vagrant を実行することは可能ですか?
はい、できます。最新の vagrant バージョンを確認していませんが、これは vagrant 1.8.1 まで機能していました。
基本的に必要なのは、複数のdockerコンテナーを実行するVMをスピンすることです(高速で最小限に実行したい場合はubuntuまたはcoreOSを実行します)。
vagrant docker プロバイダーを実行すると、独自の Vagrantfile を引き続き管理できます。
そのため、メインの Vagrantfile が必要です (通常、プロジェクトのルートとして配置されます)。
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
...
config.vm.provider "docker" do |docker|
docker.vagrant_vagrantfile = "host/Vagrantfile"
end
...
end
そして、あなたhost/Vagrantfile
には次のようなものがあります
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Create and configure the VM(s)
Vagrant.configure(2) do |config|
config.vm.hostname = "docker-host"
# Spin up your own box (or one from Atlas)
# and then provision it with Docker
config.vm.box = "ubuntu/trusty64"
config.vm.provision "docker"
...
end
これは、スピンされるボックス (最小限の OS が必要な場合は ubuntu、centos、または coreOS である可能性があります) を指す別の典型的なVagrantfile
ものであり、docker をプロビジョニングします (つまり、ボックスにインストールされていない場合は docker をインストールします)。 VM から利用できます。
わかりましたので、この段階で、docker
docker をプロビジョニングする VM を指すプロバイダーを持つ VM があります。次に、2 つのコンテナーをセットアップします。
あなたのメインVagrantfile
では、次のような2つのコンテナを追加します
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
...
config.vm.provider "docker" do |docker|
docker.vagrant_vagrantfile = "host/Vagrantfile"
end
...
config.vm.define "python" do |python|
python.vm.provider "docker" do |docker|
...
docker.image = "xxx"
docker.ports = [80:80]
docker.name = "python-system"
end
end
config.vm.define "redis" do |redis|
redis.vm.provider "docker" do |docker|
...
docker.image = "xxx"
docker.ports = [80:80]
docker.name = "redis"
end
end
end
これにより、2 つの docker プロバイダー/コンテナーの python と redis が起動します。