あくまで個人の用途に限定しますが、なかなか便利です。
前置き
Dockerの長所として
- どこでも動く・ポータブル
- ローカル環境を汚染しない
- 処理の効率がいい(ただしLinuxに限る)
などというのが挙げられると思います。 が、VMでもほとんど同じことができます。
違いといえば、処理の効率がいい(起動が早い・リソース消費が少ない)ことですが、 前述の通りLinux以外だと意味無いです。
「コンテナとして同じようにDeployできる。」という声に関しても、 低スペックのマシンでスケールするなら単体のアプリケーションだけ動かしとけばよくて、そんなの他のオーケストレーションツールで問題ないと思ってます。(僕の経験が足りない。使いこなしてないだけかもしれませんが)
本題
ではどこで使えば便利か、というところですが、
ローカルマシンを汚さない開発環境の構築
です。
当たり前のことなのですが、すごく早くてお手軽です。
例えば、MySQLとMariaDBをサクッと共存させたり、 ちょっとしたWebサーバーを即座に用意したり、 マシンによって異なるツールのインストールを簡略化したりです。
個人的に使ってるのはこれら。
ミドルウェア系
https://github.com/uryyyyyyy/vagrant-docker-local
Vagrant1.6からサポートされたDocker providerの機能を使っています。
これを使うと、vagrant up
で起動できて、使い終わったらvagrant destroy
で消せます。(dockerがビルドの差分を持っているので、再度の立ち上げは爆速です。)
Vagrantfileを見たらわかりますが、各種DBMSをサクッと立ち上げられます。 Port指定やユーザー変更も簡単にできます。
ただし、データの永続化はできないので、Dumpを喰わせるとかが別途必要です。(個人的には、開発環境ならむしろその方がありがたい。)
また、一応MacやWindowsでもproxvVM(boot2docker)を噛ませることで同じようなUIで操作できます。 (ただ、portの指定が二重に必要だったり、rsyncが入ってないとダメです。)
CLIツール系
https://github.com/uryyyyyyy/docker-command
まだ不揃いですが、rubyやJavaのコマンドも使えますし、nodeやScalaのインタプリタも使えるはずです。
(ただ、他のコンテナへアクセスするのは別途設定がいるので、別でredisサーバーを立てて、redis-cliを使ってアクセスする、みたいなことはできませんでした。)
既存のツールと比べて
(※ただしLinuxに限る)
ローカルマシンへインストール
- 色々なソフトを入れたせいで動作が遅い、とかがなくなる
- MariaDBとMySQLが同一PCで共存できたりする。
- rubyなどの変な依存関係とかの原因不明のバグが起こりにくい
仮想マシンでの起動
- 立ち上げるのがめっちゃ早い
- マシンごとに設定し直したりとかいらない
- いっぱい立ち上げてもメモリ消費が少ない
- DockerfileとVagrantfileだけあれば動く(イメージの共有とか要らない)
まとめ
今、自分の開発ではMariaとかRedisとかを立ち上げつつ、gruntなどを実行して使ってます。 他の開発メンバーにも布教してますが、Windowsマシンだとイマイチですね。。。
Linux系のOSであればとても快適なんじゃないかと思います。 むしろMacやWndowsでDocker使うとか意味がわからない。