Edited at
Quad incDay 19

初めてDockerについて調べたのでMacで例えてみる

More than 3 years have passed since last update.

VagrantChefと触ってきたので、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 と全く同じ状態を再現できる。そんなツールだと理解しました。

次の記事では、実際にインストールして使ってみます。