CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は連載第1回ということで、クラウドネイティブの概念についてを説明しました。今回は、クラウドネイティブの重要な構成要素であるアプリケーションコンテナについて解説します。アプリケーションコンテナの実装として、Docker が有名です。しかし最近では、containerd や CRI-O などのコンテナランタイムがメジャーになっています。
アプリケーションコンテナは、IaaS(Infrastructures as a Service)などに使用される完全仮想化とは異なり、準仮想化技術を用いた仮想化実装です。コンテナ型仮想化は、ホストのOSの機能を使用し、ゲストのプロセス、ファイルシステム、ネットワークを他ゲストから分離する仮想化です。アプリケーションコンテナは、コンテナ型仮想化技術を使用し、アプリケーションの実行環境を他ゲストから分離します。これは、昔からある chroot による分離に似ています。アプリケーションコンテナを使用することで、以下の利点があります。
現在、各クラウドプロバイダで提供しているIaaSは、仮想化されたOS環境をユーザに提供するサービスです。このとき、完全仮想化と呼ばれる仮想化技術が使用されます。
完全仮想化とは、仮想的なハードウェアをエミュレートした環境を、その環境上でOSを起動する技術です。ハードウェアをエミュレートするため、仮想化を提供するホストOSとは異なるゲストOSを起動できます。完全仮想化は仮想環境単位で分離できるため、ゲストOSでのアクセスは、通常の物理マシンと同じくネットワーク経由になります。エミュレートするために、物理ホストより性能的なオーバーヘッドがかかります。しかし、昨今のCPUに実装された仮想化支援機能を使用することで、オーバーヘッドはかなり少なくなっています。
準仮想化では、ホストOSの機能を使用してリソース(プロセス、ファイルシステム、ネットワーク)を分離することで、別のOSとして振舞います。このため完全仮想化におけるエミュレータが不要で、プロセスを起動するだけでOS起動処理も不要です。仮想マシンが使用するストレージやネットワークデバイスは、ホストOSが用意します。このため準仮想化は、完全仮想化よりもホスト側の負荷が低くなります。
アプリケーションコンテナは準仮想化技術を使用するため、OSの機能を使用するだけで特定アプリケーションのみを分離して使用します。このため、コンテナの起動はアプリケーションを起動するのと、ほぼ同じ時間になります。ネットワーク、ストレージなどの仮想デバイスも、カーネルの機能により作成するため、全仮想化で仮想デバイスを作成するより遥かに早い時間で作成できます。
コンテナイメージは、アプリケーションコンテナをテンプレート化したものです。コンテナイメージを展開することで、イメージと同じアプリケーションコンテナを実行できます。現在のアプリケーションコンテナは Docker をもとにしいますが、定義ファイルDockerfileを使用してコンテナイメージを定義しています。また、別のコンテナイメージをもとにして、別のアプリケーションコンテナを定義可能です。これは、コンテナイメージがレイヤー構造を持っているためです。
以下の例は、 Bullseyeイメージをもとにして、hy というPython言語ベースのアプリケーションコンテナを作成している例です。debian:bullseye-slimは、Linux のディストリビューション Debian の最新版である Bullseye をコンテナイメージにしたものです。このイメージをもとに、Python言語のバージョン3.10.4のコンテナイメージを作成し、そのイメージをもとにhylangをインストールしたコンテナイメージを作成します。このように、基本となるコンテナイメージをもとに、新しいコンテナイメージを作成できます。
コンテナイメージは、コンテナレジストリという場所に配置できます。一番有名なコンテナレジストリは DockerHub ですが、自分の環境内に配置できます。また、クラウドプロバイダから提供されているコンテナレジストリも使えます。
コンテナイメージを使用することで、同じアプリケーションコンテナを簡単に複数ホストで実行できます。
今回は、クラウドネイティブにおける重要な要素、アプリケーションコンテナについて紹介しました。アプリケーションコンテナを使用することで、複数のホストに同じ環境を素早く、低コストで提供できます。これによって、ダイナミックな環境でスケーラブルにアプリケーションを実行できます。多くの場合、コンテナはアプリケーションコンテナをコンテナと呼称するため、次回以降からコンテナ=アプリケーションコンテナとご理解ください。
次回は、アプリケーションコンテナを操作するために使用するコンテナオーケストレーションについて説明します。次回をお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes