このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker基礎】コンテナとの通信

コンテナとの通信

 ここでは、Dockerコンテナとホストマシンとの通信方法について学びます。具体的には、Apache(httpd)コンテナを使用し、ホストのポート8000をコンテナのポート80にマッピングすることで、ブラウザからWebサーバにアクセスする方法を解説します。「コンテナを作成・起動・確認・停止・削除してみる」ではポート8080を使用しましたが、今回は異なるポート番号を使用して通信を行います。以下の手順に従って、コンテナとの通信設定を実践的に理解しましょう。

Apache とは

 Apache(正式名称:Apache HTTP Server)は、Webサーバ機能を提供するオープンソースのソフトウェアです。多くのWebサイトがApache上で動作しており、静的および動的なコンテンツの提供に広く利用されています。Apacheが動作しているサーバにファイルを配置することで、インターネット上からアクセス可能なWebサイトとして公開することができます。

 今回は異なるポート番号を使用して、ブラウザからアクセスしてWebサイトとして機能することを確認します。

コンテナとの通信設定

 コンテナ外からWebサーバにアクセスできるようにするためには、ホストマシンとコンテナ間でポートを適切にマッピングする必要があります。これにより、ホストの特定のポート番号を通じてコンテナ内のサービスにアクセスできるようになります。

ポートのマッピング

ポートマッピングは、-pオプションを使用して設定します。基本的な記述形式は以下の通りです。

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

 例えば、-p 8000:80と指定すると、ホストのポート8000がコンテナのポート80にマッピングされます。これにより、ホストのポート8000にアクセスすると、コンテナ内のApacheサーバにリクエストが転送されます。

ポート設定の記述例

オプション説明
-p 8000:80ホストのポート8000をコンテナのポート80にマッピングする

コンテナとの通信設定の実践

以下の手順に従って、ポート8000を使用してApacheコンテナと通信を行います。

Step1:「run」コマンドを実行する

 まず、Apacheの公式イメージ(httpd)を使用して「Apache」という名前のコンテナを作成・起動します。今回は既にhttpdイメージがダウンロードされているため、コンテナの作成は迅速に行われます。

なぜコンテナがすぐに作成されるのか

 前回の手順では初回実行時にイメージをダウンロードする必要がありましたが、今回は既にhttpdイメージがローカルに存在するため、ダウンロードのステップをスキップして即座にコンテナを作成・起動できます。

コマンドの実行

PowerShellまたはターミナルに以下のコマンドを入力します。

docker run --name Apache -d -p 8000:80 httpd

コマンドの解説

  • docker run: 新しいコンテナを作成して起動します。
  • --name Apache: コンテナに「Apache」という名前を付けます。
  • -d: コンテナをバックグラウンド(デタッチドモード)で実行します。
  • -p 8000:80: ホストのポート8000をコンテナのポート80にマッピングします。
  • httpd: 使用するイメージ名(Apacheの公式イメージ)。

実行結果

PS C:\Users\joeac> docker run --name Apache -d -p 8000:80 httpd
e0fa6a5420325d6d3a3c1745e4b8cb43887f5385bcc97f310bd9bf28fca01e54

注意点

  • コンテナID(例: e0fa6a542032...)は環境によって異なります。
  • 初回実行時にイメージがローカルに存在しない場合、イメージのダウンロードが開始されますが、今回は既に存在するため即座にコンテナが起動します。

Step2:「ps」コマンドでコンテナの稼働を確認する

作成・起動したコンテナが正しく稼働しているか確認します。

コマンドの実行

docker ps

実行結果

PS C:\Users\joeac> docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                  NAMES
e0fa6a542032   httpd     "httpd-foreground"   17 seconds ago   Up 16 seconds   0.0.0.0:8000->80/tcp   Apache

確認ポイント

  • NAMES列に「Apache」と表示されている。
  • STATUSが「Up」であること。
  • PORTS0.0.0.0:8000->80/tcpと表示され、ホストのポート8000がコンテナのポート80にマッピングされている。

Step3:ブラウザでApacheコンテナが動作していることを確認する

ブラウザを開き、以下のURLにアクセスします。

http://localhost:8000/

注意点

  • プロトコルはhttpを使用します(httpsではありません)。
  • 正常に動作していれば、Apacheのデフォルトページが表示されます。

図:ブラウザでの確認

Step4:「stop」コマンドでコンテナを停止する

コンテナの動作を停止します。

コマンドの実行

docker stop Apache

実行結果

PS C:\Users\joeac> docker stop Apache
Apache

解説

  • コンテナ名「Apache」が停止されたことを示します。

Step5:「rm」コマンドで「Apache」コンテナを削除する

不要になったコンテナを削除します。

コマンドの実行

docker rm Apache

実行結果

PS C:\Users\joeac> docker rm Apache
Apache

解説

  • コンテナ名「Apache」が削除されたことを示します。

まとめ

 ここでは、Dockerコンテナとホストマシンとの通信設定について学びました。以下のポイントを押さえておきましょう。

  • ポートマッピングの重要性: -pオプションを使用して、ホストのポートとコンテナのポートを適切にマッピングすることで、ホストからコンテナ内のサービスにアクセスできます。
  • コマンドの理解: docker runコマンドにおける各オプション(--name-d-p)の役割を理解し、適切に使用することが重要です。
  • コンテナの確認: docker psおよびdocker ps -aコマンドを活用して、コンテナの稼働状況や存在を確認します。
  • コンテナの停止と削除: docker stopおよびdocker rmコマンドを使用して、不要になったコンテナを安全に停止・削除します。

 初めてDockerを操作する方は、ポートマッピングの設定やコンテナの管理に慣れるため、これらの手順を何度か繰り返して実践してみてください。また、カーソルキーの「↑」や「↓」を使って過去のコマンドを呼び出し、再実行する方法も習得すると、効率的に作業を進めることができます。