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

Docker超入門:nginxコンテナを例に学ぶ!デタッチモードでの起動と動作確認

nginxコンテナを例に学ぶ!デタッチモードでの起動と動作確認

 Dockerを学ぶとき、よく例に使われるのが nginxコンテナ です。Webサーバーとして有名で軽量、しかもすぐに動作を確認できるので、Docker学習の題材にピッタリです。ここでは、nginxイメージを使って デタッチモード(-dオプション) の特徴を実際の流れに沿って解説していきます。

コンテナのライフサイクルをざっくり理解

コンテナの流れは大きく分けて次のように進みます。

① イメージのダウンロード(pull)
   ↓
② コンテナの作成
   ↓
③ コンテナの実行
   ↓
④ コンテナの停止
   ↓
⑤ コンテナの削除

ここでは特に ③コンテナの実行 の中で「デタッチモード」について詳しく解説します。

① nginxイメージをダウンロード

まずはnginxイメージを取得します。

docker pull nginx

タグを指定しないと latest が自動的に選ばれ、最新版がダウンロードされます。

出力例

PS C:\Users\joeac> docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f1c4d397f477: Pull complete
cb497a329a81: Pull complete
d107e437f729: Pull complete
6c50e4e0c439: Pull complete
899c83fc198b: Pull complete
a785b80f5a67: Pull complete
f72106e86507: Pull complete
Digest: sha256:d5f28ef21aabddd098f3dbc21fe5b7a7d7a184720bc07da0b6c9b9820e97f25e
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
コマンド説明
docker pull イメージ名[:タグ]Docker Hubなどのレジストリからイメージを取得

ダウンロード後は以下で確認できます。

docker image ls

出力例

PS C:\Users\joeac> docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    d5f28ef21aab   5 weeks ago   279MB

②③ コンテナを実行(フォアグラウンドの場合)

次のコマンドでコンテナを起動します。

docker container run --name webserver1 -p 8080:80 nginx
部分説明
docker container run新しいコンテナを作成・実行
--name webserver1コンテナに名前を付与
-p 8080:80ホスト8080番ポートをコンテナ80番ポートにマッピング
nginx使用するイメージ

 この状態だと フォアグラウンド実行 になります。PowerShellがログを流し続け、他のコマンドが打てなくなります。

出力例

PS C:\Users\joeac> docker container run --name webserver1 -p 8080:80 nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration

(省略)

2025/09/21 14:26:44 [notice] 1#1: start worker process 48

-pオプションの意味

-p ホスト:コンテナ
意味
-p 8080:80ホストの8080番にアクセスすると、コンテナの80番へ転送される。

動作確認

これでブラウザから http://localhost:8080 を開くと Welcome to nginx! が表示されます。

下図の画面が表示されたら成功です。

PowerShellのプロンプトを確認します。

HTTPの通信状況が出力されています。

(省略)

172.17.0.1 - - [21/Sep/2025:14:31:50 +0000] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0" "-"
2025/09/21 14:31:50 [error] 30#30: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080", referrer: "http://localhost:8080/"
172.17.0.1 - - [21/Sep/2025:14:31:50 +0000] "GET /favicon.ico HTTP/1.1" 404 153 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0" "-"

「Ctrl」+「c」:④コンテナの停止

「Ctrl」+「c」キーを入力するとコンテナを停止させることができます。

 「Ctrl」+「c」キーを入力します。すると、コンテナが停止して、PowerShell に、以下のように出力されます。

(省略)

2025/09/21 14:32:32 [notice] 1#1: signal 17 (SIGCHLD) received from 37
2025/09/21 14:32:32 [notice] 1#1: signal 17 (SIGCHLD) received from 29
2025/09/21 14:32:32 [notice] 1#1: worker process 29 exited with code 0
2025/09/21 14:32:32 [notice] 1#1: exit

・Webブラウザをリーロードします。

 コンテナが停止しているため、Webserver1に接続できず、下図のように「Welcome to nginx!」と表示されなくなります。

デタッチモードとは?

 フォアグラウンドだとターミナルが占有されてしまいます。そこで -dオプション をつけると、コンテナがバックグラウンドで動作します。

docker container run --name webserver2 -d -p 8080:80 nginx

出力例

PS C:\Users\joeac> docker container run --name webserver2 -d -p 8080:80 nginx
50ec20183ac7472a203b76b439a92ec1d3329524ebfbb47265d756efb54db4ef

 このようにコンテナIDが返り、PowerShellのプロンプトがすぐに戻ってきます。これが デタッチモード です。

オプション説明
-dデタッチモード(バックグラウンド実行)

デタッチモードで起動しても、ブラウザからアクセスすれば同様にWebページが表示されます。

コンテナとイメージの確認

起動中や停止中のコンテナ、イメージの状態は以下で確認できます。

・コンテナ一覧(停止中含む)

docker container ls -a

出力例

出力内容から、webserver1が停止しており、webserver2が起動していることが分かります。

・イメージ一覧

docker image ls

出力例

PS C:\Users\joeac> docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    d5f28ef21aab   5 weeks ago   279MB

 ポイントは、複数のコンテナが1つのイメージを共有できる ことです。nginxイメージは1つですが、webserver1とwebserver2の2つのコンテナがそのイメージから作られています。

④ コンテナの停止

デタッチモードで動いているコンテナは次のコマンドで停止できます。

docker stop webserver2

出力例

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

 再度 docker container ls -a を実行すると、STATUSが Exited になり、停止していることが確認できます。

まとめ

  • nginxイメージを docker pull で取得
  • フォアグラウンド実行ではターミナルが占有される。
  • -d オプションをつけるとデタッチモードでバックグラウンド実行できる。
  • docker container ls -a で状態を確認可能
  • docker stop でコンテナを安全に停止

 nginxを例に、デタッチモードでの便利さを体感できました。実際のサービス開発や運用では、このモードで複数のコンテナを並行して動かすのが基本になります。