dockerについて初心者なりにわかったことをまとめていきます。
dockerとは?
「Docker(ドッカー)」とは、非常に軽量なコンテナ型のアプリケーション実行環境である。dotCloud社(現Docker社)が開発し、2013年にオープンソースのプロジェクトとして公開された。
引用: http://www.atmarkit.co.jp/ait/articles/1701/30/news037.html
Dockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較されます。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かします。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため、軽量で高速に起動、停止などが可能です。
引用: https://knowledge.sakura.ad.jp/13265/
- コンテナ技術
いまよく使われているサーバー仮想化は、物理サーバーの上に仮想的なサーバー「仮想サーバー」を複数作り出すことができます。この仮想サーバーはまるで本物のサーバーと同じように振る舞います。
仮想サーバーを実現するには、ハードウェアの機能をすべてソフトウェアで実装するという高度な仕組みが必要です。最近では仮想化機能を支援する機能がサーバーに組み込まれてきているとはいえ、その実装はいまだ複雑なものになっています。
一方、コンテナ型仮想化はOSの上に“コンテナ”と呼ばれる仮想的なユーザー空間を提供します。ユーザー空間とは、ユーザーがアプリケーションを実行するための、ひと揃いのリソースが提供される空間です。通常は1つのOSの上に1つのユーザー空間があるのですが、コンテナ型仮想化では1つのOSの上で仮想的なユーザー空間であるコンテナを複数提供できます。
引用: http://cn.teldevice.co.jp/column/detail/id/102
つまりはコンテナ技術によって、シンプルに仮想環境を作ることができるようになり、Virtualboxなどに比べて起動速度も速くなったってことですね。
dockerの何がいいの?
- 環境をコード化して、共有することで複数人での同一な環境構築の手間が短縮される
これがdockerのいいところです。この利点によって
- 開発環境では動いていたけど、本番環境では動かなくなった
- ある人のパソコンだけで出るエラーがある
- 新しい人が入るたびに環境構築がめんどくさい
と行った不便な点を解消することができます。
dockerの悪いところは?
多数のメリットがあるDockerですが、一方でデメリットもあります。1つは、サーバー仮想化では仮想サーバーごとにOSが選択できるのに対して、コンテナ型仮想化はその構造上、すべてのコンテナで同一のOS(カーネル)を利用することが前提であり、個別には選択できないことです。
引用: http://cn.teldevice.co.jp/column/detail/id/102
らしいです。僕は今の所仮想化技術自体を使いこなせていないので、デメリットは感じていません。