Dockerとは何か?

f:id:ryoutaku_jo:20190225162541p:plain

【結論】
・ Dockerとは、開発チーム間で
 同じ実行環境を共有する際に利用する技術の一つ

・コンテナ型の仮想化環境するソフトウェアで、
 従来の仮想化技術と比較して軽量に動作する特徴を持つ

・仮想化とは、ハードウェアを論理的に分割することで、
 本来複数台のハードウェアが無いと実行出来ない処理を、
 一つのハードウェアで行える様にする技術


【目次】


【本題】

疑問:Dockerとは何者なのか?

現役のエンジニアの方や自社開発に内定が決まった人の話などを聞く中で、
「Docker」というソフトウェアの存在を耳にする機会が多くなりました。

どういったものか未だに理解していないのですが、
「とりあえず、流行してるなら触っとけ!」というミーハー的な発想で、
アプリ制作に組み込むという暴挙に出たので、これを機に調べることにしました。

Dockerの説明が良く分からない

とりあえず、Wikipediaから調べて見ました。

Docker(ドッカー)はコンテナ型の仮想化環境を提供するオープンソースソフトウェアである。
VMware製品などの完全仮想化を行うハイパーバイザ型製品と比べて、
ディスク使用量は少なく、仮想環境 (インスタンス) 作成や起動は速く、
性能劣化がほとんどないという利点を持つ。

Docker - Wikipedia















はぁ?


プログラミング初心者あるあるですが、
「コンテナ型」「仮想化環境」「ハイパーバイザ型」といった
説明文の中の用語の意味が分からないので、全く理解出来ません(笑)

なので、これらの用語から調べていくことにしました。

仮想化とは

仮想化は、パソコンやサーバなどのハードウェアを、
物理的な構成にとらわれずに、論理的に分割する技術のことです。

例えば、下記の画像の様に、
実際には一つだけのサーバーを、仮想化によって、
サーバー「A」「B」という二つの独立したサーバーとして扱う事が出来ます。

f:id:ryoutaku_jo:20190225195021p:plain

この技術を使えば、本来であれば複数台のサーバーを用意しないと出来ない
別々のOSやアプリを起動させるといった事を一つのサーバーで行える
という活用方法などがあります。

また、複数人で開発を進める際、実行環境の違いによるトラブルが起こる事がありますが、
仮想化を用いれば、使用しているパソコンのOSやソフトウェアが異なったとしても、
開発チーム全員が同じ実行環境を作成できるので、そういったトラブルを未然に回避する事が出来ます。

この「実行環境を共有する」という事が Dockerを利用する理由の一つです。

仮想化の種類

仮想化にも種類があって、先ほどのWikipediaでも出てきた
「ハイパーバイザ型」「ホスト型」
Dockerが提供する「コンテナ型」があります。

・ホスト型

f:id:ryoutaku_jo:20190225205739p:plain

ホストOS上で動作する仮想化ソフトウェアを利用して
仮想マシンを稼働させる方法です。

既に利用しているサーバーやPCにもインストールすることできるので
手軽に導入できる事がメリットです。一方で、ハードウェアへアクセスするには
ホストOSを経由するという余計な処理が発生するので、処理速度が落ちる欠点があります。


・ハイパーバイザ型

f:id:ryoutaku_jo:20190225215251p:plain

サーバーへ直接インストールしたハイパーバイザで仮想マシンを稼働させる方法です。

ホスト型と比べ、ハードウェアへアクセスする際にホストOSを経由しない為、
処理速度の低下を最小限に抑えることができます。


・コンテナ型

f:id:ryoutaku_jo:20190225205812p:plain

そして、Dockerが提供しているコンテナ型ですが、
ホスト型とハイパーバイザー型との大きな違いは、
ゲストOSを利用していない点です。

ゲストOSを利用せず、ホストOS上で動いているDocker engineから
「コンテナ」と呼ばれる実行環境を作成し、その中でアプリを動かします。

これにより従来の仮想化技術より、
処理速度の点で優位性の高い手法と言われています。

総括

思わぬ形ですが、仮想化など、Web技術の基礎知識を勉強する良い機会になりました。
次回は、実際に Dockerをインストールして、動かしてみたいと思います。

《今日の学習進捗》

Dockerの勉強と就活対策。

学習開始からの期間 :80日
今日までの合計時間:803h
一日あたりの平均学習時間:10.1h
今日までに到達すべき目標時間:731h
目標との解離:72h
「10,000時間」まで、

残り・・・「9197時間!」