ansibleを使ってDockerコンテナをプロビジョニングしたお話

GMOアドマーケティングのインフラ開発本部あだちんです。

久しぶりにDockerネタなのですが、
今までローカル開発環境はVagrantを使用していました。
Vagrantだとリソースも食うし、IPも管理しないといけないし、なによりも重いんですね。
なので全てDocker(Docker machine)で検証するようにしました。
そこで、インフラチームのリーダに構成管理ツールは「ansible」に統一しましょう!
となったのでansible playbookのテストとして、
Dockerのコンテナがansibleで自動で立ち上がって自動でパッケージ入れて
そんなこと出来ないかなと考えていたわけです。

今回はその方法をブログしましょう。docker-friends


■Docker connection pluginについて

その前にDocker connection pluginについて説明しましょう。
これはDocker remote APIを利用したコンテナのプロビジョニングが可能となり、
ansible実行環境からDockerホストへのremoteAPIを実行できる環境であれば、
Dockerコンテナでsshdを起動する必要はなくなりました。
以前までは結構めんどくさくなっていたようです。


■イメージ

スクリーンショット 2016-09-25 23.47.10


■環境


■Macにansibleをインストール


■Dockerホスト開発設定


■ansibleイベントファイル作成


■DockerホストにPython系をインストール

・接続確認

これで準備OKです。


■ansible playbookの作成

テストとしてCentOS7のイメージを使ってコンテナが自動で立ち上がり、勝手にユーザ作成できるかやってみました。

・実行


■先ほどの立ち上がったコンテナにログイン


■まとめ

これでDockerでも問題なくansibleの検証ができました。
Dockerfileでも構成管理できますが、またDockerfile用に作るのもめんどくさいし、
工数もかかるので構成管理ansibleを使っているならこちらでいいかと思います。
Chefとかどうなんだろ….
Dockerだと入ってないパッケージがあったり(sudoなど)するのでいろいろansibleもメンテしなくては….

ちなみに先日行われたGMO APエンジニアナイト(交流会)でも同じ内容をLTやりました。
プレゼンも以下で見れますので、イベントレポートは後日のお楽しみに!
77a5ba13cea567e2af8323cbfa5a2286