個人的Dockerの使い方

| Comments

あくまで個人の用途に限定しますが、なかなか便利です。

前置き

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使うとか意味がわからない。

Comments