ブロックチェーン・AI・システム開発の株式会社INDETAIL

Ansibleで楽々!Dockerコンテナを構築をしよう

2016.02.02
tacck

ansible_docker_1200
気がつけば今年も一カ月が過ぎ、2月が始まりましたね。
社内でもあまり知られていませんが、ひっそりと「ハードウェア・組み込み部」という部活を立ち上げていて、黙々とRaspberry Piで遊んでいるtacckです。

何か面白いものを作って、社内にひっそり仕込みたいという野望のもと、日々ひっそりと活動を続けております。

さて、今回は前回の予告どおり、AnsibleでDockerコンテナの構築を行なってみたいと思います。

実行環境

今回は、Dockerクライアント-Dockerサーバと分けて実行してみます。
(今まで特に触れていませんでしたが、Dockerはサーバ-クライアント型のシステムです。)

クライアント

項目 バージョン
OS OS X (10.11.2)
Docker version 1.9.1

Dockerは、オフィシャルにある通りにダウンロード・インストールしておきます。

サーバ

サーバは、上記クライアントで使用しているMacのVirtualBox上に構築しています。
またサーバのOSですが、Ubuntu 14.04では上記Dockerバージョンが安定して動作しなかったため、15.04を選択しています。

項目 バージョン
VirtualBox 5.0.12
Vagrant 1.8.1
OS Ubuntu 15.04
Docker version 1.9.1

サーバ環境の構築

こちらは、Vagrantでイメージを指定して起動後に、オフィシャルの手順通りに構築します。

ここでは、Vagrantfileのみ載せておきます。
(Vagrantの実行手順やDockerのインストール手順は、省略します。)

Dockerのインストールが完了したら、下記設定ファイルを修正後にサービスの再起動を行います。

次に、クライアント側で操作するサーバを指定します。
これは環境変数DOCKER_HOSTにサーバの情報を下記のように指定します。

IPアドレス、ポート番号は、Vagrantfile/etc/default/dockerで指定したものですね。

クライアントからサーバ上のDockerコンテナ構築

Ansibleで操作したいコンテナの準備

Docker Hubで提供されているUbuntuのオフィシャルイメージでは、Python2.7がインストールされておらず、Ansibleが実行できませんでした。
そのため、まずはUbuntu14.04のコンテナを起動し、Pythonをインストールします。
ここは、手作業で行ないます。

AnsibleからDockerコンテナの環境構築

ようやく、AnsibleからDockerコンテナを操作する準備ができました。

では、下記ファイルを用意して、Ansibleを実行してみましょう。

docker-container-nginx.ymlの3行目、connection: dockerとすることでDockerコンテナを操作できるようになります。
ここが、Ansible2.0から標準で利用できるようになったDocker Connection Pluginを指定する箇所になります。
Taskの書き方は、通常のAnsible Playbookと全く同じですね。

では、これを実行してみましょう。

はい、問題なく実行完了できました。
クライアント上のブラウザでhttp://192.168.100.50:8080/へアクセスすると、Nginxの初期ページが表示されます。

2016-02-01-01

まとめ

少し準備に手間がかかりましたが、Dockerコンテナの環境構築はとても簡単にできました。
今までのAnsible Playbookの書き方でそのまま利用できるので、とても楽ですね。

Dockerのコンテナ作成には、標準でDockerfileDocker Composeといったやり方もあり、こちらもとても手軽で便利です。
ただ、こちらは当然「Docker」の環境しか構築できませんし、現実のプロダクト環境でDockerを使えないことの方がまだ多いと思います。

「開発環境のDocker」「本番のサーバ」で共通のPlaybookを使えるようにしておけば、環境の差異を埋めることができ、本番でシステムが動かない!というトラブルも減らせるようになります。
こういった点まで考慮が必要な場合であれば、Ansibleは良い選択肢になると思います。

小さいところからで良いので、Playbookを書きためていきましょう。

関連タグ:

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。