VagrantのDocker provisionerについてはDocker - Provisioning - Vagrant Documentationに説明があります。
また、ざっくり分かる Vagrant 1.4 / Docker Provisioner - Shin x blogという記事もあります。
今回は、VirtualBox用のCentOS base boxを作ってGitHub Releasesで共有するで作成したVirtualBox用CentOS 6.5 boxでDocker provisionerを試してみました。
Vagrantfile
Vagrantfileは以下の通りです。
Vagrant.configure("2") do |config|
config.vm.box = "centos6.5"
config.vm.network :private_network, ip: "192.168.33.22"
config.vm.provision "shell",
inline: "yum install -y xz"
config.vm.provision "docker" do |d|
d.pull_images "centos"
d.run "centos",
cmd: "echo 'hello world' > /tmp/hello"
end
end
予め以下のコマンドを実行してvagrantのboxを登録しておきます。
$ vagrant box add centos6.5 https://github.com/hnakamur/packer-templates/releases/download/v1.0.1/centos-6-5-x64-virtualbox.box
このbase boxはshiguredo/packer-templatesのテンプレートファイルを使ってPackerで作成したものです。GitHub releaseの機能を使う都合上hnakamur/packer-templatesにフォークしていますが内容は同じです。作成時のテンプレートファイルはRelease CentOS 6.5 x86_64 VM for VirtualBox 4.3.6 · hnakamur/packer-templatesから取得可能です。
vagrantのdocker provisioner実行にはxzが必要です。上記のbase boxのCentOSはminimalな構成になっていてxzが入っていないので、shell provisionerでxzをインストールしています。
private_networkのアドレスは"192.168.33.xxx"で適宜設定するか、不要なら削除してください。
d.pull_imagesではPublic docker images · dotcloud/docker Wikiに書かれているオフィシャルのCentOSイメージを指定しています。
d.runのところは、適宜変更してください。ここではテストとしてecho 'hello world' > /tmp/hello
というコマンドを実行するようにしました。
あとはvagrant upするだけで、dockerをインストールして実行してくれます。便利!
$ vagrant up
CentOS 6.5のdocker base imageを使う場合のVagrantfile
docker用にCentOS 6.5のbase imageを自作するで作成したdocker base imageをhnakamur/centos:6.5として登録してありますので、それを使うようにしたVagrantfileは以下の通りです。
Vagrant.configure("2") do |config|
config.vm.box = "centos6.5"
config.vm.network :private_network, ip: "192.168.33.22"
config.vm.provision "shell",
inline: "yum install -y xz"
config.vm.provision "docker" do |d|
d.pull_images "hnakamur/centos:6.5"
d.run "hnakamur/centos",
cmd: "echo 'hello world' > /tmp/hello"
end
end