このページで解説している内容は、以下の 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にマッピング |
この定義では、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