Dockerとは?~コンテナ・Kubernetesとの関係性~
多くの企業がDX推進に注力する中で、Dockerを中心としたコンテナ活用への注目度が高まってきました。さらに、コンテナを管理するKubernetesにより、より複雑な環境の管理が可能になってきました。コンテナと仮想マシンの同一環境管理を実現するVMware Tanzuなど新たなツールも次々と登場する中で、コンテナの重要性がさらに高まっています。
DockerとKubernetes
クラウドネイティブの中核技術として、コンテナへの注目が高まっています。高速起動や軽量などコンテナのメリットが、アプリケーション開発の可能性を高め、結果としてデジタルトランスフォーメーション(DX)を進めると言われています。
コンテナを活用する際には、アプリケーションとその実行に必要なライブラリや設定情報を合わせた「コンテナイメージ」が必要になります。このイメージのデファクトスタンダードが、アプリケーションの実行環境を仮想化するオープンソースソフトウェア(OSS)であるDockerです。Docker準拠のイメージを採用することで、ローカルやさまざまなクラウド環境上のテスト、本番環境で同じように動作する可搬性(ポータビリティ)のメリットが実現します。
このとき、さまざまなコンテナイメージを統合して管理する必要が出てきます。そのOSSがKubernetesです。Kubernetesは、コンテナを中心とする今後のIT環境における新たなOSになると言われるほど重要なソフトウェアと言われています。この記事では、DockerとKubernetesの関係について解説します。
Docker活用から見えるコンテナの効果
Dockerは、コンテナ型の仮想環境を作成、配布、実行する基盤となるOSSで、Docker社が開発しています。軽量で高速に起動、停止できるなど、仮想マシンとの違いについては既に述べたとおりです。ここでは、Dockerコンテナ活用の例から、効果を紐解いていきます。
迅速なスケール
ファッションサイトなどコンシューマー向けのサイトを運営する企業がコンテナを活用した場合、キャンペーンやメディア露出などによるトラフィック急増に迅速に対応することができます。福袋など年に数回の販促イベントによってウェブサイトへのアクセスが急増することに備え、これまで多くの企業は物理サーバーの増強で対応してきました。ピークに合わせてハードウェアを購入するため、コスト効率が悪いというデメリットがあります。コンテナを活用すれば、負荷に合わせてコンテナを自動的に増減するオートスケールを実装できます。サーバーダウンを回避できるだけでなく、ランニングコストを低減できます。
クラウド乗り換え
ベンダー間の乗り換えが容易であることは、Dockerコンテナの大きな利点の1つと言えます。1つのベンダーのクラウド環境上でコンテナを構築し、営業情報などの分析基盤を実装しているといった企業が、クラウドサービスの仕様などを考慮してベンダーを乗り換えるといったケースがあります。例えば、あるクラウドサービスで、すべてのコンテナのリソースサイズを1つに統一する必要があるといった場合に、より低コストの運用が可能になるベンダーに移るといったニーズが生じます。Dockerコンテナでは、これを解消するために別のサービスに移ることが容易です。結果として、負荷の重い処理と軽い処理でコンテナのリソースサイズを調整できるようになり、コストの大幅削減が可能になります。
コンテナ納品
コンテナの可搬性の高さはアプリケーション構築の外部委託でも有用です。大企業が新たなサービスを展開するためにFinTechのスタートアップにアプリ開発を委託するといったケースにおいて、コンテナは成果物の納品を受ける際に便利な仕様になっています。従来はセキュリティの確保と開発生産性の両立が難しかった分野です。スタートアップとしても、使いなれた開発環境を使えるなどメリットが大きいと言えます。そこで採用したのがコンテナでの納品です。ベースとなるクラウドサービス、本番、テストなど環境がそれぞれ違っても概ね同様に動作するというコンテナのメリットは、アウトソーシングの積極活用にもつながるのです。
今後の「OS」とも言われるKubernetes
コンテナは、OSのプロセスをネームスペースの技術を使って分離した仮想環境と言えます。Dockerコンテナではアプリケーションの実行に必要なコードやランタイム、ツール、ライブラリ、設定情報をDockerイメージとして管理し、それを開発、テスト、本番に展開することで、アプリケーションの開発を高速化できます。
しかし、本番環境でアプリケーションを安定的に運用するためには、性能、拡張性、セキュリティといった非機能要件を定める必要が出てきます。それを実施するツールとして、複数のコンテナをまとめて管理するコンテナオーケストレーションツールが「Kubernetes」です。
Kubernetesはギリシャ語で船長、パイロットを意味します。コンテナの起動や削除、監視と自動復旧などコンテナ全体を操縦するようなイメージです。Kubernetesは米グーグルが自社サービスの基盤向けに開発した「Borg」が基になっていると言われています。GoogleがBorgをベースにしたKubernetesを公開後、非営利団体のCNCF(Cloud Native Computing Foundation)の下、開発が進んでいます。
Kubernetesでは、1つ以上のコンテナを含むPodという単位で管理します。Podに含む複数のコンテナを組み合わせることで、複雑な機能を持つアプリケーションを簡単に構築できます。Podのリソースやストレージなどの管理をKubernetesで実施できます。
標準化の動きもKubernetesの安定化に寄与しつつあります。コンテナイメージ向けのAPIであるOCI(Open Container Initiative)や、Kubernetesとコンテナ間のインタフェースであるCRI(Container Runtime Interface)の標準化が進んできています。OCIやCRIに準拠するコンテナであれば、Kubernetesでの安定的な稼働を期待できるのです。
VMware Tanzuでコンテナも仮想マシンも一元管理
ここまで、Dockerイメージの機能と、コンテナ活用の上手に管理するためのKubernetesについて触れてきました。DXを進める基盤としてコンテナが有用であることは分かりますが、企業における実際のIT環境には、仮想マシンで構築した過去からのIT資産が存在しています。
VMwareは2020年3月、Kubernetesの新しい提供形態として、コンテナと仮想マシンを一元管理できるツール「VMware Tanzu」を発表しました。Tanzuでは、VMwareの仮想化ソフトであるvSphere上でKubernetesに相当するコンテナ管理機能を提供します。これにより、従来型の仮想マシンとコンテナが共存する環境を一元的に管理できるようになります。
Tanzuの登場により、今後Kubernetesはオンプレミスやクラウドを問わず、導入が進んでいく可能性があります。Kubernetesに対応したアプリケーションを、複数のクラウドやオンプレミス環境に横断したコンテナに分散して配置するといった手法を採用することもできるのです。
このように、DockerコンテナとKubernetesの登場は、従来の仮想マシンで開発したシステムを巻き込む形で、企業のIT環境構築における主役への道を歩み始めています。