本文は、筆者個人が学習のまとめとして作成したものですが、一人でも、だれかのお役に立てればと思います。
筆者は、某IT会社にて研修を受けている身で、技術的に(非常に)拙いため、内容に漏れや誤りがあるかもしれませんので、
より詳細で正確な情報については、読者の方々ご自身がネット上の各ソースについてあたっていただければと思います。
それでは、少しの間お付き合いください。
##「Docker」とは?
Dockerとは、ホストマシンにコンテナと呼ばれる仮想のアプリケーション実行環境を用意してくれるソフトウェアです。
Dockerは、VMwareなどの従来の類似製品に比べると、
実行環境(コンテナ)の構築やアプリケーションの起動が速く、ディスク使用量が少ないなどのメリットがあります。
これは、VMwareでは「ハイバーバイザ」といって、複数の異なるOSをサポートする仕組みを採用しているためです。
(Dockerでは、Linuxのみのサポートとなります)。
Dockerでは、一つのホストマシンに複数のコンテナを構築することができ、
コンテナは互いに通信をすることで連携して動作することが可能となります。
また、同一のホストマシンに搭載されるコンテナ同士は、
プライベートなネットワークを経由することで通信することができますが、
複数のマシンに跨ってコンテナ同士が通信する場合は、NAT(IP Masquerade)を用いる必要があります。
Dockerの標準の環境では、この複数のマシンに跨ったコンテナ間の通信・連携が難しいため、
複数のマシンで構成される環境では、コンテナ間の通信・連携を代行するソフトウェアを用意する必要があります。
(また、複数のマシンで構成される環境のことを「クラスタ」と呼びます)。
##「Kubernetes」とは?
Dockerの章で書きましたが、Docker単体では、複数のマシンに跨ってのコンテナ間の通信・連携を行うことが難しいため、
これを代行するソフトウェアを用意する必要があります。これを行うのが、Kubernetesになります。
Kubernetesを導入することで、クラスタをあたかも一台のマシンのように扱うことができます。
したがって、複数のマシンに跨ったコンテナ間の通信・連携を容易に行うことができるようになるのです。
また、Kubernetesの持つ機能としては、「スケジューリング」「スケーリング」などがあります。
スケジューリングとは、外部からコンテナを起動する要求があると、
クラスタ全体のリソース(CPU&メモリ&補助記憶)の使用状況を把握した上で、
現在の状況に最適なコンテナを自動的に選定してくれる機能です。
スケーリングとは、要求の増大に伴って、マシンを増設するなどしてクラスタ全体の性能を向上させることです。
以上で解説を終えます。
個人的には、できれば、具体的にクラスタ全体でなにができるのか、
MapReduceなどの手法やアルゴリズムについても解説したかったのですが、
いかんせん、筆者の勉強不足からそこまでには至りませんでした。
今後は、その辺りのことについても勉強して内容をまとめた上で解説したいです。
Dockerについて参考になったサイト
[https://ja.wikipedia.org/wiki/Docker]
Kubernetesについて参考になったサイト
[https://ja.wikipedia.org/wiki/Kubernetes]