Atlas + Packer + Docker + Vagrantで複数コンテナをのせたVMを作成します
仕様
- PackerでDockerコンテナを2個(コンテナA/Bとする)作成する
- Atlas+PackerでUbuntu(+Docker)+コンテナA/B構成のVagrant Boxを作成する
- Atlasに作成したBoxをダウンロードしてVagrantでVMを作成する
- VagrantでVMを起動し、cowsayとfigletを呼び出す
目的
この検証の目的は複数コンテナで構成される開発環境をAtlasとVagrantで管理することです。
これにより、環境構築の担当者がPackerでコンテナとBoxを作成し、
開発者はVagrant upをするだけで最新の環境をいつでもゼロから作成できるようにし、
開発者間の環境の差異をなくすことです。
図解
前提
- 各種ツールをインストール済み
- Docker Hubのアカウントを取得済み
手順
1. PackerでDockerコンテナを2個作成
cowsayとfigletをインストールしたUbuntuのコンテナをそれぞれ作成します。
作成手順は下記を参照
Packer buildでDocker HubにDocker Imageを保存するやいなやpullしてcowsayする - Qiita
cowsayコンテナ疎通確認
$ docker pull tbpgr/cowsay:0.0.1
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tbpgr/cowsay 0.0.1 4cf3f5bac14b 2 minutes ago 210.5 MB
$ docker run tbpgr/cowsay:0.0.1 /usr/games/cowsay hoge
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
figletコンテナ疎通確認
$ docker pull tbpgr/figlet:0.0.1
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tbpgr/figlet 0.0.1 4cf3f5bac14b 2 minutes ago 210.5 MB
$ docker run tbpgr/figlet:0.0.1 /usr/bin/figlet hoge
_
| |__ ___ __ _ ___
| '_ \ / _ \ / _` |/ _ \
| | | | (_) | (_| | __/
|_| |_|\___/ \__, |\___|
|___/
2. Atlas+PackerでUbuntu(docker)+コンテナA/B構成のVagrant Boxを作成する
shiguredo/packer-templates のubuntu14.0 をベースにさせていただきます。
また、docker.shを ubuntu-12.04-docker/scripts/docker.sh から取得して追加します。
cowsayコンテナとfigletコンテナの設定を追加する
複数コンテナの管理にはdocker-composeを利用します。
docker-composeについては
docker-composeで複数のコンテナをyamlファイルで管理し、最後にcowsayする - Qiita を参照。
sudo apt-get install curl -y
curl -L https://github.com/docker/compose/releases/download/1.3.2/docker-compose-`uname -s`-`uname -m` > docker-compose
sudo cp docker-compose /usr/local/bin/
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v
cat <<EOS> docker-compose.yml
cowsay:
image: tbpgr/cowsay:0.0.1
command: /usr/games/cowsay hoge
figlet:
image: tbpgr/figlet:0.0.1
command: /usr/bin/figlet hoge
EOS
docker-compose run cowsay
docker-compose run figlet
template.json のpost-processors
"post-processors": [
[{
"type": "vagrant",
"keep_input_artifact": false
},
{
"type": "atlas",
"only": ["virtualbox-iso"],
"artifact": "tbpgr/multi",
"artifact_type": "vagrant.box",
"metadata": {
"provider": "virtualbox",
"version": "0.0.1"
}
}]
]
- 実行
$ packer push -name tbpgr/multi template.json
3. Atlas上のBoxでVagrantを利用してVMを作成する
1. Vagrantfileの初期化
$ vagrant init tbpgr/multi -m
2. Vagrantfileの編集
Vagrant.configure(2) do |config|
config.vm.provider :virtualbox do |vb|
vb.name = "multi"
end
config.vm.network :private_network, ip: "172.16.33.124"
config.vm.box = "tbpgr/multi"
end
4. VagrantでVMを起動し、cowsayとfigletをする
$ vagrant up --provider virtualbox
$ vagrant ssh
vagrant@ubuntu-1404:~$ docker ps
vagrant@ubuntu-1404:~$ sudo docker-compose run cowsay
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
vagrant@ubuntu-1404:~$ sudo docker-compose run figlet
_
| |__ ___ __ _ ___
| '_ \ / _ \ / _` |/ _ \
| | | | (_) | (_| | __/
|_| |_|\___/ \__, |\___|
|___/