令和4年度 秋期 応用情報技術者試験 午後 問4 コンテナ型仮想化を用いた開発環境の構築

学習ガイド

レストラン予約サービスの開発会社が、ミドルウェアのパッチ適用の手間を減らすためにコンテナ型仮想化を導入する事例です。サーバ型仮想化との構造の違い、イメージに含めるものと含めないものの判断、起動オプションによるポートとディレクトリの対応、リリース時点のバージョンに合ったイメージの選び方を順に確認します。

この記事で押さえる論点

  • サーバ型仮想化(ハイパーバイザー・ホストOS上の仮想マシン)とコンテナ型の違いを、ゲストOSが不要になる点から説明できる
  • ソースコードやロードモジュールをコンテナイメージに含めず、バージョン管理システムで管理する理由を述べられる
  • -pオプションと-vオプションの意味から、テスト用URLとホストOS側のファイルパスを導ける
  • リリーススケジュールと本番環境のミドルウェアのバージョンから、修正作業に使うべきコンテナイメージを選べる

問題本文

コンテナ型仮想化技術に関する次の記述を読んで,設問に答えよ。

C社は,レストランの予約サービスを提供する会社である。C社のレストランの予約サービスを提供する Webアプリケーションソフトウェア(以下,Webアプリという)は,20名の開発者が在籍する Webアプリ開発部で開発,保守されている。C社の Webアプリにアクセスする URLは,“https://www.example.jp/”である。

Webアプリには,機能 X,機能 Y,機能 Zの三つの機能があり,そのソースコードやコンパイル済みロードモジュールは,開発期間中に頻繁に更新されるので,バージョン管理システムを利用してバージョン管理している。また,Webアプリは,外部のベンダーが提供するミドルウェア A及びミドルウェア Bを利用しており,各ミドルウェアには開発ベンダーから不定期にアップデートパッチ(以下,パッチという)が提供される。パッチが提供された場合,C社ではテスト環境で一定期間テストを行った後,顧客向けにサービスを提供する本番環境のミドルウェアにパッチを適用している。

このため,Webアプリの開発者は,本番環境に適用されるパッチにあわせて,自分の開発用 PCの開発環境のミドルウェアにもパッチを適用する必要がある。開発環境へのパッチは,20台の開発用 PC全てに適用する必要があり,作業工数が掛かる。

そこで,Webアプリ開発部では,Webアプリの動作に必要なソフトウェアをイメージファイルにまとめて配布することができるコンテナ型仮想化技術を用いて,パッチ適用済みのコンテナイメージを開発者の開発用 PCに配布することで,開発環境へのミドルウェアのパッチ適用工数を削減することについて検討を開始した。コンテナ型仮想化技術を用いた開発環境の構築は,Webアプリ開発部の Dさんが担当することになった。

〔Webアプリのリリーススケジュール〕

まず Dさんは,今後のミドルウェアへのパッチ適用と Webアプリのリリーススケジュールを確認した。今後のリリーススケジュールを図1に示す。

図1 今後のリリーススケジュール
図の説明テキスト

図1 今後のリリーススケジュール

リリース案件 説明 7月 8月 9月 10月 11月 12月
本番環境へのパッチ適用 - ミドルウェアAパッチ適用 バージョン10.1.2パッチの適用 テスト ▲リリース
本番環境へのパッチ適用 - ミドルウェアBパッチ適用 バージョン15.3.4パッチの適用 テスト ▲リリース
Webアプリ開発 - 10月1日リリース向け開発 機能Xの変更 設計 開発 テスト ▲リリース
Webアプリ開発 - 11月1日リリース向け開発 機能Yの変更 設計 開発 テスト ▲リリース
Webアプリ開発 - 12月1日リリース向け開発 機能Zの変更 設計 開発 テスト ▲リリース

C社では,ミドルウェアの公開済みのパッチを計画的に本番環境に適用しており,本番環境のミドルウェアAのパッチ適用が10月中旬に,ミドルウェアBのパッチ適用が11月中旬に計画されている。また,10月,11月,及び12月に向けて三つのWebアプリ開発案件が並行して進められる予定である。開発者は各Webアプリ開発案件のリリーススケジュールを考慮し,リリース時点の本番環境のミドルウェアのバージョンと同一のバージョンのミドルウェアを開発環境にインストールして開発作業を行う必要がある。

なお,二つのミドルウェアでは,パッチ提供の場合にはバージョン番号が0.0.1ずつ上がることがミドルウェアの開発ベンダーから公表されている。また,バージョン番号を飛ばして本番環境のミドルウェアにパッチを適用することはない。

〔コンテナ型仮想化技術の調査〕

次にDさんは,コンテナ型仮想化技術について調査した。コンテナ型仮想化技術は,一つのOS上に独立したアプリケーションの動作環境を構成する技術であり,aやb上に仮想マシンを動作させるサーバ型仮想化技術と比較してcが不要となり,CPUやメモリを効率良く利用できる。C社の開発環境で用いる場合には,Webアプリの開発に必要な指定バージョンのミドルウェアをコンテナイメージにまとめ,それを開発者に配布する。

〔コンテナイメージの作成〕

まずDさんは,基本的なライブラリを含むコンテナイメージをインターネット上の公開リポジトリからダウンロードし,Webアプリの開発に必要な二つのミドルウェアの指定バージョンをコンテナ内にインストールした。次に,コンテナイメージを作成し社内リポジトリへ登録して,C社の開発者がダウンロードできるようにした。

なお,Webアプリのソースコードやロードモジュールは,バージョン管理システムを利用してバージョン管理し,①コンテナイメージにWebアプリのソースコードやロードモジュールは含めないことにした。Dさんが作成したコンテナイメージの一覧を表1に示す。

表1 Dさんが作成したコンテナイメージの一覧
図の説明テキスト

表1 Dさんが作成したコンテナイメージの一覧

コンテナイメージ名 説明 ミドルウェアA バージョン ミドルウェアB バージョン
img-dev_oct 10月1日リリース向け開発用 (省略) (省略)
img-dev_nov 11月1日リリース向け開発用 d e
img-dev_dec 12月1日リリース向け開発用 10.1.2 15.3.4

〔コンテナイメージの利用〕

Webアプリ開発部のEさんは,機能Xの変更を行うために,Dさんが作成したコンテナイメージ“img-dev_oct”を社内リポジトリからダウンロードし,開発用PCでコンテナを起動させた。Eさんが用いたコンテナの起動コマンドの引数(抜粋)を図2に示す。

図2 Eさんが用いたコンテナの起動コマンドの引数(抜粋)
図の説明テキスト

図2 Eさんが用いたコンテナの起動コマンドの引数(抜粋)
コマンド引数: -p 10443:443 -v /app/FuncX:/app img-dev_oct

図2中の-pオプションは,ホストOSの10443番ポートをコンテナの443番ポートにバインドするオプションである。なお,コンテナ内では443番ポートでWebアプリへのアクセスを待ち受ける。さらに,-vオプションは,ホストOSのディレクトリ“/app/FuncX”を,コンテナ内の“/app”にマウントするオプションである。

EさんがWebアプリのテストを行う場合,開発用PCのホストOSで実行されるWebブラウザから②テスト用のURLへアクセスすることで“img-dev_oct”内で実行されているWebアプリにアクセスできる。また,コンテナ内に作成されたファイル“/app/test/test.txt”は,ホストOSのfとして作成される。

12月1日リリース向け開発案件をリリースした後の12月中旬に,10月1日リリース向け開発で変更を加えた機能Xに処理ロジックの誤りが検出された。この誤りを12月中旬に修正して本番環境へリリースするために,Eさんは③あるコンテナイメージを開発用PC上で起動させて,機能Xの誤りを修正した。

その後,Dさんはコンテナ型仮想化技術を活用した開発環境の構築を完了させ,開発者の開発環境へのパッチ適用作業を軽減した。

設問と解答・解説

設問1

(1)配点 2点

本文中の a と b に入れる適切な字句を解答群の中から二つ選び,記号で答えよ(a・b は順不同)。

ア. アプリケーション
イ. ゲストOS
ウ. ハイパーバイザー
エ. ホストOS
オ. ミドルウェア

模範解答

選択肢ウ: ハイパーバイザー

選択肢エ: ホストOS

解説

本問は、コンテナ型仮想化技術と対比されるサーバ型仮想化技術の基本的なアーキテクチャについて問う問題です。

本文は「aやb上に仮想マシンを動作させるサーバ型仮想化技術」と述べており、空欄 a と b には仮想マシンを動作させる土台となる ウ(ハイパーバイザー) と エ(ホストOS) が入ります。公式解答例では a・b は順不同(a=ウ・b=エ でも a=エ・b=ウ でも正解)とされているため、本設問では a・b をまとめて「二つ選ぶ」形式にしています。ウとエの両方を選んだ場合に正解で、片方だけ、あるいは同じものを二つ数える回答は正解になりません。

サーバ型仮想化には、物理ハードウェアの直上でハイパーバイザーが仮想マシンを動作させるベアメタル型と、ホストOS上の仮想化ソフトウェアが仮想マシンを動作させるホスト型があります。いずれもゲストOSを含む仮想マシンを丸ごと動作させる点がコンテナ型仮想化との違いです。

各選択肢の解説

  • ア(アプリケーション): OS上で動作するソフトウェア層であり、仮想マシンを動作させる基盤ではありません。
  • イ(ゲストOS): 仮想マシンの中で動作するOSです。仮想マシンを「その上で動作させる」側ではありません。
  • ウ(ハイパーバイザー): 物理ハードウェアの直上(ベアメタル型)で複数の仮想マシンを動作させる仮想化基盤です。正解。
  • エ(ホストOS): ホスト型仮想化で、物理マシン上のOSの上に仮想化ソフトウェアを載せて仮想マシンを動作させます。正解。
  • オ(ミドルウェア): OSとアプリケーションの中間層であり、仮想化基盤ではありません。
(2)配点 1点

本文中の c に入れる適切な字句を解答群の中から選び,記号で答えよ。

ア. アプリケーション
イ. ゲストOS
ウ. ハイパーバイザー
エ. ホストOS
オ. ミドルウェア

模範解答

選択肢イ: ゲストOS

解説

本問は、仮想マシン上で稼働するOSの呼称に関する基本的な知識を問う問題です。

正解は イ(ゲストOS) です。

仮想化環境において、ホストOSやハイパーバイザーによって論理的に構築された仮想マシン(VM)内にインストールされ、動作するOSのことをゲストOSと呼びます。

各選択肢の解説

  • ア(アプリケーション): ゲストOS上で動作する個々のプログラムを指します。
  • イ(正解): ゲストOS は、仮想化されたハードウェア環境上で動作し、独立したシステムとして機能するOSです。
  • ウ(ハイパーバイザー): ゲストOSを稼働させるための仮想化基盤となる層です。
  • エ(ホストOS): 物理マシン上で動作し、仮想化基盤を支える側のOSです。
  • オ(ミドルウェア): ゲストOS上のアプリケーションに対して機能を提供するソフトウェア層です。
(3)配点 1点

今回の開発で,サーバ型仮想化技術と比較したコンテナ型仮想化技術を用いるメリットとして,最も適切なものを解答群の中から選び,記号で答えよ。

ア. 開発者間で差異のない同一の開発環境を構築できる。
イ. 開発用PC内で複数Webアプリ開発案件用の開発環境を実行できる。
ウ. 開発用PCのOSバージョンに依存しない開発環境を構築できる。
エ. 配布するイメージファイルのサイズを小さくできる。

模範解答

選択肢エ: 配布するイメージファイルのサイズを小さくできる。

解説

本問は、サーバ型仮想化技術と比較した際の、コンテナ型仮想化技術特有のメリットを問う問題です。

正解は エ(配布するイメージファイルのサイズを小さくできる。) です。

コンテナ型仮想化は、ホストマシンのOSカーネルを複数のコンテナで共有する仕組みを持っています。そのため、コンテナイメージにはゲストOSが含まれず、アプリケーションの実行に必要なライブラリやモジュールのみが含まれます。これにより、サーバ型仮想化に比べてイメージサイズが大幅に小さくなり、起動も高速になるという利点があります。

各選択肢の解説

  • ア: 開発者間で差異のない同一環境を構築できる点は仮想化技術全般のメリットであり、コンテナ型特有のものではありません。
  • イ: 複数の開発環境を並行して実行できる点も、サーバ型仮想化技術で同様に実現可能です。
  • ウ: コンテナはホストOSのカーネルを共有するため、完全にOSバージョンに依存しないわけではありません(ホストのカーネルに依存します)。
  • エ(正解): コンテナはゲストOSを含まないため、配布するイメージファイルのサイズを小さくできる ことが最大の特徴の一つです。

設問1(1)のa,bは,正答率が平均的であった。サーバ型仮想化技術に関する基本的な理解として,ハイパーバイザーやホストOSなどの用語を問うた。仮想化技術は昨今の情報システム構築において欠かすことができないので,その理解を深めてほしい。 設問1(2)は,正答率が低かった。仮想化技術の進化によって,ハイパーバイザー型,ホスト型,コンテナ型など利用可能な仮想化技術が増えてきているので,それぞれの特徴を十分に理解した上で適切なものを選択する能力を習得してほしい。

設問2

(1)配点 3点

本文中の下線①について,なぜDさんはソースコードやロードモジュールについてはコンテナイメージに含めずに,バージョン管理システムを利用して管理するのか,20字以内で答えよ。

模範解答

開発期間中に頻繁に更新されるから

採点基準

知識・理解度(内容)2点
  • 2点: ソースコードやロードモジュールが「頻繁に更新される」対象であると正しく理解し、明記できている。
  • 1点: 更新される性質には触れているが、表現が曖昧、または頻度の高さが伝わりきらない。
  • 0点: 更新頻度について言及がない、または不適切な理由となっている。
論理性(構造)1点
  • 1点: コンテナイメージに含めない理由として、文脈に沿った適切な理由づけ(「〜から」など)の形で記述できている。
  • 0点: 理由を説明する文構造になっていない。

解説

本問は、コンテナイメージの設計方針として、どのデータをイメージ内に含め、どのデータを外部管理すべきかの切り分けとその理由を問う問題です。

正解の根拠として、コンテナイメージは一度作成したら変更を加えない(イミュータブルな)基盤として扱うのが原則です。ソースコードやロードモジュールなどのように、開発期間中に 頻繁に更新される データをイメージ内に含めると、コード修正のたびにイメージの再ビルドが必要になり非効率です。そのため、更新頻度が高いものはバージョン管理システム等で別途管理する設計が求められます。

高得点のポイント

  • ソースコードやロードモジュールが「頻繁に更新される」という動的な性質を持つことに着目できているか。
  • 「〜だから」「〜ため」のように、コンテナイメージに含めない理由として論理的な文脈が成立しているか。
  • 20字以内という文字数制限を厳守できているか。
(2)配点 3点

表1中の d に入れる適切なミドルウェアのバージョンを答えよ。

模範解答

10.1.2

採点基準

正確性(内容)3点
  • 3点: 「10.1.2」と正確に記述されている。
  • 1点: バージョン番号の形式ではあるが、指定されたものと一部異なる。
  • 0点: 指定されたバージョンと全く一致しない、または解答がない。

解説

本問は、開発環境の構築要件に基づき、指定されたミドルウェアのバージョンを正確に読み取って記述する問題です。

コンテナを用いて本番環境と同等の開発環境を再現する場合、ベースとなるミドルウェアのバージョンを正確に一致させることが重要です。問題の表等から該当するミドルウェアのバージョンとして「10.1.2」を正しく抜き出す必要があります。

高得点のポイント

  • 表や問題文の指定から読み取ったバージョン番号「10.1.2」を、誤字脱字なく正確に抜き出しているか。
(3)配点 3点

表1中の e に入れる適切なミドルウェアのバージョンを答えよ。

模範解答

15.3.3

採点基準

正確性(内容)3点
  • 3点: 「15.3.3」と正確に記述されている。
  • 1点: バージョン番号の形式ではあるが、指定されたものと一部異なる。
  • 0点: 指定されたバージョンと全く一致しない、または解答がない。

解説

本問は、前問と同様に、開発環境構築に必要なミドルウェアのバージョンを正確に特定し記述する問題です。

該当する要件定義や表の中から、対象となるミドルウェアのバージョンとして「15.3.3」を漏れなく正確に抜き出しているかが問われます。コンテナ型仮想化では環境の再現性がメリットとなるため、バージョン指定の正確な把握は基礎的な設計能力として不可欠です。

高得点のポイント

  • 表や問題文の指定から読み取ったバージョン番号「15.3.3」を、誤字脱字なく正確に抜き出しているか。

設問3

(1)配点 1点

本文中の下線②について,Webブラウザに入力するURLを解答群の中から選び,記号で答えよ。

模範解答

解説

本問は、開発用PCからコンテナ内で動作するWebアプリケーションにアクセスする際の、正しいURL指定を問う問題です。

正解は イ(https://localhost:10443/) です。

ホストOSのWebブラウザからコンテナにアクセスする場合、アクセス先のホスト名はホストOS自身を指す localhost となります。また、コンテナ側の通信ポート(例: 443)に対して、ホスト側のポート 10443 がポートフォワード設定によってマッピングされているため、アクセス時にはホスト側のポート番号を指定する必要があります。

各選択肢の解説

  • ア: ポート番号が指定されておらず、デフォルトの443番ポートへのアクセスとなってしまうため誤りです。
  • イ(正解): ホスト名に localhost を用い、ホスト側にマッピングされたポート 10443 を正しく指定しています。
  • ウ: 本番環境向けの外部ドメインが指定されており、ローカルの開発環境へのアクセス先として不適切です。
  • エ: ドメインが外部向けとなっており、ローカル上のコンテナを正しく指定できていません。
(2)配点 3点

本文中の f に入れる適切な字句を,パス名/ファイル名の形式で答えよ。

模範解答

/app/FuncX/test/test.txt

採点基準

正確性(内容)3点
  • 3点: 「/app/FuncX/test/test.txt」という正しいパス名/ファイル名の形式で正確に記述されている。
  • 1点: パスの記述形式にはなっているが、一部に誤りがある(例:ディレクトリ階層の抜け、ファイル名の誤りなど)。
  • 0点: 正しいパス名/ファイル名になっていない、または解答がない。

解説

本問は、ホストOSとコンテナ間でのディレクトリの共有(バインドマウント)設定に基づき、コンテナ内での正しいファイルパスを導き出す問題です。

ホストOS上のディレクトリがコンテナ内の特定の基準ディレクトリ(例: /app/ )にマウントされた場合、ホスト側にある対象ファイル FuncX/test/test.txt は、コンテナ内において基準ディレクトリ直下の階層にそのままマッピングされます。したがって、コンテナ内での絶対パスは「/app/FuncX/test/test.txt」となります。

高得点のポイント

  • マウント先の基準パスとホスト側のディレクトリ構造を正しく組み合わせているか。
  • 「パス名/ファイル名の形式で」という問題の指定に従い、先頭のスラッシュから拡張子まで正確に記述できているか。
(3)配点 3点

本文中の下線③について,起動するコンテナイメージ名を表1中の字句を用いて答えよ。

模範解答

img-dev_dec

採点基準

正確性(内容)3点
  • 3点: 「img-dev_dec」と正確に解答している。
  • 1点: コンテナイメージ名としての記述はあるが、一部に誤記が含まれる。
  • 0点: 指定されたイメージ名と一致しない、または解答がない。

解説

本問は、要件定義や環境構成一覧(表1)の中から、利用目的に合致する適切なコンテナイメージ名を選択・抽出する問題です。

レストラン予約サービスにおける「dec」環境向けのコンテナとして、事前に定義されたイメージ名の中から該当するものを探し出す必要があります。表から読み取れる正確なイメージ名である「img-dev_dec」を字句通りに解答することが求められます。

高得点のポイント

  • 表1中に定義されているコンテナイメージ名から「img-dev_dec」を過不足なく抜き出せているか。
  • 「表1中の字句を用いて」という形式指定に従っているか。

Spineチーム