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 push
とansible-container shipit
についてはまだ試していませんが、オフィシャルのドキュメントに詳しく書かれていますので、そちらをご参照下さい。
感想
Ansible Containerはまだまだ開発が始まったばかりだそうなので、今後はdocker-compose
と同じようなサブコマンドが使えるようになっていくともっと使いやすくなりますね。