Docker 01_What is Docker

なぜDockerを使うのか?

  • 最も簡単に説明すれば、パフォーマンスが良いからですね。

  • 簡単に言えば、途中で不必要なレイヤーをなくしたと思いましょう。

Dockerの特徴

  • LXC(リナックスコンテナズ)というカーネルコンテナ技術を利用して作ったコンテナ技術のひとつ。もちろん、今はLXCに全面的に依存してはいないが、LXCオプションなどが使えることを勘案すれば、最初から分離された別個の技術とは言えない。
  • 運営体制を仮想化しないコンテナ技術だけに、仮想マシンに比べて軽く、VMを含めて1台のサーバーに複数のサービスを駆動しやすい。
  • セキュリティ上、サービスがハッキングされても元のサーバに影響を与えにくい隔離された構造であるため、仮想化のメリットをかなり活用できる。
  • 仮想マシン(VM)とは異なり、既存のリナックスリソース(ディスク、ネットワークなど)をそのまま活用できるため、複数のサービスを一つのサーバーにすべて運用するにも便利である。
  • Linuxカーネル2.6.32-431以上でサポートする。 CentOS 基準では、CentOS 6.5 以上を要求する。
    (バックエンドデベロッパーなら、基本的にインフラ運用も可能になるべきだと思うので、CentOS6の勉強や運用をしていて、6.5以上バージョンを使っています!)

まずは、言葉の整理していきましょう!

仮想化(Virtualization)

  • コンピューティングにおいて、仮想化とは、仮想コンピュータハードウェアプラットフォーム、ストレージデバイス、およびコンピュータネットワークリソースを含む、何かの仮想バージョンを作成する行為を指します。
  • In computing, virtualisation refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources.
    (ps.2015年1月25日、TOEIC870点、もう5年前なので英語の実力が減少した可能性が高いです。(笑))

仮想マシン(Virtual Machine、VM)

  • 物理的ハードウェアシステムに構築され、独自のCPU、メモリ、ネットワークインターフェース、およびストレージを備え、仮想コンピュータシステム機能をする仮想環境です。

ハイパーバイザー(Hypervisor)

  • ホストシステムで多数のゲストOSを駆動できるようにするソフトウェア。
  • ハードウェアを仮想化しながらハードウェアとそれぞれのVMをモニタリングする中間管理者。 VMM(Virtual Machine Monitor)とも呼ばれる。

VM VS Docker

AmazonとNetflixで見るDocker(Container)

  • あの小さな緑、青の点が1つのコンテナ(pc)だ。
    数多くのコンテナが集まって、一つのサービスを提供しています。

  • このようなサービスを実現するのに、非常に多くの時間がかかる。
    このようなサービスがDependencyなく、1つのサービスとして実装、運営されているということはかなり難しいことである。

  • しかし、このようなことができる理由は、マイクロサービスを使用するために、
    コンテナの使用にこのようなサービスが実現、運営可能となった。

  • コンテナ技術を導入することにより、複雑度の削減、ビルドタイムの削減などが可能となり、
    運営チームは運営に集中でき、開発チームは開発に集中できるようになった。

Containerを活用したMicroservices

  • かつてはMONOLITHだったので、すべてのサービスが一つにまとまっていた。
  • そのおかげで開発、運営にかなり不便な点が多かったが、マイクロサービスに変わってからはそのような不便が消えつつある。

個人的な感想

  • 軽くはLinux、Docker、AWSの活用だけど、もう少し進むなら、Kubernetesの活用だと思います。
  • 従来はセキュリティ上の問題で、クラウドやDocker などの使用ができなかった。 (正確にはかなり制限的だった。)
    そのため、私が魅力的に感じる技術を活用できない喉の渇きがあった。
    早くこのような技術を活用できるところで働けたらと思う。それは極めて切実だ。
  • 大学研究所で研究していた時代、私の研究室の隣の部屋はクラウドコンピューティング研究室だった。
    たまにコーヒーがない時、隣の部屋の研究員先輩とコーヒータイムをしながら興味深く感じた。
    現在ソフトウェアエンジニアとして働きながら、最も興味を感じることは何かと私に聞かれたら、当然のことながら仮想化技術だと答えるだろう。
    (当時私は人工知能の研究をしていた。 惜しくも経済的な事情でアメリカの大学院に行けなかった。)

仮想化(Virtualization) VS クラウド(Cloud)

  • 仮想化は、単一の物理ハードウェアシステムで複数のシミュレーション環境や専用リソースを生成できる技術であり、
  • クラウドはネットワーク全体で拡張可能なリソースを抽象化し、フルリングするIT環境です。
  • つまり、仮想化は技術で、
  • クラウドは環境であることが著しい違いです。
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.