ソフトウェア

コンテナ・Docker・Kubernetesについて初心者にも分かりやすく解説するとこうなる


DockerKubernetesなどのコンテナ技術は多くのシステムで用いられていますが、初心者が概要を理解するのは難しいもの。そんなコンテナ技術の概要について、クラウドストレージサービスを運営するBackblazeが分かりやすくまとめています。

What Are Containers?
https://www.backblaze.com/blog/what-are-containers/

・目次
◆コンテナとは何か?
◆コンテナと仮想マシンの違いは?
◆コンテナのメリットは?
◆コンテナの用途は?
◆Dockerとは何か?
◆Kubernetesとは何か?

◆コンテナとは何か?
物流の世界における「コンテナ」は、形状やサイズを規格化し、異なるメーカーが製造した船舶・電車・トラックなどの移動手段や、世界中の港などの「異なる環境」でも同じように物を運んだり保管したりできるようにしたものです。ソフトウェア開発における「コンテナ」も、OS・ハードウェア構成・ソフトウェア構成が「異なる環境」でも同様の動作を実現できるようにする仕組みを指しています。

Docker社の元CEOであるBen Golub氏は過去のインタビューでDockerの開発動機について「『あるサーバーから別のサーバーへアプリケーションを移動するよりも、世界の反対側へ自動車を輸送する方が簡単』という事実は、解決するべき問題に思えました」と語り、現実世界の物流からインスピレーションを得てDockerを開発したことを明かしています。また、以下のDockerのロゴマークに現実世界のコンテナの絵が含まれていることからも、ソフトウェア開発におけるコンテナと現実世界のコンテナが似た目的を持っていることが分かります。


実際に、コンテナ技術が普及する以前に「ノートPCで開発したアプリケーション」を「テスト用のサーバー」に移動させる際は、ノートPCとサーバーで「プログラミング言語のバージョン」「実行権限」「使用するデータベース」などのアプリケーションの実行に必要な環境をそろえる必要がありました。しかし、コンテナ技術により、「アプリケーション」と「実行に必要な環境」をひとまとめにすることが可能になり、別のマシンでアプリケーションを実行することが容易になりました。

◆コンテナと仮想マシンの違いは?
異なる環境でも同様の動作を実現するための仕組みとしては、システム内に物理的なコンピューターを模した仮想的なコンピューターを構築する「仮想マシン」も存在します。しかし仮想マシンには「OS」や「必要なハードウェアを仮想的に再現したコピー」などが含まれているため、「ファイルサイズが大きい」「実行に多くのシステムリソースが必要」「起動に時間がかかる」といった問題が起こり得ます。また、それぞれの仮想マシンごとにOSや仮想ハードウェアを実行するため、複数の仮想マシンを起動するとシステムリソースをかなり多く消費してしまいます。


一方で、コンテナではシステムのOSをそのまま使うため、「ファイルサイズを小さく抑えられる」「実行に必要なシステムリソースが少ない」「起動が高速」といった特徴を持っています。加えて、システムのOSをベースに実行されるため複数のコンテナを実行してもシステムへの負荷が大きくなりづらいという特徴もあります。しかし、コンテナはシステムのOSをベースに実行するがゆえに「異なる種類のOSを用いたい」という用途には適していません。


◆コンテナのメリットは?
Backblazeは、上述のコンテナの特徴を基に、コンテナのメリットを以下のようにまとめています。

1:移植性を確保できる
コンテナには「別のアプリケーション」や「データ」などのアプリケーションの実行に必要な依存関係が全て含まれています。そのため環境間でアプリケーションを移動させる際のエラーやバグが減少し、適切なOSさえ準備できればアプリケーションを容易に移動させることが可能です。

2:ファイルサイズが小さい
コンテナにはOSが含まれていないため、仮想マシンと比べファイルサイズが小さくなります。そのため。1台のマシンやサーバーで多くのコンテナをサポートできます。

3:起動が高速
仮想マシンと比べてファイルサイズが小さいことや、システムのOSを共有できることから、コンテナは数秒で起動可能。一方で仮想マシンの起動には数分かかるここともあります。

4:リソースを効率よく利用できる
1つのシステムで複数のコンテナを起動することで、システムリソースを余すことなく効率的に利用できます。

5:環境の分離
コンテナを用いることで各アプリケーションだけでなくアプリケーションのパーツごとに実行環境を分離できます。これによって1つのパーツに過度の負荷が加わっても、他のアプリケーションに影響を与えずにすみます。


◆コンテナの用途は?
さまざまなメリットを持つコンテナは、多くの用途に利用可能。Backblazeは、以下の4つの用途を挙げてコンテナの利便性をアピールしています。

1:サービスの要素を分割する
コンテナの登場以前には、アプリケーションは全ての要素をひとまとめにしたオールインワンユニットとして構築されていました。しかし、コンテナの登場によってサービスを分割する「マイクロサービスアーキテクチャ」と呼ばれる手法の実行が容易になりました。例えば、ネットショップのサービスを構築する際は「検索バー」「ショッピングカート」といった要素を別々に開発し、それらをコンテナとして提供してコンテナ同士を連携させることでサービスを構築することが可能です。

2:最新の開発手法を採用する
近年、開発担当者と運用担当者が深く連携する「DevOps」や、設計・実装・テストなどを短期間で繰り返す「アジャイル開発」といった新たな開発手法が人気を集めています。Backblazeは、これらの開発手法はコンテナによる各要素の分割開発が可能になったことで広まったと主張しています。

3:ハイブリッドクラウドやマルチクラウドの採用
コンテナを用いることで、異なる環境でもアプリケーションを実行可能になりました。これにより、環境の異なる複数のクラウドサービスによって構築されたハイブリッドクラウドマルチクラウドを有効活用できます。

4:最新の環境へのスムーズな移行
「異なる環境でもアプリケーションを実行できる」というコンテナの特徴によって、最新環境への移行がスムーズになります。


◆Dockerとは何か?
コンテナ技術は、Linuxでは「LXC」や「LXD」と呼ばれるインターフェースによってサポートされています。DockerプロジェクトはLXCコンテナを構築するためのプロジェクトとして2013年に発足。2014年にリリースされたDocker0.9からはLXCに依存せずにコンテナの構築が可能になりました。その後、Dockerはコンテナを効率的に作成・実行できるユーティリティとして普及し、アプリケーション開発における事実上の世界標準となりました。


◆Kubernetesとは何か?
Kubernetesはコンテナを管理するためのプラットフォームで、コンテナの展開・配置(デプロイ)や負荷分散(スケーリング)を自動化することができます。KubernetesはGoogleによって開発されたコンテナマネージャー「Borg」を基に開発されているオープンソースソフトウェアで、記事作成時点ではCloud Native Computing Foundationによって管理されています。

Kubernetesのユーザーはコンテナの管理方法をYAMLファイルに記述することで、コンテナのデプロイやスケーリングをKubernetesに任せることが可能です。Kubernetesの公式サイトでは自身のコンテナ管理機能について「Googleが週に何十億ものコンテナを実行することを可能としているのと同じ原則に沿ってデザインされているため、Kubernetesは運用チームの人数を増やさずに規模を拡大することができます」とアピールされています。

なお、以下の記事ではKubernetesの概要を初心者にも分かりやすくまとめています。

コンテナ管理プラットフォーム「Kubernetes」について初心者にも分かりやすく解説するとこうなる - GIGAZINE

この記事のタイトルとURLをコピーする

・関連記事
Docker Desktopが無料プランを個人・小規模法人向けに限定、大企業向け新プランを設定 - GIGAZINE

DockerコンテナやKubernetesクラスタをGUIで管理できる「Portainer」レビュー - GIGAZINE

無料&自分でホストして全機能を利用できるオープンソースの高機能パスワードマネージャー「Psono」レビュー - GIGAZINE

KubernetesのCPU limits設定時における「不要なスロットリング」を回避する方法とは? - GIGAZINE

NGINXがKubernetes向けサービスメッシュ「NGINX Service Mesh」を発表 - GIGAZINE

DOOMで敵を倒してKubernetesのPodを強制終了させまくれる「Kube DOOM」レビュー - GIGAZINE

in ソフトウェア, Posted by log1o_hf

You can read the machine translated English article here.