Vagrant、Chefと触ってきたので、Docker で開発環境を構築して見たいと思います。
この記事では実際に環境を構築する前に Docker について調べたことをまとめています。
Docker について
Docker とは?
私が最初に仕入れた Docker(ドッカー)の特徴は下記のようなものです。
- Linux上でしか動作しない
- Go で書かれている
- アプリケーションとミドルウェアとどまらず、OS やネットワークまで含めたインフラ環境をまとめてコンテナとして管理できる
- 一度イメージを作ってしまえば、Docker がインストールされている環境であれば、どこでも同じ状態を復元できる
うーん、なんかわかったようなわからないような、、、
上の情報だけだと、Vagratn + Chef の上位版(もっとすごいやつ)みたいな印象を持ちました。
コンテナとは?
Docker がコンテナでインフラ環境を管理しているとのことですが、コンテナとはいったい何なのでしょうか。
コンテナとは仮想環境をつくる際の 仮想化の方法のひとつ で、2000年ごろからある古い技術です。
仮想化技術
代表的は仮想化技術には以下のものがあります。
1. ホスト型仮想化
ホスト OS の上に仮想化ソフトウェアをインストールし仮想環境を構築、仮想環境にゲスト OS をインストールする方法です。VirtualBox がホスト型の仮想化ソフトウェアです。
手軽に構築できる反面、同じマシンでOSが複数稼働するため、サーバリソースを無駄に消費します。
2. コンテナ型仮想化
ホストOS上にコンテナ管理ソフトウェアをインストールし、その上でコンテナを動作させる方法です。ゲストOSはインストールされず、ホストOSを論理的に分割して利用します。
Docker はこのコンテナ型仮想化を採用しています。
※Docker は Linux 上でした動かないため、Mac で Docker を使うにはゲストOS(Linux)が必要になります
3. ハイパーバイザー型仮想化
ハードウェア上に直接、ハイパーバイザーと呼ばれる仮想化ソフトウェアをインストールする方法です。このハイパーバイザーが複数の仮想環境を制御します。ホストOSがないマシンで様々なゲストOSが複数稼働している状態ですね。
AWSのEC2 などがハイパーバイザー型仮想化になります。
というわけで Docker は VirtualBox + Vagrant + Chef の構成とは、仮想化の方法が違うということがわかりました。
イメージとは?
Docker について理解するために、コンテナの話だけではなく Dockerイメージ について覚える必要があります。
Docker イメージはPCのバックアップを取る際などに利用する、ディスクイメージと似たようなものだと考えて良さそうです。つまり、ある時点のサーバの状態をそのまま保存しておけるものです。
しかも Docker だとその状態をコードで管理することもできるとか。
Vagrant + Chef では vagrant up
時に Vagratnfile とレシピに記述された状態にサーバを収束させるようインストール等が行われますが、Docker ではインストールするのではなく Docker イメージの状態がそのまま復元されるようです。
なぜ Docker が話題なのか
コンテナ型仮想化は古くからある技術ですが、クラウドシステムの普及によって需要が高まったのですね。
サーバを簡単に構築・破棄できるようになったため、構築作業の自動化が加速しました。
Vagrant のような仮想環境と OS インストールを自動化するツール、Chef のようなミドルウェアのインストールや設定を自動化するツール、そして複数のサーバの自動化を管理するツール(Capistrano など)が開発されました。
Docker はこれらのすべてをカバーしているため、話題になっているようです。このカバーしている範囲の広さから最初に「上位版?」と感じたのだと思います。
Docker の危険性
ただ、良いことばかりではないようです。
Dockerの諸問題とRocket登場の経緯
http://deeeet.com/writing/2015/02/17/docker-bad-points/
こちらの記事には Docker の危険性がいろいろと挙げられています。
この辺を改善できないと、後発のサービスに一気に取って代わられる可能性がありますね。
おわりに:Docker を Mac で例えると
Vagrant が OS X のインストーラー、Chef が AppStore だとして、Docker は Time Machine ですね。
Mac の任意の状態をバックアップとして取得しておけるし、新しい Mac を買ってきたら Time Machine から復元して古い Mac と全く同じ状態を再現できる。そんなツールだと理解しました。
次の記事では、実際にインストールして使ってみます。