[覚書]Ottoで開発環境を構築 (MongoDBのDockerコンテナを動かす)

1. [[覚書]Ottoで開発環境を構築](http://qiita.com/neogym/items/c0c3ba87e8535dabe878)
2. [[覚書]OttoでAWSに本番環境構築＆デプロイ](http://qiita.com/neogym/items/e5e0bbf89df390aa9059)
3. [[覚書]Ottoで開発環境を構築 (Appfileをカスタマイズ → Rubyのバージョン指定)](http://qiita.com/neogym/items/73ee4bee570963751153)
4. [[覚書]Ottoで開発環境を構築 (MongoDBのDockerコンテナを動かす)](http://qiita.com/neogym/items/0d7aa2e07ea1da477f2f) ← **ここ**

# プロジェクト作成

作業用ディレクトリを作成します。

```bash
$ mkdir -p otto-practice/examples/mongodb
$ cd otto-practice/examples/mongodb
```

# 設定

`Appfile`を作成します。

`Docker`を使う場合は、`application`の`type`に`docker-external`を指定し、`customization`に`Docker`の設定を記述します。

```text:Appfile
application {
    name = "mongodb"
    type = "docker-external"
}

customization "docker" {
    image = "mongo:3.0"
    run_args = "-p 27017:27017"
}
```

*`Github`の[`hashicorp/otto`](https://github.com/hashicorp/otto)のサンプルをそのまま使おうとするとコンパイルでエラーが発生しました。
どうやら、`customization`に`"docker"`の記述が必要なようです。
`Otto`の仕様を理解できていないのか、仕様が安定していないのかは未確認です。。。*

# コンパイル

開発環境の設定(`Appfile`)を読み込みます。

```bash
$ otto compile
```

# 開発環境の構築

## 構築

開発環境を構築します。

```bash
$ otto dev
```

## ステータス確認

`Dev environment`が`CREATED`になっていることを確認します。

```bash
$ otto status
==> App Info
    Application:    mongodb (docker-external)
    Project:        mongodb
    Infrastructure: aws (simple)
==> Component Status
    Dev environment: CREATED
    Infra:           NOT CREATED
    Build:           NOT BUILT
    Deploy:          NOT DEPLOYED
```

## コンテナ確認

開発環境にアクセスして、`MongoDB`のコンテナが動いていることを確認します。

```bash
$ otto dev ssh
==> Executing SSH. This may take a few seconds...
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Welcome to your Vagrant-built virtual machine.
Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2
vagrant@precise64:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mongo               3.0                 ca3cf1f47476        10 days ago         261.6 MB
vagrant@precise64:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                      NAMES
839c09231a0e        mongo:3.0           "/entrypoint.sh mongo"   About a minute ago   Up 59 seconds       0.0.0.0:27017->27017/tcp   mongodb

```

# 原因不明のエラー

原因は不明ですが、スマホのテザリング機能を使ったネットワーク上で`otto dev`コマンドを実行すると、下記のようなエラーが発生してしまい、`Docker`のインストールに失敗してしまいました。
自宅のネットワーク上で実行した際には、問題なく実行できました。
(本件が、ネットワークに原因があるのかどうかはわかりません。。。)

```
==> default: Running provisioner: docker...
    default: Installing Docker (latest) onto machine...
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

apt-get install -y --force-yes -q xz-utils lxc-docker -o Dpkg::Options::='--force-confdef' -o Dpkg::Options::='--force-confold'

Stdout from the command:

Reading package lists...
Building dependency tree...
Reading state information...
xz-utils is already the newest version.
The following extra packages will be installed:
  aufs-tools cgroup-lite git git-man liberror-perl lxc-docker-1.9.1 patch
Suggested packages:
  git-daemon-run git-daemon-sysvinit git-doc git-el git-arch git-cvs git-svn
  git-email git-gui gitk gitweb diffutils-doc
The following NEW packages will be installed:
  aufs-tools cgroup-lite git git-man liberror-perl lxc-docker lxc-docker-1.9.1
  patch
0 upgraded, 8 newly installed, 0 to remove and 181 not upgraded.
Need to get 15.4 MB of archives.
After this operation, 46.2 MB of additional disk space will be used.
Get:1 https://get.docker.com/ubuntu/ docker/main lxc-docker-1.9.1 amd64 1.9.1 [8,495 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise/universe aufs-tools amd64 1:3.0+20111101-1ubuntu1 [98.8 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise/main liberror-perl all 0.17-1 [23.8 kB]
Get:4 https://get.docker.com/ubuntu/ docker/main lxc-docker amd64 1.9.1 [2,094 B]
Get:5 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main git-man all 1:1.7.9.5-1ubuntu0.2 [632 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main git amd64 1:1.7.9.5-1ubuntu0.2 [6,103 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main patch amd64 2.6.1-3ubuntu0.1 [80.0 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main cgroup-lite all 1.1.5 [4,098 B]
Fetched 20.9 MB in 13s (1,561 kB/s)


Stderr from the command:

stdin: is not a tty
Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/universe/a/aufs-tools/aufs-tools_3.0+20111101-1ubuntu1_amd64.deb  Size mismatch
Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/libe/liberror-perl/liberror-perl_0.17-1_all.deb  Size mismatch
Failed to fetch http://us.archive.ubuntu.com/ubuntu/pool/main/g/git/git-man_1.7.9.5-1ubuntu0.2_all.deb  Size mismatch
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Error building dev environment: Error executing Vagrant: exit status 1

The error messages from Vagrant are usually very informative.
Please read it carefully and fix any issues it mentions. If
the message isn't clear, please report this to the Otto project.
```

# 参考

* [Otto by HashiCorp:](https://ottoproject.io/)

以上