IPA情報処理試験キーワード

IPA|情報処理技術者試験

Docker runの仕組みを完全理解|‐pと‐vの違いを応用情報午後問でマスター

応用情報技術者試験の午後問題、特にプログラミングやシステム基盤に関する設問では、Docker をはじめとするコンテナ技術の知識が問われるケースが増えてきました。多くの受験者が対策の必要性を感じている一方、「コマンドのオプションが多くて覚えられない」「仕組みが直感的に分かりにくい」といった声も少なくありません。

特に、docker run コマンドで頻出する -p オプションと -v オプションは、どちらもホストとコンテナの間で何かを「対応付ける」働きを持つため、役割を混同しやすいポイントです。

本記事では、実際の試験問題である「令和4年秋 午後問4」を題材に、この -p (ポートフォワーディング) と -v (ボリュームマウント) の違いと仕組みを徹底的に解説します。単なる丸暗記ではなく、「なぜこのオプションが必要なのか」を根本から理解することで、本番の応用問題にも自信を持って対応できる知識を身につけていきましょう。

1. Dockerとは?応用情報で問われる理由

まず、Docker とは何か、そしてなぜ近年の応用情報技術者試験で重要視されているのか、その背景から理解を深めましょう。

Docker は、「コンテナ」と呼ばれる OS 上の独立した区画にアプリケーションを格納し、開発・実行するためのプラットフォームです。この「コンテナ技術」は、従来の仮想マシン(VMware や VirtualBox など)とは異なるアプローチで、サーバー内に擬似的な環境を構築します。

両者の最も大きな違いは「ゲストOSの有無」です。以下の表で比較してみましょう。

項目 コンテナ(Docker) 仮想マシン
仮想化の単位 アプリケーション+ライブラリ OS 全体
OS ホスト OS のカーネルを共有 ゲスト OS を持つ
起動速度 高速(秒単位) 低速(分単位)
リソース消費 少ない(軽量) 多い(重量)
イメージサイズ 小さい(MB 単位) 大きい(GB 単位)

表が示す通り、コンテナはホスト OS の核となる部分(カーネル)を共有するため、ゲスト OS を丸ごと起動する仮想マシンよりもはるかに軽量かつ高速に動作します。この手軽さが、現代のスピーディーな開発スタイルと非常に相性が良いのです。

IPA が応用情報技術者試験で Docker を取り上げるのは、この「軽量な環境分離」という特性が、現代のシステム開発において不可欠だからです。少ないリソースで互いに影響しない複数のアプリケーションを効率的に動かせるコンテナ技術は、マイクロサービスや DevOps といったモダンな開発手法を支える根幹技術となっています。

試験では、Docker の専門的な知識というより、その基本的な仕組みと主要なコマンドの理解が求められます。特に問われるのは以下の 3 点です。

  1. 仕組みの理解: Docker イメージからコンテナを生成・起動する一連の流れ。
  2. ネットワーク設定: コンテナ外部から内部のアプリケーションへ通信を通す方法(今回のテーマである -p オプション)。
  3. ファイルシステムの連携: PC 上のファイルをコンテナ内で利用可能にする方法(同じく -v オプション)。

-p-v は、まさに応用情報技術者試験で狙われやすい「コンテナと外部(ホスト)との連携」に関する最重要知識なのです。

2. docker runコマンドの基本構文と役割

docker run は、Docker の操作において最も基本的かつ重要なコマンドです。このコマンド一つで、指定した Docker イメージが存在しない場合はダウンロード(pull)し、そのイメージを基に新しいコンテナを作成(create)し、そして起動(start)までを一括で行います。

まずは、その基本構文を見てみましょう。

docker run [オプション] イメージ名 [コンテナ内で実行するコマンド]

各要素の役割は以下の通りです。

  • [オプション]: コンテナの動作を細かく制御するための設定です。今回メインで解説する -p-v は、このオプションにあたります。他にも、コンテナに名前を付ける --name や、バックグラウンドで実行する -d など、様々な種類があります。
  • イメージ名: コンテナの「設計図」となる Docker イメージを指定します。例えば、nginx と指定すれば、Web サーバーである Nginx がインストールされた環境が構築されます。
  • [コンテナ内で実行するコマンド]: コンテナが起動した直後に実行させたいコマンドを指定します。省略された場合は、Docker イメージにデフォルトで設定されているコマンドが実行されます。

このコマンドによって実行される一連の流れを簡単に整理すると、以下のようになります。

  1. イメージの確認: ローカル(実行中のコンピュータ)に指定された Docker イメージがあるか確認します。
  2. イメージの取得: もしイメージがなければ、Docker Hub などの公式リポジトリから自動的にダウンロードします。
  3. コンテナの作成: ダウンロードしたイメージを基に、新しいコンテナを作成します。この時点で、コンテナはホスト OS とは隔離された独自のファイルシステムを持ちます。
  4. コンテナの起動: 作成したコンテナを起動し、指定されたコマンド(またはデフォルトのコマンド)を実行します。

docker run は、これら一連のプロセスを自動で実行してくれる便利なコマンドです。そして、オプションを指定することで、この隔離されたコンテナ環境と、私たちが普段操作しているホスト PC との間に「橋」を架けることができるのです。次のセクションでは、実際の試験問題で使われたコマンドを例に、その「橋」の役割を具体的に見ていきましょう。

3. 試験に登場した実際のコマンド│令和4年秋 午後問4の分解

ここからは、応用情報技術者試験の「令和4年秋 午後問4」で実際に登場したコマンドを分解し、-p-v がどのような文脈で使われたのかを確認します。

この設問のシナリオは、「開発者の E さんが、自身の PC(ホスト)上で Docker を利用して Web アプリケーションのテスト環境を構築する」というものです。E さんは、テストを効率化するために以下の docker run コマンドを実行しました。

docker run --rm -p 10443:443 -v /app/FuncX:/app app-image

※実際の問題文には他のオプションも含まれていますが、ここでは -p-v の解説に焦点を絞るため、一部を抜粋・簡略化しています。

この一見すると複雑な一行には、コンテナを動かすための重要な指示が詰まっています。特に注目すべきは、以下の2つのオプションです。

  • -p 10443:443: ポート番号に関する指定
  • -v /app/FuncX:/app: ディレクトリ(フォルダ)パスに関する指定

E さんは、PC のブラウザからコンテナ内の Web アプリケーションにアクセスし、かつ、PC 上で編集したソースコードを即座にコンテナ内のテスト環境に反映させたいと考えています。その目的を達成するために、-p-v がそれぞれ「通信の橋渡し」と「ファイルの橋渡し」として機能します。

次のセクションから、この2つの「橋渡し」の仕組みを一つずつ、図解を交えて詳しく解説していきます。

4. -pオプションの意味:ポート番号の橋渡しと応用情報でのポイント

それでは、1つ目のオプション -p 10443:443 の意味を詳しく見ていきましょう。この -p は "publish" または "port" の略で、ホスト PC(操作しているコンピュータ)とコンテナ間の「通信の橋渡し」を設定する役割を担います。

-p オプションの基本構文

-p オプションは、コロン : を使って2つのポート番号を結びつけるシンプルな形式です。

 -p [ホスト側のポート番号]:[コンテナ側のポート番号]

Docker コンテナは、作成されるとホスト PC とは隔離された独自のネットワーク空間を持ちます。そのため、そのままでは外部(私たちの PC のブラウザなど)からコンテナ内で動いているアプリケーションにアクセスできません。そこで、この -p オプションを使い、「ホスト PC の特定のポートに来た通信を、コンテナ内の指定したポートに転送する」というルールを設定します。これを一般的に「ポートフォワーディング」と呼びます。

10443番ポートから443番ポートへの橋渡し

今回の応用情報技術者試験の問題で示された -p 10443:443 は、以下のような対応関係を意味します。

  • 10443(ホスト側): E さんが操作している PC 側のポート番号です。E さんは、Web ブラウザのアドレスバーに https://localhost:10443 のように入力してアクセスします。
  • 443(コンテナ側): コンテナ内で Web アプリケーションが待ち受けているポート番号です。

この通信の流れを図でイメージすると、以下のようになります。

【あなたのPC(ホスト)】                                     【Dockerコンテナ】
      │                                                           │
 [Webブラウザ]                                                 [Webアプリ]
      │                                                             ▲
      ▼                                                             │
アクセス (https://localhost:10443)                                  │
      │                                                             │
 [ポート: 10443]  ======= -pオプションによる橋渡し =======>  [ポート: 443]

つまり、開発者 E さんがブラウザからホスト PC の「10443番の玄関」を訪れると、Docker がその通信をコンテナの「443番の玄関」へと自動的に案内してくれる、というわけです。

なぜポート番号443が使われるのか?

ここで、コンテナ側のポートが 443 になっているのには明確な理由があります。ポート番号 443 は、HTTPS 通信(SSL/TLS で暗号化された Web アクセス)で標準的に使われる「ウェルノウンポート」の一つです。これは、コンテナ内で稼働しているのが一般的な Web サーバーであることを示唆しています。

一方、ホスト側の 10443 は、他のサービスと重複する可能性が低い 1024 番以降の番号から、開発者が任意に選んだものです。443 に関連付けて 10443 のように分かりやすい番号が使われることがよくあります。

このように、-p オプションは、外部の世界と隔離されたコンテナの世界を繋ぐ、重要な「通信の橋」の役割を果たしているのです。

5. -vオプションの意味:ディレクトリの橋渡しとファイル同期の仕組み

次に、2つ目のオプション -v /app/FuncX:/app を解説します。この -v は "volume" の略で、ホスト PC とコンテナ間の「ファイルの橋渡し」、すなわちディレクトリの同期を設定する機能です。

-v オプションの基本構文

-v オプションも -p と同様に、コロン : を使って2つのパスを結びつけます。

 -v [ホスト側のディレクトリパス]:[コンテナ側のディレクトリパス]

この設定を行うことで、ホスト側のディレクトリがコンテナ内の指定したディレクトリに「重ね合わせられる」ような状態になります。これを「バインドマウント」と呼びます。バインドマウントを利用する最大の目的は、開発効率の向上とデータの永続化です。コンテナは破棄すると内部のデータも消えてしまいますが、ホスト側にファイルを保存しておくことで、データを失わずに済みます。

/app/FuncX と /app の同期関係

応用情報技術者試験のコマンド -v /app/FuncX:/app は、以下の対応を意味します。

  • /app/FuncX(ホスト側): E さんがソースコードを保存・編集している PC 上のディレクトリです。
  • /app(コンテナ側): コンテナ内の Web アプリケーションが、ソースコードを読み込むために参照するディレクトリです。

この 2 つのディレクトリが、-v オプションによってリアルタイムに同期されます。

【あなたのPC(ホスト)】                               【Dockerコンテナ】
      │                                                     │
[ディレクトリ: /app/FuncX]  ======== -vオプションによる同期 ========>  [ディレクトリ: /app]
      │                                                     │
  (ファイル編集)                                         (即座に反映)
      │                                                     │
  [.../test.txt] の内容を変更  --------------------->  [.../test.txt] の内容が変わる

例えば、E さんが使い慣れたテキストエディタでホストの /app/FuncX/test.txt というファイルを編集して保存すると、その変更は即座にコンテナ内の /app/test.txt にも反映されます。

ファイル同期がもたらす開発効率の向上

この仕組みにより、開発者はソースコードを少し修正するたびに Docker イメージを再ビルドしたり、コンテナを再作成したりする必要がなくなります。ホスト側でファイルを保存するだけで、その変更が動いているコンテナに即座に伝わるため、非常に高速な開発サイクルを実現できるのです。

応用情報技術者試験のシナリオにおいても、E さんはこの機能を活用して、PC 上でのコーディング結果をすぐにコンテナ上のテスト環境で確認している、というわけです。-v は、モダンな開発現場ではなくてはならない重要なオプションと言えるでしょう。

6. 図で理解する-pと-vの対応関係│通信とファイルの2つの橋

これまで個別に見てきた -p オプションと -v オプションの役割を、ここで一つの図にまとめて整理しましょう。どちらも「隔離されたコンテナ」と「外の世界であるホストPC」を繋ぐための設定ですが、その対象が異なります。

-p通信(ポート)を、-vファイル(ディレクトリ)をそれぞれ対応付けます。

-p と -v の全体像

開発者Eさんの環境全体を図で表すと、以下のようになります。2つの異なる「橋」が架かっている様子をイメージしてください。

   +---------------------------------+      +--------------------------------+
   |       あなたのPC (ホスト)       |      |         Dockerコンテナ         |
   |                                 |      |                                |
   |  +-----------+                  |      |  +-------------------------+   |
   |  | Webブラウザ |                  |      |  |   Webアプリケーション     |   |
   |  +-----------+                  |      |  |   (ポート443で待機)     |   |
   |       |                         |      |  +-------------------------+   |
   |       | https://...:10443       |      |               ^              |
   |       v                         |      |               |              |
   |  [ポート:10443] <----(-p)-----> [ポート:443]           |
   |   (通信の橋)                    |      |         (通信の橋)           |
   |---------------------------------|      |--------------------------------|
   |                                 |      |                                |
   |  +------------------------+     |      |  +------------------------+    |
   |  | ディレクトリ:/app/FuncX  |     |      |  |   ディレクトリ:/app      |    |
   |  | (ソースコードを編集)   |     |      |  |   (ソースコードを読む)   |    |
   |  +------------------------+     |      |  +------------------------+    |
   |               ^                 |      |               ^                |
   |               |                 |      |               |                |
   |               +-----(-v)--------+      |               +                |
   |                 (ファイルの橋)           |                                |
   +---------------------------------+      +--------------------------------+

この図が示すように、-p-v はそれぞれ異なる役割の「橋」として機能しています。

  • 通信の橋 (-p): 開発者がブラウザから送ったリクエスト(通信)を、ホストの 10443 番ポートからコンテナの 443 番ポートへ渡します。これにより、隔離されたコンテナ内のアプリケーションを操作できます。
  • ファイルの橋 (-v): 開発者が PC 上で編集したソースコード(ファイル)を、ホストの /app/FuncX ディレクトリからコンテナの /app ディレクトリへリアルタイムに同期させます。これにより、開発効率が大幅に向上します。

「橋渡し」という共通概念で整理する

-p-v は対象こそ違えど、「ホストとコンテナを繋ぐ」という目的は共通しています。応用情報技術者試験で問われるのは、まさにこの対応関係の正確な理解です。

  • -pPort(港)の橋
  • -vVolume(ボリューム、保管場所)の橋

このように、それぞれの頭文字と役割を関連付けて覚えておくと、どちらが通信でどちらがファイルかを混同しにくくなります。どちらのオプションも [ホスト側]:[コンテナ側] という書式であることも、合わせて押さえておきましょう。

7. 応用情報で役立つ!その他のdocker runオプション一覧

-p-v 以外にも、docker run でよく使われる便利なオプションがいくつかあります。応用情報技術者試験の文脈でも登場する可能性があるため、代表的なものを覚えておくと役立ちます。

以下の表に、開発や検証で頻繁に利用されるオプションとその役割をまとめました。

オプション 省略形 意味と主な用途
--detach -d バックグラウンド実行。コンテナを起動後、ターミナルの操作権をすぐに返す。Webサーバーなど常時起動するコンテナで必須。
--name コンテナに名前を付ける--name my-containerのように指定。Dockerが自動生成するランダムな名前ではなく、管理しやすい名前を付けられる。
--env -e 環境変数を設定-e DB_PASSWORD=passのように指定。パスワードや設定値など、イメージに直接書き込みたくない情報を渡す際に使用。
--rm コンテナ停止時に自動削除。テストや一時的なコマンド実行で利用したコンテナが不要なゴミとして残るのを防ぐ。
--interactive
--tty
-i
-t
対話的な操作を有効にする。2つ合わせて -it とすることが多い。コンテナのシェルに接続してコマンドを直接実行したい場合などに使用。

これらのオプションを組み合わせることで、より実践的なコンテナの起動が可能になります。例えば、Nginx(Webサーバー)のコンテナを、名前を付けてバックグラウンドで起動し、ポートフォワーディングを設定しつつ、終了時には自動削除する、といったコマンドは以下のようになります。

docker run -d --name my-web -p 8080:80 --rm nginx

この一行で、非常に多機能なコンテナ起動が実現できます。各オプションがどのような役割を担っているかを理解しておくことが、応用情報技術者試験の読解問題でも強みとなるでしょう。

8. 応用情報 午後試験の攻略!-pと-vで狙われるポイントまとめ

これまで学んできた知識を基に、応用情報技術者試験の午後問題で特に狙われやすいポイントを3つに絞って総復習します。ここを押さえておけば、Docker 関連の問題で確実に得点力を高めることができます。

ポイント1:ホスト側とコンテナ側の対応を絶対に間違えない

-p-v の最も基本的かつ最重要のルールは、コロン : の左右が何を意味するかです。

[ホスト側]:[コンテナ側]

  • 左側がホスト(操作しているPC)右側がコンテナです。

試験では、この左右を逆にした選択肢が引っかけとして用意される可能性が非常に高いです。「外の世界(ホスト)から、隔離された中(コンテナ)へ橋を架ける」というイメージで覚えておきましょう。

ポイント2:-pは「通信」、-vは「ファイル」の混同対策

どちらのオプションも [ホスト]:[コンテナ] という同じ書式のため、役割を混同しないよう注意が必要です。以下の覚え方で頭に定着させましょう。

  • p = Port: ポート番号を指定し、通信の橋渡しを行う。
  • v = Volume: ディレクトリパスを指定し、ファイルの橋渡し(同期)を行う。

この区別がつけば、問題文がネットワーク設定について聞いているのか、ファイルアクセスについて聞いているのかを正しく判断できます。

ポイント3:【実践】令和4年秋 問4 設問3(2)の答えの導き方

最後に、実際の試験問題を解く思考プロセスを確認します。問題では、「ホストPCの /app/FuncX/test/test.txt というファイルに、コンテナ内からアクセスする場合、どのような絶対パスになるか」が問われました。

この答えは、-v オプションの設定から論理的に導き出せます。

  1. マウント設定の確認: コマンドは -v /app/FuncX:/app となっています。これは、「ホストの /app/FuncX ディレクトリを、コンテナの /app ディレクトリとして見せる」という設定です。
  2. パスの置き換え: この設定により、コンテナの中から見ると、ホストの /app/FuncX というパスの根元部分が、丸ごと /app に置き換わっているように見えます。
  3. 答えの導出: したがって、ホスト側のパス /app/FuncX/test/test.txt の先頭部分 /app/FuncX/app に置き換えるだけです。
    • ホスト側パス:/app/FuncX/test/test.txt
    • コンテナ側パス:/app/test/test.txt

    これにより、コンテナ内からアクセスする際の絶対パスは /app/test/test.txt となります。

このように、パスの対応関係を正確に読み解くことが、応用情報技術者試験における Docker 問題攻略の鍵となります。

9. まとめ:-pは通信ポートの橋、-vは共有ボリュームの橋

本記事では、応用情報技術者試験の過去問を題材に、docker run コマンドにおける最重要オプション -p-v の違いと役割を解説しました。

最後に、試験本番で絶対に混同しないための、究極の1行まとめを記します。

-pはPort(通信の橋)、-vはVolume(ファイルの橋)

この2つの「橋」が、隔離されたコンテナの世界と、私たちが操作するホストPCの世界を繋いでいることを理解できれば、Docker 関連の問題はもう怖くありません。それぞれのオプションが [ホスト側]:[コンテナ側] という書式であることも忘れずに、午後試験の得点源にしていきましょう。

-IPA|情報処理技術者試験
-