LoginSignup
22
21

More than 5 years have passed since last update.

Atlas + Packer + Docker + Vagrantで複数コンテナをのせたVMを作成する

Last updated at Posted at 2015-09-14

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をするだけで最新の環境をいつでもゼロから作成できるようにし、
開発者間の環境の差異をなくすことです。

図解

multi_containers_vagrant.png

前提

  • 各種ツールをインストール済み
  • 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 を参照。

./script/dockerimages.sh
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

template.json
  "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 
  • AtlasのGUIで完成した tbpgr/multi Boxを確認 atlas_vagrant_box.png

3. Atlas上のBoxでVagrantを利用してVMを作成する

1. Vagrantfileの初期化

$ vagrant init tbpgr/multi -m

2. Vagrantfileの編集

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
 _
| |__   ___   __ _  ___
| '_ \ / _ \ / _` |/ _ \
| | | | (_) | (_| |  __/
|_| |_|\___/ \__, |\___|
             |___/

外部資料

22
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
21