docker できることとできないこと
ここでは自分が触ってみた感じについて主観的に書いていきます。書いている内容は少し前(0.8くらい)なのもあり、事実と異なるかもしれないのでその時は指摘下さい。
Dockerとは何か
Dockerとは - 意味/解説/説明/定義 : IT用語辞典 でも読むかググってください。
個人的な感覚
メリット
- コンテナの作成スピードが(二度目以降は)早い
初回にOSのBaseイメージを取ってきて、それ以降は差分取得なりしてコンテナを作成するのでめちゃくちゃ早いです。 - 元々の想定用途(?)であるAnsible等デプロイツールと組み合わせて、環境を瞬時に大量に作ることができる。マシンインスタンスを気軽に増減できる。
デメリット
まずDockerは仮想マシン(VM)ではないです(これはデメリットというかそもそもの話)それを踏まえた上で
- ホストマシンのネットワークに参加できない
KVMやVMwareあたりだとホストが参加してるネットワークの1マシンになれるのですが、Dockerの場合ホストのポート転送を使うしか無いようです。Hadoopなんかだと幾つかポート開ける必要があって少し面倒ですね(DockerのHadoopサンプル見るとfor文で気合でポート設定作ってた覚えがあります)セキュリティ的にはそっちの方がいいのかもしれませんが。 - 1回作ったコンテナのポート転送設定を変えられない
Dockerの場合、1回コンテナを作って(run)、そのあとコンテナを立ち上げて(start)、止めて(stop)、壊して(kill)って作業行うのですが、一度runしたあとにポート転送の設定が変えられません。なので例えばいろいろ試してるときに、8100番を追加で使いたいと思ってもコンテナを作り直さないとダメなのです。せめてstopしてる間に変えられればいいのですし、作り方が決まってる(=Ansibleなどで自動化できる)ならコンテナ壊して新しく作れば済みますが、試行錯誤でポート開けるのには向いてなさそうです。
一応対策としてstoneでポートフォワードさせるやり方はあるようです。How to assign a port mapping to a running docker container - act-act
ただissueも上がってるんで同じこと考えてる人はいるんだなぁと感じます。
終わりに
まとめると、Dockerは想定したデプロイとかの用途に対しては恐らくちゃんと出来てるんでしょうけども、試行錯誤中のときは若干だるいかなぁ。とか感じました。当然ちゃ当然ですけど今のところVMの置き換えではないですね。