情報処理試験を勉強していると、「コンテナって仮想マシンと何が違うの?Dockerとコンテナは同じもの?」と混乱しがちです。
対象試験と出題頻度
コンテナ(Docker等)は、基本情報技術者・応用情報技術者で出題されるテーマです。
仮想化技術の分類問題として定番化しており、「ハイパーバイザ型」「ホストOS型」との違いを正確に区別できるかが問われます。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
コンテナの定義
コンテナ(Container)とは、一言で言うと
「ホストOS上にアプリケーションごとの隔離された実行環境を作り、ゲストOSなしで動かす軽量な仮想化技術」
のことです。
イメージとしては、「仕切り付きの弁当箱」です。
弁当箱の本体(ホストOS)は1つだけ。その中に仕切り(コンテナ)を入れて、ご飯・おかず・サラダをそれぞれ独立した区画に詰めます。区画ごとに別の弁当箱(ゲストOS)を用意する必要はありません。
一方、仮想マシン(VM)は「弁当箱を丸ごと複数持つ」方式です。箱ごとにフタも容器もあるので重くなります。コンテナは仕切り1枚で済むから軽い。この違いが核心です。
📊 コンテナの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Container |
| 分類 | 仮想化技術(コンテナ型) |
| 代表的なツール | Docker(構築・実行・管理プラットフォーム) |
| ゲストOS | 不要(ホストOSのカーネルを共有) |
| 対比技術 | ハイパーバイザ型(Xen, KVM等)、ホストOS型(QEMU等) |
解説
なぜコンテナが生まれたのか
従来の仮想化(ハイパーバイザ型・ホストOS型)は、1台の物理サーバ上に複数の仮想マシンを立てる技術として広く使われてきました。
しかし、仮想マシンはゲストOSごとフルに動かすため、起動に数分かかり、メモリやCPUの消費も大きいという課題がありました。
「アプリだけを隔離して動かせればゲストOSは要らないのでは?」という発想から生まれたのがコンテナ型仮想化です。Linuxカーネルのnamespace機能とcgroup機能を組み合わせ、プロセスレベルで隔離空間を作ることで実現しています。
3つの仮想化アーキテクチャの比較
コンテナ型を正しく位置づけるには、他の2方式と構造上の違いを整理するのが近道です。
| 方式 | ゲストOS | 起動速度 | リソース消費 | 異種OS |
|---|---|---|---|---|
| ハイパーバイザ型 | 必要 | 分単位 | 大 | 可 |
| ホストOS型 | 必要 | 分単位 | 大 | 可 |
| コンテナ型 | 不要 | 秒単位 | 小 | 不可 |
ここだけは確実に押さえてください。コンテナ型は「ゲストOSを持たない」「ホストOSのカーネルを共有する」。
この2点が他の方式と決定的に異なるポイントです。裏を返すと、ホストOSと異なるOSのアプリケーションは動かせないという制約があります。
図解:3方式の構造比較
ハイパーバイザ型
ホストOS型
コンテナ型
▲ コンテナ型だけゲストOSの層がない。ホストOSのカーネルを各コンテナが共有する
Dockerの基本構成
Dockerは、コンテナの構築・実行・管理を一括で行えるOSS(オープンソースソフトウェア)です。
試験で「コンテナ型仮想化のプラットフォームを提供するOSSはどれか」と問われたら、答えはDockerです。
Dockerの世界では「イメージ」と「コンテナ」という2つの概念が登場します。
イメージはアプリの実行に必要なファイル一式をまとめた読み取り専用のテンプレート、コンテナはそのイメージから生成された実行中のインスタンスです。
🐳 Dockerの主要概念
| 概念 | 説明 |
|---|---|
| Dockerイメージ | アプリ+ライブラリ+設定をまとめた読み取り専用テンプレート。Dockerfileから作成する |
| コンテナ | イメージから生成された実行中のプロセス。起動・停止・削除が秒単位で行える |
| Dockerfile | イメージのビルド手順を記述したテキストファイル。ベースイメージの指定やコマンド実行を定義する |
| Docker Hub | イメージを共有・配布するクラウドレジストリ。公式イメージをダウンロードして利用できる |
Dockerの基本コマンド(参考)
何となくで覚えたい人向け:Dockerコマンド例を確認する
試験で直接問われることは少ないですが、イメージとコンテナの関係を理解するうえで役立ちます。
# Docker Hubからイメージを取得
docker pull nginx
# イメージからコンテナを起動(ポート80を公開)
docker run -d -p 80:80 nginx
# 実行中のコンテナ一覧を表示
docker ps
# コンテナを停止
docker stop <コンテナID>
# 停止したコンテナを削除
docker rm <コンテナID>
※ docker pull でイメージ取得 → docker run でコンテナ生成・起動、という流れが基本です。
では、このテーマが試験でどのように出題されるか見ていきましょう。
💡 コンテナの核心を3行で
・ホストOSのカーネルを共有し、ゲストOSなしでアプリの隔離実行環境を作る軽量な仮想化技術
・ハイパーバイザ型・ホストOS型と異なり、起動が速くリソース消費が小さいが、異種OSは動かせない
・代表的なOSSはDockerで、「イメージ → コンテナ」の流れでアプリを実行する
試験ではこう出る!
コンテナ関連の問題は、応用情報技術者の午前・午後の両方で繰り返し出題されています。基本情報でも科目Aで登場する可能性があるテーマです。
出題パターンは大きく2つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| AP R5春 午前 問20 |
コンテナ型仮想化のプラットフォームを提供するOSSを選ぶ問題 | ・正解はDocker ・KVM、QEMU、Xenはハイパーバイザ型またはホストOS型 |
| AP R4秋 午前 問12 |
コンテナ型仮想化の説明として適切なものを選ぶ問題 | ・「ゲストOSをもたない」が正解の決め手 ・ハイパーバイザ型・ホストOS型の説明がひっかけ |
| AP R3秋 午前 問14 |
R4秋 問12とほぼ同一構成の問題(コンテナ型の説明を選ぶ) | ・「ライブラリ等をまとめてホストOSで動作」が正解 ・VDIの説明がひっかけとして登場 |
| AP R4秋 午後 問4 |
レストラン予約サービスを題材にコンテナ型仮想化技術を問う記述問題 | ・Dockerfileやコンテナの構成を読み解く実践的な出題 ・午後問題でも出るテーマである点に注意 |
📝 IPA試験での出題パターン
パターン1:「コンテナ型仮想化の説明を選べ」
4つの仮想化方式の説明文が並び、コンテナ型に該当するものを選ぶ形式。ひっかけとして「ゲストOSを稼働させる」(ハイパーバイザ型・ホストOS型)や「画面情報をクライアントに送信する」(VDI)が紛れ込む。キーワードは「ゲストOSをもたない」「ホストOSのカーネルを共有」。
パターン2:「コンテナ関連のOSSを選べ」
Docker・KVM・QEMU・Xenなどの名前が並び、コンテナ型に該当するOSSを選ぶ形式。KVMとXenはハイパーバイザ型、QEMUはエミュレータ型(ホストOS型)として除外する。
試験ではここまででOKです。DockerfileやDocker Composeの書き方まで問われることは午前問題ではないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. コンテナ型仮想化の説明として、最も適切なものはどれでしょうか?
- A. 物理サーバにホストOSをもたず、ハイパーバイザ上で個別のゲストOSをもった仮想サーバを動作させる方式。
- B. ホストOS上でアプリケーションの実行に必要なプログラムやライブラリをまとめた隔離環境を作り、ゲストOSなしで複数のアプリケーションを独立して稼働させる方式。
- C. ホストOSにインストールした仮想化ソフトウェア上で、個別のゲストOSをもった仮想サーバを動作させる方式。
正解と解説を見る
正解:B
解説:
コンテナ型仮想化は、ホストOSのカーネルを共有しながら、アプリごとに隔離された実行環境(コンテナ)を提供する方式です。ゲストOSを起動しないため、起動が速くリソース消費が小さいのが特徴です。
選択肢Aはハイパーバイザ型の説明です。ハイパーバイザ型はホストOSを持たず、ハードウェア上で直接ハイパーバイザが動作し、その上に個別のゲストOSを立ち上げます。選択肢Cはホスト型仮想化の説明です。ホスト型はホストOS上に仮想化ソフトウェアをインストールし、その上でゲストOSを動かす方式であり、コンテナ型とは構造が異なります。
よくある質問(FAQ)
Q. DockerとKubernetesは何が違いますか?
Dockerは個々のコンテナを構築・実行するためのツールです。一方、Kubernetes(K8s)は大量のコンテナをクラスタ上で管理・スケーリング・自動復旧するためのオーケストレーションツールです。Dockerで作ったコンテナを本番環境で大規模に運用する際にKubernetesが使われる、という関係です。IPA試験ではKubernetesの名前が選択肢に登場することがありますが、現時点で深く問われることはありません。
Q. コンテナではWindowsアプリをLinux上で動かせますか?
動かせません。コンテナはホストOSのカーネルを共有する仕組みのため、LinuxホストではLinux用アプリ、WindowsホストではWindows用アプリしか動きません。異なるOSのアプリケーションを動かしたい場合は、ゲストOSを持つハイパーバイザ型仮想化を使う必要があります。この「異種OSは不可」という制約は、試験のひっかけ選択肢にも関係するポイントです。
Q. 実務でコンテナが使われる代表的な場面は何ですか?
開発環境の統一とCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインでの利用が代表的です。開発者全員が同じDockerイメージを使えば「自分の環境では動くのに本番で動かない」という問題が起きません。また、マイクロサービスアーキテクチャでサービスごとに個別のコンテナを立て、独立してデプロイ・スケーリングする運用も一般的です。
Q. 「Dockerイメージ」と「スナップショット」は同じものですか?
異なります。Dockerイメージはアプリの実行に必要なファイル・設定を層(レイヤー)構造でまとめたテンプレートで、Dockerfileから再現可能に構築します。一方、スナップショットは仮想マシンやストレージのある時点の状態を丸ごとコピーしたもので、レイヤー構造やビルドの再現性という概念はありません。