Vagrant 1.6からサポートされたDocker Provider。
Dockerホストを務めるhostVMとDockerコンテナ両方をVagrantが一括して取り扱います。
デフォルトではhostVMはboot2docker 0.4.0で起動しますが、CoreOSが提供しているcoreos-vagrant
にリプレースして起動まで成功したので備忘録を。
ひとまずDockerコンテナのVagrantfileを置くディレクトリを作ります。
mkdir vagrant-docker-coreos
cd vagrant-docker-coreos
git init .
Vagrantfileを作成します。
Vagrant.configure("2") do |config|
config.vm.provider "docker" do |d|
d.vagrant_vagrantfile = "coreos-vagrant/Vagrantfile"
d.vagrant_machine = "core-01"
d.image = "centos"
end
[80, 8080, 443, 3306].each do |port|
config.vm.network :forwarded_port, guest: port, host: port
end
end
d.vagrant_vagrantfile
に別個Vagrantfileを設定することでhostVMを指定できます。
ここに記述するポートフォワーディングはguest: dockerコンテナ → host: hostVM の設定になります。お好みで。
上述したcoreos-vagrant
を取り寄せます。
git clone --recursive https://github.com/coreos/coreos-vagrant/
cd coreos-vagrant
ここで立ち上げるCoreOSをboot2dockerのようにホストOSから使うために、user_data
とconfig.rb
をコピーしてtcp://127.0.0.1:4243
にdockerソケットが通るようにします。
cp user_data.sample user_data
cp config.rb.sample config.rb
--snip--
# You can then use the docker tool locally by setting the folloing env var:
# export DOCKER_HOST='tcp://127.0.0.1:4243'
$expose_docker_tcp=4243
# Setting for VirtualBox VMs
--snip--
Docker Providerの現行の仕様では、hostVMのnameはdefault
しか見ていない様子でした。
coreos-vagrant/Vagrantfile
に修正を加えます。
2014/06/09 追伸
Docker側Vagrantfileにd.vagrant_machine = "core-01"
を追記すれば良かった話でした。
--snip--
(1..$num_instances).each do |i|
# config.vm.define vm_name = "core-%02d" % i do |config|
config.vm.define vm_name = "default" do |config|
config.vm.hostname = vm_name
(49000..49169).each do |port|
config.vm.network :forwarded_port, guest: port, host: port
end
[80, 8080, 443, 3306].each do |port|
config.vm.network :forwarded_port, guest: port, host: port
end
if $enable_serial_logging
--snip--
$num_instances
が2以上の場合はコンフリクトしないようによしなにお願いします。
cd ..
vagrant up --provider docker
これで起動するハズ。
docker ps
とハッシュは共有しませんが、vagrant global-status
で全体像を一覧できます。
参考:
Vagrant1.6のDocker provider | SOTA
タイトルとか決めてないけどこのままでもいいかもしんない: Vagrant1.6のDockerの機能使ってコンテナにSSH接続してWebサーバー立ててみたよ
Vagrant 1.6 が出たので Docker Provider を試してみた – I'm Sei.
Vagrant 1.6 Feature Preview: Docker-Based Development Environments - Vagrant