COLUMN誰でもわかる!お役立ちコラム

エッジ活用支援コラム

エッジコンピューティングで注目のコンテナ技術とは?

コンテナ技術がなぜ広がっているのか?

近年、コンテナ技術を用いたシステム開発が拡大しています。例えば、IDC Japanが2021年2月に発表した、国内の企業・組織420社を対象に、コンテナ仮想化技術(以下、コンテナ)とコンテナオーケストレーションツールのKubernetesの導入状況に関する調査によると、コンテナを本番環境で使用する企業は16.9%で、2020年調査から2.7ポイント上昇しています。

導入構築、テスト、検証段階にある企業は23.3%で、2020年調査から4.7ポイント上昇しました。この2つを合わせた40.2%の企業がコンテナを導入済みもしくは導入準備中であることになります。このようにコンテナ技術の利用が拡大している理由としては、コンテナ技術を用いることでアプリやWebシステムの開発や管理を効率的に進行できる点が挙げられます。

具体的にどのようにして、Webサイトやアプリの開発を効率化するのか、コンテナ技術がどのようなものなのかも踏まえて、見ていきましょう。
出典:https://it.impress.co.jp/articles/-/21377

そもそもコンテナ技術とは

コンテナ技術とは、仮想化技術の1つです。仮想化技術とは、物理サーバーに対してあたかも複数のサーバーがあるような設定を行い、サーバーなどのリソースを効率化することを指します。使っているパソコン1台のリソースを効率的に使って、複数のパソコンを使うかのように設定する、というイメージでいいでしょう。

コンテナ技術は、サーバー上に複数の区画を設け、そのなかで複数のアプリケーションを同時に実行・動作させる仕組みです。アプリケーションの動作に必要な様々なプログラムを区画にひとまとめにしておくといった様子が、貨物輸送に使われる箱(コンテナ)と同じような状況であるためコンテナ技術と呼ばれるようになりました。

Webサイトやアプリ開発がなぜ効率化するのか?

Webサイトやアプリケーションは、様々なプログラムから成立します。例えば、ミドルウェアやプログラミングで生成されたコード、コードが参照するライブラリといった内容です。通常、システム開発においてはサーバーに様々なライブラリをインストールして、それをもとにシステム開発を行いますが、開発環境と本番環境におけるライブラリなどの差異から開発環境で動いたアプリケーションが本番環境で動かない、といった事象が非常によく発生します。

一方でコンテナはミドルウェアやライブラリをひとまとめにしたものを本番環境に適用するため、そういったライブラリなどの差異によるシステム障害は起きず、高速で開発を行うことが可能です。このような、コンテナはコンテナが稼働できる環境であればほとんどどこの環境でも起動することができるといった、圧倒的な可搬性が大きな特徴です。

SUSE社公式パートナー/スタイルズによるRancher/K3sの商用保守サポートはこちら→

コンテナ技術のメリットとデメリット

メリットは下記の通りです。

  • サーバーやCPUなどのリソースを有効活用できる
    コンテナは仮想化技術の1つであるため、1つのサーバー機器におけるCPUやメモリといったリソースを有効活用することができます。これにより、機器の購入費を抑えるだけでなく、CO2の削減など、環境への配慮も実現可能です。例えばGoogleは、GmailやGoogleCloudといったほとんどすべてのサービスをコンテナで運用していますが、2017年以降カーボンニュートラルを達成したことで有名です。(※出典)
    ※出典…https://cloud.google.com/blog/ja/topics/sustainability/pick-the-google-cloud-region-with-the-lowest-co2
  • 開発から本番環境へのアプリリリースがしやすい
    先述のように、コンテナは圧倒的な可搬性があるため、開発環境から本番環境へのアプリリリースが非常に楽に実施することができます。これによりリリース時の不具合を軽減できるだけでなく、開発環境から本番環境へのリリースを自動化したり、スケールアウトしたり、といったCI/CDの環境を整理することも非常に楽に実施可能です。
  • 起動が高速
    サーバーの起動は早くても10秒程度かかりますが、コンテナの起動はミリ秒単位で済みます。したがって、開発環境の立ち上げやコンテナを用いたテストを実施する際には、待ち時間が少なく非常にストレスが軽減されます。

デメリットは?

デメリットは下記の通りです。

  • 学習コストが高い
    コンテナによるアプリケーションの開発には、通常のサーバーの設定やプログラミングに関するスキルに加え、コンテナ技術に関するスキルも必要となります。したがって、学習コストが少々高くなります。また、後述するKubernetesについては学習内容が非常に多く、マスターするまで時間がかかります。
  • アプリケーションの構成や運用が複雑化しやすい
    アプリケーションごとにシステムを細かく分割できるがゆえに、全体の運用が複雑化しやすいというデメリットがあります。例えば、あるコンテナがどのコンテナと通信をして、どのような処理をしているのか、といった通信フローはより複雑になります。また、障害を前提とした可用性のある構成が前提となります。したがって、アプリケーションの構成が通常のサーバーよりも複雑になります。

SUSE社公式パートナー/スタイルズによるRancher/K3sの商用保守サポートはこちら→

コンテナ技術の代表的製品(Docker、Kubernetes、Rancher)

コンテナ技術をサーバー上で利用するためには、コンテナ環境を構築するためミドルウェアを導入する必要があります。代表的な製品を3つ紹介します。

Docker

コンテナ環境を構築するためのミドルウェアとしてデファクトスタンダードとなっているのが、Docker社が提供する「Docker」(ドッカー)です。世界中で利用されているコンテナの環境の大半はこちらの製品上で動いています。環境構築の難易度も低いため、エンジニアにとっても学習コストが低く済みます。OS内でいくつものコンテナを稼働させてもオーバーヘッドのリスクを最小限に保ちながら快適な稼働が実現します。

Kubernetes

Kubernetes(クーベネティス、クバネティス)はコンテナ環境を効率的に運用するためのツールです。Kubernetesは元々Googleが開発したBorgという、Googleが現在も利用しているコンテナ管理基盤から独立して、オープンソースとして世界中で利用されている製品となっています。Dockerで作成したコンテナをKubernetesで効率的に運用する、といった使い方も可能です。

Rancher

Rancher(ランチャー)は、Rancher Labsが開発したコンテナ管理のプラットフォームで、オープンソース・ソフトウェアとして無償で利用できます。Kubernetesの学習コストが高いため、より習得しやすいコンテナ管理基盤としてRancherが誕生しました。

コンテナ技術は難しい?

コンテナ技術を導入してアプリケーションを構築したい場合は、技術的な壁と社内調整の壁が存在し、通常のアプリケーション開発よりも導入が難しいという面があります。

技術習得の壁

コンテナは下記の面から、初心者には少々扱いが難しいと言えます。

  • サーバーに加えて追加のインフラ知識が必要…サーバーの知識に加え、ネットワークなどの知識もコンテナの起動のためには必要です。また、Kuberentesなどは設定ファイルの項目等も覚える必要があり、学習する必要がある内容が少なからず存在します。
  • サーバー上に構築される運用方法とは異なった発想が必要…例えばログの確認やセキュリティインシデントへの対応といった従来の運用方法については、コンテナ特有の運用方法を考える必要があります。

社内を説得する壁

コンテナは比較的新しい技術であり、サーバー上にアプリケーションを構築してきた一般的な企業においてはなじみがない技術となります。例えば、コンテナを利用したアプリケーションは設計の発想や運用の方法が従来と異なる部分があります。

したがって、コンテナを使いたくとも、社内を説得して技術を導入する、といったハードルを越えることが難しいという特徴があります。

Dockerの課題(kubernetesが必要なわけ)

通常のサーバーと違い、コンテナでアプリケーションを運用していくにあたっては、下記の項目について考慮をしておく必要があります。

  • データの管理
  • ワークロードの管理
  • ログの管理
  • 障害時の自動復旧
  • コンテナのスケジューリング
  • コンテナのオートスケール

一からこのような項目を検討することは時間が非常にかかります。一方で、Kubernetesを使うことで、上記の考慮次項をすぐに構成に反映することができます。また、上記の構成を実現するためのベストプラクティスもインターネット上に情報として公開されているため、安心してアプリケーションをデプロイするためにはKubernetesを選択してコンテナ活用を進める必要があります。ただしKubernetesの習得は難易度が高いことは定説にもなっています。

まとめ

コンテナは従来のサーバー上で稼働するアプリケーションに加えて考慮するべき事柄が非常に多いです。一方で、導入を進めるとアプリケーションの高速開発を実現することができ、効率的なアプリケーションのリリースができるようになります。ぜひコンテナの活用を検討し、システム開発における工数の削減を目指してみてください。