Edited at

新しいAnsible Containerを使うとPlaybookだけでDockerイメージをビルドできる

More than 3 years have passed since last update.

Ansible Containerという新しいツールの開発が進んでいます。このAnsible Containerを使うとDockerイメージのビルドとコンテナのオーケストレーションをAnsible playbookだけで行うことができます。つまりこれを使えば、DockerfileやBashスクリプトが肥大して読みにくくなるという悩みが消えますし、Dockerのためだけに新しいオーケストレーションツールを勉強するといった手間もなくなりそうです。

オフィシャルのドキュメントの例を試してみたので以下に手順を残しておきます。


必要なもの


  • Docker Engine

  • Python 2.7

  • setuptools 20.0.0+

  • pip

  • git


インストール

$ git clone https://github.com/ansible/ansible-container.git

$ cd ansible-container
$ python ./setup.py install


Dockerマシンを準備する

$ docker-machine create --driver virtualbox node1

$ eval $(docker-machine env node1)


プロジェクトを準備する

## ディレクトリを作る

$ mkdir project1
$ cd project1

## 初期化する
$ ansible-container init
$ tree
.
└── ansible
├── container.yml
├── main.yml
└── requirements.txt


container.ymlとmain.ymlを編集する

#

# container.yml
#
version: "1"
services:
web:
image: "ubuntu:trusty"
ports:
- "80:80"
command: ["/usr/bin/dumb-init", "/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
dev_overrides:
environment:
- "DEBUG=1"

#

# main.yml
#
- hosts: all
gather_facts: false
tasks:
- raw: which python || apt-get update
- raw: (which python && which aptitude) || apt-get install -y python python-apt aptitude
- hosts: web
tasks:
- name: Upgrade APT
apt: upgrade=yes
- name: Install ca-certificates
apt: name=ca-certificates state=latest
- name: Install dumb-init
apt: deb=https://github.com/Yelp/dumb-init/releases/download/v1.0.2/dumb-init_1.0.2_amd64.deb
- name: Install Apache
apt: name=apache2 state=latest


使ってみる

## ビルドする

$ ansible-container build

## コンテナを作る
$ ansible-container run

ウェブブラウザでhttp://<Docker MachineのIP>を開いてみると、ウェブサーバーが立ち上がっていることを確認できます。

現時点のansible-container runには-dオプションがないようで、バックグラウンドの実行ができないようです。バックグラウンドで実行したい場合は下記のようにdocker runコマンドを使うことで実現できます。

$ docker run -p 80:80 -dt ansible-container-web /usr/bin/dumb-init /usr/sbin/apache2ctl -D FOREGROUND

仮にansible-container buildで複数のタイプのイメージを作成した場合(例えばwebとmysqlを作成した)には、docker-compose.ymlで複合的なコンテナの設定を明記したうえでdocker-compose up -dを実行するというのが手だと思います。

ansible-container pushansible-container shipitについてはまだ試していませんが、オフィシャルのドキュメントに詳しく書かれていますので、そちらをご参照下さい。


感想

Ansible Containerはまだまだ開発が始まったばかりだそうなので、今後はdocker-composeと同じようなサブコマンドが使えるようになっていくともっと使いやすくなりますね。