Ansible と Docker Compose

少し前に、Ansible 2.0 がリリースされ、Dockerなどが標準サポートされました。
これを使うことで、Docker Compose で行っていたような、コンテナの上げ下げができるようになりました。

…が、ここで問題は、 Docker Compose とのすみわけをどうすればいいか、ということでした。
いっそ、サービスの記述は Docker Compose で行い、それの上げ下げを Ansibleでできればいいなぁ・・・と思ってました。

そしたら、今月頭リリースされた Ansible 2.1 で Docker Compose の操作がサポートされました。モジュール名は docker_service です。

というわけで試してみました。
結構やっつけで作ったので、もう少しいい書き方がありそうですが、そこは今後 Ansible力/Docker力 がついたら書き直してみます。

  • 前提
    • 題材: Minecraft サーバを起動・終了する
    • 操作側: Windows 10 / Cygwin64 / Ansible 2.1
    • 被操作側: Arch Linux, Docker 1.11.2 / Docker Compose 1.8.0-rc1

操作側 (Windows 10 / Cygwin)

まず、docker_service に docker-compose のバインディングが必要になるため、操作側でインストールしておきます。

あとは適当なディレクトリにこんな感じでファイルを置いていきます。

Cygwinで、AnsibleをSSH経由で利用するためには transport = paramiko (コマンドラインから指定するには -c paramiko)が必要になります。あと、失敗した場合に retry ファイルができるのが鬱陶しかったので作成されないようにしてみました。

ansible_python_interpreter は ArchLinuxをAnsibleで操作するために必要(AnsibleはPython2 を前提としますが、Arch Linux の既定のPythonは Python3 のため)。
また、今使用しているDocker環境はSocketでつなぐように設定しているため、docker_host も設定しておきます。

ちなみに、 state: absent であるファイルを用意すれば、サービスの停止ができます。

被操作側 ( Arch Linux )

Arch Linux を Ansible で操作するには Python2 が必要です(インストール方法は割愛)。

ここは、普通に Docker Compose でMinecraft サービスを記述していきます。

今回は、自前でDockerfile を作るので、 build を指定します。もし、Docker Hub からありもののイメージを取得する場合は、 image: …. と指定すればよいです。

やっつけで作った Minecraft Server のレシピ。

そして、Minecraft server を立ち上げるためには EULA(MINECRAFT END USER LICENSE AGREEMENT)への同意が必要なので、その意思表明をしたファイルを用意します。

動かしてみる

これで、あとは被操作側から、

で起動できます!
あとは同じ手口で、いろんなサービスをAnsible経由で上げ下げできます。

余談…

完全な余談ですが、CygwinにAnsible をインストールしようとしたところ、いくつか問題に当たったので備忘録。

詳細は割愛しますが、Ansibleインストール中にあれがない、これがない、ビルドに失敗・・・といろいろ問題起こすので、
上記の通り、 openssl-devel libffi6 , libffi-devel, python-crypto をあらかじめインストールしておくとうまくいくようです。
(apt-cyg を利用していない環境の場合は setup.exe でインストールできます)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*