search
LoginSignup
10
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

AnsibleのPlaybookのテストにDockerのコンテナを利用した話

今更感ありますが、Ansible触る機会があったので触って見ました。

開発環境について

$ docker -v
$ Docker version 17.06.0-ce, build 02c1d87

$ docker-machine -v
$ docker-machine version 0.12.0, build 45c69ad

$ ansible --version
$ ansible 2.4.0.0

なぜAnsible?

プロダクションのデプロイに対して、Docker環境構築するのはちょっと重い(予算的にも規模的にも)ことはまぁあると思います。
ただ、development, staging, production とミドルウェアの環境構築はコードで管理したい。

そこでの最適解が、現状Ansibleかなと考えます。

なぜDocker Container?

色々見ていると古い情報が多いっていうのもありますが、Ansible PlaybookのテストはVagrantでVirtualbox立てるのがいいですと書いてあるところが多かったです。
まぁそこはしかし、Virtualboxのダウンロードがめちゃくちゃ時間かかります。
これ、今回CentOS7のPlaybookだけれど、次回CentOS6だったら?Ubuntu環境,Windows環境だったら?と考えると絶望的な気分になりました。

そこでDocker Containerですよね。

実際にやってみた

Ansible構成

CentOS: 7
Apache: latest
MySQL: 5.7
PHP: 7.1
redis: latest
git: latest

調査

早速調査したところ、感謝すべき先人達がたくさんいますね。
特に参考になったのは、GMOのAdachiさんが書いてくださったこちらの記事です。
この記事通りやれば、問題なく立ち上がると思います。
私の場合は、先にコンテナを立ち上げていて、その立ち上げ方に問題がありいくらか時間を使ってしまいました。
以下にログとして残しておきます。

service httpdがdocker containerで動かない

導入検証時、centos:7 コンテナを普通に
sh
$ docker run --name testcontainer -it -d centos:7

として立ち上げていたのですが、この立ち上げ方に問題がありました。
こちらの記事に詳しいのですが、centos7ではsystemctlがデフォルトで効かない都合上、httpdをserviceから起動させる箇所で
sh
$ fatal: [testcontainer]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find the requested service httpd: host"}

と言われ続けました。
sh
$ docker run --name testcontainer --privileged -d centos:7 /sbin/init

と、特権モードでコンテナを作成して/sbin/initで起動しておくことで解決できます。
Docker Containerのplaybook動作確認時、service絡みで同様にエラーを吐く場合は、もしかしたらcontainerの起動方法で解決できるかもしれないです。

今回の成果物の簡易版を置いておくので、よかったら参考にしてみてください。

改めてVirtualBoxとの比較

Playbook検証環境の用意、実は最初Virtualboxダウンロードをしようとしていたのですが

VirtualBoxのダウンロード60分くらいに対してDockerのimage pull30秒くらい

で終わりました(笑)
また、Playbookの設定ミスってOSのクリーンインストールからやり直したいって場合も、vagrant destoryからvagrant upと比較して、コンテナの再作成も相当差があるのではないでしょうか。

せっかくDocker環境があるなら、手軽に再作成できるのでPlaybookの検証環境に最適かと思っています。

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
What you can do with signing up
10
Help us understand the problem. What are the problem?