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

【Docker入門】nginxコンテナの構築

 ここまでで、Docker ComposeのコマンドやDocker Desktopでの操作でDocker Compose について、ある程度、理解できたところで、ここまでの復習を兼ねて、Docker Composeコマンドを使って、nginxコンテナを構築してみましょう。

nginxとは、Apache と並び、非常に人気のあるウェブサーバーアプリケーションです。

nginxイメージの確認

 ここでは、nginxイメージを利用してコンテナを構築します。使用するイメージが決まったら、まず、nginxのイメージを下調べしておきます。Docker Hubのホームページにnginxイメージの詳しい情報があります。どのようなタグが使えるのか、「How to use this image」(このイメージをどのように使うのか)などの使い方の例を参考にしてyamlファイルの定義を考えます。

下記のyamlのは、Docker Hubのページにあるyamlの定義の例です。

web:
  image: nginx
  volumes:
   - ./templates:/etc/nginx/templates
  ports:
   - "8080:80"
  environment:
   - NGINX_HOST=foobar.com
   - NGINX_PORT=80

今回は、複雑なオプションの指定はしないで、単純に nginxの最新イメージである「latest」を使用してコンテナを構築していきます。

Docker Hubのホームページは、以下のリンク先にあります。

Docker HubのURL:https://hub.docker.com/_/nginx

不要なDockerオブジェクトの削除

ここで、これまで作成してきたDockerオブジェクトをすべて削除しておきます。

以下のコマンドを実行します。

・「docker system prune -a」コマンドを実行します。

Are you sure you want to continue? [y/N] の質問には「y」と入力します。

PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
a19a6d03a1903d90fcde2543536ef8f53aae56d8554a0ff3f616332b5d5e63ae
c8da5f01f9795af490e47d7988e23b3c00a95570ddfa7391880cd9775c46b204
097182d1612c69cbed99966eaa44c9d0f5bb67cf88faadc3f2424d77fd0b29e6
3f9b9781dfbfcea62d315b42c7581bc22fab758a6b30fc99e74b1141a4d6b4c0

Deleted Networks:
my-network

Deleted Images:
untagged: busybox:latest
untagged: busybox@sha256:650fd573e056b679a5110a70aabeb01e26b76e545ec4b9c70a9523f2dfaf18c6
deleted: sha256:ba5dc23f65d4cc4a4535bce55cf9e63b068eb02946e3422d3587e8ce803b6aab
deleted: sha256:95c4a60383f7b6eb6f7b8e153a07cd6e896de0476763bef39d0f6cf3400624bd
untagged: nginx:latest
untagged: nginx@sha256:6db391d1c0cfb30588ba0bf72ea999404f2764febf0f1f196acd5867ac7efa7e
deleted: sha256:92b11f67642b62bbb98e7e49169c346b30e20cd3c1c034d31087e46924b9312e
deleted: sha256:d9e826dbb4b3c5770fe92638baa8c6614f210d782a5d021a123fe9fa1f92c23d
deleted: sha256:2a75285e888884bed4d630896c86ecd71739c6e82669e21ad7a050f33c9ac48d
deleted: sha256:32bfe3f040358ab8f9872a63d4ddefdc68f35d991ca10a812cbac5912ae9f97b
deleted: sha256:1330486eb62ea7e96f384961b77b0fc85f5d4422e761114ef3a72e7cb89751a4
deleted: sha256:a375372209a0f2b2c697a52cce46bc41b495bf86184ae83dd5146e20c22078eb
deleted: sha256:450787ca55caa59d0288de9cf36fc6b77d1b208a77eb837ec3d25b385f99cafb
deleted: sha256:a483da8ab3e941547542718cacd3258c6c705a63e94183c837c9bc44eb608999

Total reclaimed space: 191MB
PS C:\Users\joeac> docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
5c2516a7939b   bridge       bridge    local
9cb62d828092   host         host      local
b7dc436c5f13   my-network   bridge    local
1bafb53e8f6c   none         null      local
PS C:\Users\joeac> docker network rm my-network

・「docker system prune -a」コマンドで削除されないDockerオブジェクトは個別に削除します。

Docker Composeファイルの作成

ディレクトリの作成と移動

Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。

 デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。

・「cd desktop/docker」コマンドを実行します。

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>

 「compose.yaml」ファイルを保存する「nginx」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir nginx」コマンド
  • 「cd nginx」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir nginx

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/06     2:47                nginx

PS C:\Users\joeac\Desktop\docker> cd nginx
PS C:\Users\joeac\Desktop\docker\nginx>

VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\nginx> code compose.yaml

VSCodeが起動します。

「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

services:
  nginxweb:
    image: nginx:latest
    ports:
      - "80:80"

 キーの後の「:」や「ー」の後に半角スペース「凵」が必要なので注意してください。「nginx:latest」のようにイメージのタグを指定する場合は、逆に半角スペース「凵」を入れるとエラーになります。

階層構造には癖があるので、Docker Hubのサンプルの記述などを参考にするとよいです。

services:
凵凵nginxweb:
凵凵凵凵image:凵nginx:latest
凵凵凵凵ports:
凵凵凵凵凵凵-凵"80:80"

下表は「compose.yaml」の定義の内容です。

項目説明
サービス名nginxweb
イメージnginx:latest
ポートホストマシンのポート80をコンテナのポート80にマッピング
「compose.yaml」の定義の内容

 この定義では、Docker Composeを使用してnginxwebという名前のサービスを定義しています。このサービスは、Docker Hubから最新のnginxイメージ(nginx:latest)を使用して起動されます。また、ホストマシンのポート80をコンテナのポート80にマッピングし、外部からのHTTPトラフィックを受け付けることができるようになります。

コンテナの作成と実行

・「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

PS C:\Users\joeac\Desktop\docker\nginx> docker compose up -d
[+] Running 8/8
 ✔ nginxweb 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                              7.0s
   ✔ 8a1e25ce7c4f Pull complete                                                                                    1.5s
   ✔ e78b137be355 Pull complete                                                                                    1.8s
   ✔ 39fc875bd2b2 Pull complete                                                                                    0.7s
   ✔ 035788421403 Pull complete                                                                                    1.4s
   ✔ 87c3fb37cbf2 Pull complete                                                                                    2.1s
   ✔ c5cdd1ce752d Pull complete                                                                                    2.2s
   ✔ 33952c599532 Pull complete                                                                                    2.4s
[+] Building 0.0s (0/0)                                                                                  docker:default
[+] Running 2/2
 ✔ Network nginx_default       Created                                                                             0.0s
 ✔ Container nginx-nginxweb-1  Started                                                                             0.2s

 「Container nginx-nginxweb-1 Started」というログが、表示されたら、コンテナが作成されて実行されています。

Webブラウザで確認

・Webブラウザを起動して、URLに「localhost」と入力します。

nginxの初期ホームページが表示されます。

コンテナの停止

・「docker compose stop」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\nginx> docker compose stop
[+] Stopping 1/1
 ✔ Container nginx-nginxweb-1  Stopped                                                                             0.4s