Pages

Sunday, November 6, 2022

コンテナとは:なぜ先進企業が採用? 初心者でも分かるDocker、Kubernetes - 日経 xTECH Active

(出所:123RF)

(出所:123RF)

 コンテナとは、「OS内で仮想化されたアプリケーション実行環境」を指す。アプリ開発において、同じOS上の他のアプリへの影響を気にすることなく、効率的な開発を可能にする仮想化技術として、先進企業が採用していることから注目を集めている。

 本記事ではコンテナとは何かを説明した後、導入のメリットとデメリット、コンテナを運用するプラットフォームの基本的な機能、料金相場、選定のポイントを、ITコンサルティング会社のD.Forceの川上明久氏が分かりやすく解説する。併せて、日経クロステック Activeの記事から、代表的なプラットフォームや事例などをまとめて紹介する。

初回公開:2022/11/7

*「1. コンテナとは」「2. コンテナを導入するメリットとデメリット」「3. コンテナ運用プラットフォームの基本的な機能」「4. コンテナ運用のための代表的なプラットフォーム」「5. コンテナ運用プラットフォームの料金相場」「6. コンテナ運用プラットフォームの選定のポイント」は川上明久氏が執筆

1. コンテナとは

 コンテナとは、他のアプリケーションへの影響を気にすることなくアプリの開発・実行ができるように、仮想的な環境をOS上に作って動作させる、仮想化技術である。「OS内で仮想化されたアプリ開発・実行環境」そのものもコンテナと呼ぶ。

 コンテナは、アプリ開発の手間やコストを軽減する方法として活用が進んでいる。コンテナを導入することで、アプリ開発・実行環境の独立性を高められ、手間やコストの要因である「アプリ間の干渉」の解消を期待できるからだ。

 アプリ間の干渉が発生するのは、OS上で実行するアプリごとに、必要となる環境が異なる場合があるからだ。従って、開発するアプリの種類が増えるにつれて、干渉問題は顕在化する。

 コンテナと同様の効果は、仮想マシンによっても得られる。その場合、仮想マシンごとにOSを用意するため、高性能のサーバーが必要となり、コストが高く付きやすい。起動にも分単位の時間がかかる。

 これに対してコンテナは、同じOS上で複数が稼働する。1つのOSで済むため、起動時間が短くなり、秒単位での利用が可能になる。

2. コンテナを導入するメリットとデメリット

 コンテナの導入により、企業にもたらされるメリットとデメリットは以下の通りだ。

コンテナのメリット

(1)自分のアプリ開発に集中できる

 開発者が他のアプリのことを気にせず、自分が開発するアプリに集中できる。先述のようにアプリ間の干渉解消を期待できるのは、コンテナの特徴である。

(2)サーバーのリソースを有効利用できる

 サーバーのCPUやメモリーといったリソースを有効利用できる。リソースに無駄が出ないように、複数のコンテナを組み合わせて実行できるのも特徴である。

 これらの特徴から分かるように、コンテナは数多くの小さなアプリを開発・実行する際にメリットが大きくなる。一方、アプリの単位が大きく、コンテナに合わせて細かく分割しにくい場合は、メリットは小さくなってしまう。

(出所:123RF)

(出所:123RF)

(3)別の環境への移行が簡単

 コンテナにはアプリと、その実行に必要な「ライブラリー」、そしてデータベース接続のための「ドライバー」などがセットで含まれており、後述する「コンテナエンジン」というプラットフォーム上に登録すれば実行できる。

 コンテナを作成する仕組みは標準化されているため、ある環境で運用しているコンテナを、そのまま別の環境で扱える。コンテナ作成に必要なファイル群をコピーするだけで、異なる環境へ簡単に移行できる。このようなメリットは、アプリ開発の期間短縮や柔軟なサイト運営などにつながる。

コンテナのデメリット

 デメリットは、運用が複雑になりやすいことである。大きなアプリを細かく分割することで、実行するコンテナの数は必然的に増える。コンテナの数が増えるほど、コンテナの状態や実行先を管理する手間も増えてしまう。

 これを踏まえて、運用が複雑にならないように管理を自動化、効率化するのが、コンテナのメリットを大きくするポイントである。

3. コンテナ運用プラットフォームの基本的な機能

 ここでは、コンテナの運用に用いるプラットフォームの基本的な機能について解説する。

(1)コンテナの作成・実行

 コンテナによる仮想化では、アプリの開発・実行環境となるコンテナを複数作成し、それらを1つのOS上で動作させる。このとき各コンテナに対してOSのリソースを仮想化し、独立したOSのように見せてコンテナを実行する。

 この役割を担うのが「コンテナエンジン」というプラットフォームである。コンテナエンジンはコンテナを管理できるソフトウエアであるため、「コンテナ管理ソフト」と呼ばれることも多い。

(2)コンテナの管理

 コンテナを運用するためには、「コンテナをいつ起動し、いつ停止するか」といったコンテナの実行方法を管理する必要がある。コンテナエンジンはこの機能も併せ持つ。従って、コンテナエンジンがあればコンテナを作成し動かすことができる。

(出所:123RF)

(出所:123RF)

(3)複数コンテナの管理の自動化、利便化

 実行するコンテナが1つならコンテナエンジンで十分に管理できるが、コンテナの数が増えると作業が複雑になり手間も時間もかかる。そこで登場したのが、コンテナ管理を自動化する「コンテナオーケストレーション」というプラットフォームである。「コンテナをどのサーバーでいくつ実行するか」「コンテナに障害が発生した際にどのように処理するか」といった管理を自動化する。

 さらに、サーバーの負荷を分散する「スケーリング」や、障害時にコンテナを自動復旧させる「オートヒーリング」といった、便利な機能を追加したツールが出てきた。例えばスケーリング機能では、サーバーの負荷が上がったときに自動的に他のサーバーを起動して負荷を調整したり、負荷が下がったときにサーバー台数を減らす調整をしたりする。このようにコンテナオーケストレーションの機能が充実しているほど、運用管理の負担を下げることができる。

 コンテナをより手軽に活用できるようにするために、コンテナ作成や管理の作業を受託したり、サポート強化を図ったりしたマネージドサービスも出てきた。インフラ技術者が少ないユーザー企業でも、コンテナのメリットを得やすくなる。

(出所:123RF)

(出所:123RF)

4. コンテナ運用のための代表的なプラットフォーム

 ここでは、代表的なコンテナエンジンや、コンテナオーケストレーションのプラットフォームの例を挙げる(日経クロステック Active調べ)。

(1)コンテナエンジン

Docker:米Docker 米DockerのWebページ

 コンテナエンジンとして最も普及しているのが「Docker」である。Dockerによってコンテナの仕組みの標準化が進んだ。こうした経緯から、コンテナオーケストレーションのプラットフォームのほとんどはDockerをベースとしている。コンテナオーケストレーションのツールベンダーやサービスプロバイダーは、Dockerが定めた標準を守りつつ、管理機能を強化し特徴を持たせることで競争している。

(2)コンテナオーケストレーションのプラットフォーム

 コンテナオーケストレーションのプラットフォームは、ソフトウエアまたはクラウドサービスとして提供されている。前者はコンテナオーケストレーションツール、後者はCaaS(Containers as a Service)と呼ばれる。それぞれの代表例を紹介する。

(a)コンテナオーケストレーションツール

Docker Swarm:米Docker 米DockerのWebページ

 Dockerは当初、コンテナを作成して実行するシンプルな機能のコンテナエンジンを提供していた。その後、コンテナを管理しやすくするために様々な機能を追加していった。現在は、「Docker Swarm」というコンテナオーケストレーションのためのソフトウエアを提供している。
 Docker Swarmは、コンテナが動作する複数のサーバーをまとめて管理してくれる。「コンテナ化されたアプリに対する多くの処理要求をサーバー間で負荷分散する」「新たにコンテナを起動する際にリソースの空いているサーバーを選ぶ」といったことができる。

Kubernetes:米Cloud Native Computing Foundation(CNCF) 米CNCFのWebページ

 「Kubernetes」は、コンテナオーケストレーションの機能を発展させて人気が出た、オープンソースソフトウエア(OSS)のツールである。サーバーの構成管理と、複数サーバー間でのコンテナ実行の自動化を進めるなど、管理機能が充実している。
 Kubernetesの登場によって、コンテナを利用するために必要な手間や、運用管理ノウハウの学習コストが軽減し、より手軽に活用できるようになった。Kubernetesは米Googleが開発し、当初は自ら提供していたが、現在は移管先であるCNCFが提供とメンテナンスを担当している。

(b)CaaS

 CaaSは、コンテナオーケストレーションの仕組みをクラウド上で提供するサービスである。「コンテナの運用管理をするためのPaaS(Platform as a Service)」ともいえるが、ここではCaaSとして区別する。代表的なCaaSの例を紹介する。

Google Kubernetes Engine(GKE):米Google GKEのWebページ

 GoogleがKubernetesの機能をCaaSとして提供しているのが「Google Kubernetes Engine(GKE)」である。クラウドサービスのプロバイダーでもあるGoogleが基盤の運用を管理するマネージドサービスであるため、Kubernetesのセットアップやパッチ適用、障害からの復旧のような管理をする必要はない。Kubernetesのソフトウエア管理ができるエンジニアがいなくてもコンテナを使えることから、利用が広がっている。

Amazon Elastic Kubernetes Service(Amazon EKS):米Amazon.com Amazon EKSのWebページ

 米Amazon.comがKubernetesの機能をCaaSとして提供しているのが「Amazon Elastic Kubernetes Service(Amazon EKS)」である。マネージドサービスであるため、Kubernetes自体を管理する必要はない。

Azure Kubernetes Service(AKS):米Microsoft AKSのWebページ

 米MicrosoftがKubernetesの機能をCaaSとして提供しているのが「Azure Kubernetes Service(AKS)」である。マネージドサービスであるため、Kubernetes自体を管理する必要はない。

Red Hat OpenShift(OpenShift):米Red Hat OpenShiftのWebページ

 OpenShiftは、DockerとKubernetesをベースとして、アプリ開発のビルド、テスト、デプロイを自動化するなどの管理機能を強化したプラットフォームである。Red HatはOpenShiftを、クラウド上のマネージドサービスとソフトウエアの両方の形態で提供している。

(出所:123RF)

(出所:123RF)

5. コンテナ運用プラットフォームの料金相場

(1)コンテナエンジン

 Docker自体は無料で利用できるが、Dockerが動作するサーバーをWindowsやMacの環境から利用するには、「Docker Desktop」というソフトウエアをインストールする必要がある。Docker Desktopも当初は無償利用できたが、現在は個人や小規模な企業などを除いて有償となっている。

 Docker Desktopを商用利用する際は、1ユーザー当たり月5ドルのサブスクリプション料金がかかる。ユーザーとは、Dockerを利用する開発やインフラの担当者を指す。

(2)コンテナオーケストレーションのプラットフォーム

(a)コンテナオーケストレーションツール

 オープンソースソフトウエアであるKubernetesの利用に費用はかからない。しかし、組み合わせて使うコンテナエンジンの費用については注意したい。コンテナエンジンの主流であるDockerと組み合わせて運用する場合、上述のようにDocker Desktopを使うときにその料金がかかる。

 Kubernetes環境を自力で構築、運用するには相応のスキルが必要になる。そこで技術的なサポートを求める場合は、有償のサポートサービスを検討することになる。

(b)CaaS

 CaaSのうち、クラウドプロバイダーが提供するKubernetesベースのマネージドサービスは、月額数千円の固定料金に加えて、コンテナで利用するサーバーのスペックに応じて時間課金される。具体的には、先述のGKE、Amazon EKS、AKSがこれに当たる。

 これに対して、Red HatのOpenShiftの料金は、マネージドサービスでは年間約20万円からの従量課金料金となっており、ソフトウエア版では年間十数万円からのサブスクリプション料金となっている。いずれも、使用するコンテナの数が増えるほど、多くの料金がかかることに注意したい。

 複数のコンテナを使う場合、いくつかのコンテナを「Pod(ポッド)」と呼ぶグループにまとめて扱うことで管理しやすくする。このPodの動作環境を「ノード」と呼ぶが、上述の料金はマネージドサービスとソフトウエア版のいずれも1ノード当たりの金額である。本番環境で運用する際は複数ノードを扱うことになり、ノード数に応じた料金がかかる。

(出所:123RF)

(出所:123RF)

6. コンテナ運用プラットフォームの選定のポイント

 どのコンテナ運用プラットフォームが適しているかは、利用者が置かれている状況による。

(1)自力でDockerやKubernetesを運用できる

 大量のサーバーを自社で運用している企業であれば、DockerやKubernetesを導入し自力で運用することによって、コストを抑えられるだろう。このような企業は、DockerやKubernetesのセットアップや運用に必要な専門知識を持つ人材が豊富だからだ。技術的動向を追い続け、運用環境をアップデートしていくためのインフラ担当者も置けるはずだ。利用するサーバーが大量で、効率よく運用できれば、運用を外部委託して料金を支払うよりも安くなる。

(2)オンプレミスで稼働させる予定だが、自力での運用は難しい

 オンプレミスでシステムを稼働させることが決まっているが、DockerやKubernetesを自力でセットアップして運用するのが難しいという企業も多いだろう。特に運用に必要な知識を持つインフラ技術者を用意するのは容易ではない。その場合は、外部に委託する必要がある。

 特に、オンプレミスで今後も多くのシステムを稼働させる予定で、ベンダーの手厚いサポートを望む場合は、OpenShiftのようなプラットフォームを選ぶのが良いだろう。ベンダーによるサポートがあり、構築や運用のサービスも提供してくれる。構築や運用をベンダーに委託すれば、インフラ技術者が少ないユーザーでもコンテナのメリットを得られる。

(出所:123RF)

(出所:123RF)

 この場合、プラットフォームはロックイン(乗り換え困難)になる可能性をはらむ。しかし、コンテナ技術は標準化された部分が多く、作成したコンテナ自体は他の環境へ移行させやすい。Kubernetesをベースとするプラットフォームを選んでおけば、他のKubernetesベースの環境へコンテナを移行する際にもそれほど苦労しないだろう。

(3)クラウドでシステムを稼働させる予定

 クラウドでシステムを稼働させる予定の場合は、GKE、Amazon EKS、AKSのように、Kubernetesの機能をCaaSとして提供しているマネージドサービスが適している可能性が高い。セットアップや管理が楽になり、ハードウエア(サーバー)の調達も考えなくて済む。また、時間課金で使ったリソースの分だけ料金を支払えば良いため、コストの無駄が少ない。インフラに精通した担当者がいなくても、開発者主体で利用できるだろう。

 この場合、オペレーションは自動化されるが、判断を伴う管理タスクは利用者自身で実施する。そのため、スキル習得は必要になる。

7. コンテナの代表的な事例

8. 注目のコンテナ運用プラットフォーム

 コンテナを導入して現場で運用するには、様々な手助けをしてくれるプラットフォームを利用するとよりスムーズに進む。以下では、注目のコンテナ運用プラットフォームを紹介する。

グーグル・クラウド・ジャパン

日本IBM

レッドハット

9. コンテナの新着プレスリリース

川上 明久(かわかみ・あきひさ)
D.Force 代表取締役社長

川上 明久(かわかみ・あきひさ) データマネジメント業務の内製化、データベース全般のコンサルティングに多数の実績・経験を持つ。データベース関連の著書やIT系メディア記事の執筆・連載、セミナー・講演も多数手がける。データベースのクラウド移行、データマネジメント組織構築に特に強みを持つ。

Adblock test (Why?)


からの記事と詳細 ( コンテナとは:なぜ先進企業が採用? 初心者でも分かるDocker、Kubernetes - 日経 xTECH Active )
https://ift.tt/AuOwdSr

No comments:

Post a Comment