33
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-10

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と同じようなサブコマンドが使えるようになっていくともっと使いやすくなりますね。

33
29
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
33
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?