検証環境構築にDockerを勉強してみた。
Vagrant+VirtualBoxで勉強環境作った
DockerはLinux namespaceを使うものなのでWindowsやMacでは動かせない。boot2dockerやVagrantのDockerサポートなど直接使えるような感じに振る舞ってくれるものがあるけど逆に混乱しそうだし、どうせ最終的に使う時もLinux環境になるのでそれらに頼らないで一旦VMにLinux環境を作って試すことにした。
Vagrantbox.esにDockerの準備ができたUbuntu 14.04のboxがあったのでそれを使った。VagrantfileはGitHubに公開。
rpmではすでにdocker
パッケージが存在したために衝突しないようにdocker.io
になっているとのこと。docker.io
しか使わない場合は/usr/local/bin/docker
などdocker
でコマンド実行できるようにリンクしたりalias
するのが通例。あとsudo
打つのが面倒なのでvagrant
ユーザをdocker
グループに入れている。勉強なのでvagrant
ユーザをそのまま使う。
これでvagrant ssh
するとDockerが使えるUbuntuにログインできる。
すごい所
Vagrantも便利だけど先のDocker用のboxがダウンロード済みの状態でもvagrant up
は40秒くらい掛かる。しかしdockerはイメージがダウンロード済みならdocker run
は一瞬だった。マジ速い。これは確かにCIで使えそう。
Vagrantのboxと比べるとイメージをコマンドで検索して落とせるのは便利。イメージの容量も大したこと無いし、これからはCoreOSとか使ってアプリAはUbuntuイメージからDockerコンテナ実行して、アプリBはcentosイメージからDockerコンテナ実行するみたいにDockerのホストOSはあんまり気にしなくてもよくなるかもしれない。個人や社内用のツールとかはそれぞれDockerコンテナで実行してしまえば複数のツールが依存するアプリケーション(PHPなど)のバージョンを気にしなくても済む。
まだ理解不足
最初にやるのは docker run -i -t -h ubuntu ubuntu:14.04 /bin/bash
とかだけどdockerでコンテナを実行するときに/bin/bash
を指定しているように1つのコマンド実行がプロセスとして扱われる。ここが仮想マシンと大きく違う。コンテナでは起動スクリプトも実行されなさそうで、Using Supervisor with DockerにあるようにSupervisorやMonitのプロセス監視ツールからApacheやらMySQLやら複数のサービスを実行させるような感じになる。若干めんどい。
Mac -> VM(Linux) -> Dockerコンテナという環境でテストしていて、ポートフォワード、ディレクトリのマウントが2段階になるのでちょっと複雑になってる。EXPOSE
したのに繋がらん!そらそうや、それが見えるのはVM(Linux)からであって、Macからやない。みたいな。
セットアップshell辞めたくてChef使いだしたのにDockerだとまたshellの世界に帰らないといけない。みんなのDockerfileを見て勉強しているけど、なんか便利そうで便利じゃない手間がかかる感。Dockerfileだけ見ればわかるというメリットもあるのでこれはこれで悪くないけど。
ubuntu:14.04
イメージからDockerfileで実行するのか、自前のイメージをコミットしてそこから分岐していくのか。上でツールはDockerコンテナにしてしまえば小さな閉じた環境作れると書いたけど実際はデータはコンテナの外に置いたりする方が無難なのでその変の構成も考えないといけないだろうし。どれもケースバイケースなんだろうけど、プラクティスがわからなくて何をやるにも疑問がつきない。
学習後
まだ理解不足なのでとりあえずVagrantで出来るところは仮想マシンで頑張ることにした。
http://www.infoq.com/jp/news/2014/07/top-docker-misconceptions
Docker記事のほとんどが極めて単純なユースケースを紹介しており、マルチホストの本番システムでの複雑さを無視している
にも書いてあるけどDockerの入門的な記事は結構読んだけど、こういう場合はどうなるの?という疑問はたくさんあってまだ開発者が使いこなすには情報が足りないかなという気がしないでもない。Dockerでてから結構時間立つし、そろそろ詳しく書いた書籍でもあってもいいんじゃないかなと思う。入門Kindle本は当然読了済み。
今だと独学は時間掛かりそうなので勉強会あったら行った方が良さげ。