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
- VM VS Docker(Container)関連論文 : https://arxiv.org/pdf/1807.01842.pdf
AmazonとNetflixで見るDocker(Container)
あの小さな緑、青の点が1つのコンテナ(pc)だ。
数多くのコンテナが集まって、一つのサービスを提供しています。このようなサービスを実現するのに、非常に多くの時間がかかる。
このようなサービスがDependencyなく、1つのサービスとして実装、運営されているということはかなり難しいことである。しかし、このようなことができる理由は、マイクロサービスを使用するために、
コンテナの使用にこのようなサービスが実現、運営可能となった。コンテナ技術を導入することにより、複雑度の削減、ビルドタイムの削減などが可能となり、
運営チームは運営に集中でき、開発チームは開発に集中できるようになった。
Containerを活用したMicroservices
- かつてはMONOLITHだったので、すべてのサービスが一つにまとまっていた。
- そのおかげで開発、運営にかなり不便な点が多かったが、マイクロサービスに変わってからはそのような不便が消えつつある。
個人的な感想
- 軽くはLinux、Docker、AWSの活用だけど、もう少し進むなら、Kubernetesの活用だと思います。
- 従来はセキュリティ上の問題で、クラウドやDocker などの使用ができなかった。 (正確にはかなり制限的だった。)
そのため、私が魅力的に感じる技術を活用できない喉の渇きがあった。
早くこのような技術を活用できるところで働けたらと思う。それは極めて切実だ。 - 大学研究所で研究していた時代、私の研究室の隣の部屋はクラウドコンピューティング研究室だった。
たまにコーヒーがない時、隣の部屋の研究員先輩とコーヒータイムをしながら興味深く感じた。
現在ソフトウェアエンジニアとして働きながら、最も興味を感じることは何かと私に聞かれたら、当然のことながら仮想化技術だと答えるだろう。
(当時私は人工知能の研究をしていた。 惜しくも経済的な事情でアメリカの大学院に行けなかった。)
仮想化(Virtualization) VS クラウド(Cloud)
- 仮想化は、単一の物理ハードウェアシステムで複数のシミュレーション環境や専用リソースを生成できる技術であり、
- クラウドはネットワーク全体で拡張可能なリソースを抽象化し、フルリングするIT環境です。
- つまり、仮想化は技術で、
- クラウドは環境であることが著しい違いです。