Dockerを使っていく上で避けて通れないChef,ansibleとの付き合い方
こんにちは。
最近はローカルの開発環境も、ほとんどDockerに移行した感じです。
そこで、本番も見据えたDockerという事で気になることの一つ
構成管理ツール
chef、ansibleなどなどとの兼ね合い、どうするかな?
と言ったところ考えてみようと思います。
Dockerはコンテナ作成・管理ツールという性質上、コンテナ内部のパッケージやアプリの配備などをDockerfileで行う仕組みになっています。
ということは、端的に言ってしまうとchef、ansibleなどがなくてもコンテナを作れてしまいます。
わざわざDockerで作ったコンテナに対してchefを流して環境を作る、とか意味がありません。
では、Dockerfileの中でChefを呼ぶのはありか?という所ですが
個人的にはこれもあまり嬉しくないなと思います。
Dockerfileを見るだけで、そのコンテナがどんな環境になるのか、というのが一発でわかるようにしたいです。
また、構成管理ではないですが、Dockerでシェル叩いていたり、起動する単一プロセスに構成設定のシェルを指定しているDockerfileが割と多かったりしますが、これも実際何しているのか?というのをシェル見ないと分からなくなってしまうので避けるようにしています。
では、全く使わないのか?
と言われると、NOで
Dockerをそもそも動かすホストマシン側の構成管理については
Chef、ansibleが使える物と思っています。
最低限、Dockerが動かせる環境をChefで構築する
docker engine
docker machine
docker compose
docker swarm
あたりのインストールを自動化しとくのが良いと思います。
そうすることで、ホストマシンが自前だろうがAWSだろうがIDCFだろうがさくらだろうが
さらにOSがUbuntuでもCentOSでも、ホストマシンを自動で構築することも可能になってきます。
所定のdocker engineさえ入っていればコンテナが動くわけです。
なお、docker-machineを使う場合、docker-machineが対応しているクラウドサービスの場合は構成管理しなくても良い位手軽に起動する事が出来たりします。
これは、docker-machineのcreateで作成されるホストには、docker-machineが自動で上記のモジュール類を入れて環境設定してしまうためです。
Dockerを本気で使っている方々には当然の内容ではありますが、以上、一つの考え方として参考にしていただけたらと思います。