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

【Docker入門】Docker Composeの特徴

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:
3902ade9704a1dab0e169be91640aa24dc2cec3626f300ef1bc4b36437ace736

Deleted Networks:
apache_default

Deleted Images:
untagged: httpd:2.4
untagged: httpd@sha256:374766f5bc5977c9b72fdb8ae3ed05b7fc89060e7edc88fcbf142d6988e58eeb
deleted: sha256:ac45b24b92cc0527c6af660679d0701f680a6d4214cf5cf9a147f20127d9685e
deleted: sha256:f05921eb27f3a6477b22284fcb69a1d5be244dd94ddee40700014305c6e7b8f3
deleted: sha256:6721078d05153c2ea23c831c8b87d437177abca9edafe43f7fcdb405a8ac8430
deleted: sha256:7c89dd89a4101d1bb42d0eb9d9cf145906c4e574826c3792f7211325362e563a
deleted: sha256:34fa6dddb40afdba66482396f5e08ad22f646fb4fc9770e5d02dd4c61c18db00
deleted: sha256:25c712dda17c439dc446a448c708596dbda15aa42f88e99685eda1b25d30b2c0
deleted: sha256:a483da8ab3e941547542718cacd3258c6c705a63e94183c837c9bc44eb608999

Total reclaimed space: 167.5MB

Docker Composeの特徴

 Docker Composeは、複数のDockerコンテナを管理するためのツールであり、次のような特徴があります。

サービス名の使用

 Docker Composeコマンドでは、コンテナを操作する際にサービス名を使用します。サービス名は、「compose.yaml」ファイル内で定義された各サービスの名前です。

 サービス名を指定することで、「compose.yaml」で定義されたサービスに対して操作を行うことができます。

サービス名の省略

 Docker Composeコマンドを実行する際に、サービス名を省略することができます。この場合、「compose.yaml」に記述された全てのサービスが対象となります。

サービス名を省略した場合、コマンドはcompose.yamlで定義された順番にサービスを処理します。

プロジェクト名とコンテナ名

 Docker Desktopでは、Docker Composeプロジェクトの名前が、コンテナ名として表示されます。このプロジェクト名は、デフォルトではディレクトリ名から自動的に決定されます。

 コンテナ名は、Docker Composeプロジェクト名とサービス名を組み合わせて生成されます。これにより、Docker DesktopのUIやコンソール出力などで、コンテナを識別するのに役立ちます。

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

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

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

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

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

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

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

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

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/03/31    13:25                webdb

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

VSCodeの起動

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

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

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

VSCodeが起動します。

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

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

version: '3'
services:
  web:
    image: nginx:latest
  db:
    image: mysql:latest

コマンドを使ってコンテナの作成・実行する。

 「compose.yaml」の準備ができたら、コンテナを作成して実行します。「docker compose up」コマンドを使います。

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

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

PS C:\Users\joeac\Desktop\docker\webdb> docker compose up -d
[+] Running 19/19
 ✔ db 10 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                    12.7s
   ✔ 9a5c778f631f Pull complete                                                                                         1.6s
   ✔ ccc451c3fb55 Pull complete                                                                                         0.7s
   ✔ db534de989c8 Pull complete                                                                                         0.7s
   ✔ c1a1ab6fb3ea Pull complete                                                                                         1.5s
   ✔ d18a374d12e6 Pull complete                                                                                         1.3s
   ✔ 2d9f4c3e8c03 Pull complete                                                                                         2.0s
   ✔ 4c79cbebfe62 Pull complete                                                                                         3.3s
   ✔ b3549fdd6799 Pull complete                                                                                         2.2s
   ✔ c08846a4ab7a Pull complete                                                                                         4.5s
   ✔ 084bd453daf0 Pull complete                                                                                         2.9s
 ✔ web 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                                       10.2s
   ✔ 8a1e25ce7c4f Pull complete                                                                                         4.6s
   ✔ e78b137be355 Pull complete                                                                                         5.0s
   ✔ 39fc875bd2b2 Pull complete                                                                                         5.2s
   ✔ 035788421403 Pull complete                                                                                         5.4s
   ✔ 87c3fb37cbf2 Pull complete                                                                                         6.3s
   ✔ c5cdd1ce752d Pull complete                                                                                         5.9s
   ✔ 33952c599532 Pull complete                                                                                         6.0s
[+] Building 0.0s (0/0)                                                                                       docker:default
[+] Running 3/3
 ✔ Network webdb_default  Created                                                                                       0.0s
 ✔ Container webdb-web-1  Started                                                                                       0.1s
 ✔ Container webdb-db-1   Started

 「docker compose up -d」コマンドを実行すると、”web”と”db”という名前の2つのサービスが起動されます。そして、Docker DesktopのUIでコンテナを見ると、”web”サービスと”db”サービスに対応するコンテナが表示されます。

Docker Desktopでの確認

コンテナ

・Docker Desktopの「Containers」タブを確認します。

プロジェクト名がコンテナ名で表示されます。

デフォルトでは「compose.yhaml」ファイルを配置したディレクトリ名から自動的に決定されます。

表示されているコンテナ名は、1つですが、2つのコンテナが含まれています。

PowerShellで確認します。

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

 コンテナ名は、Docker Composeプロジェクト名とサービス名を組み合わせて作成されていることが確認できます。

コンテナ名は、「webdb-db-1」と「webdb-web-1」となっています。

PS C:\Users\joeac\Desktop\docker\webdb> docker container ls -a
CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS                      PORTS     NAMES
28b7fc0296fe   mysql:latest   "docker-entrypoint.s…"   12 minutes ago   Exited (1) 12 minutes ago             webdb-db-1
2b5acdd49ce6   nginx:latest   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes               80/tcp    webdb-web-1

イメージ

・Docker Desktopの「Images」タブを確認します。

 「compose.yaml」の「services:」で指定したベースイメージのイメージ名からイメージが作成されていることが確認できます。

イメージ名は、「mysql」と「nginx」となっています。

Webブラウザで確認

ついでに、Webブラウザで確認してみます。

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

 今回は、ホストとコンテナのポート番号の紐づけを行っていないため、nginxの初期ページは表示されません。

コンテナの停止

「docker container stop」ではなく、「docker compose stop」コマンドでコンテナを停止します。

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

PS C:\Users\joeac\Desktop\docker\webdb> docker compose stop
[+] Stopping 2/2
 ✔ Container webdb-db-1   Stopped                                                                                       0.0s
 ✔ Container webdb-web-1  Stopped

最後にDockerオブジェクトの削除

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

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

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

PS C:\Users\joeac\Desktop\docker\webdb> 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:
28b7fc0296feff27d25dda07cf5b16ea2d3c86115d916577d8f73c998aa396bd
2b5acdd49ce6c0c7dd4094b6d52b99be2b50f30bfc9391fa01a3e89e10917ffd

Deleted Networks:
webdb_default

Deleted Images:
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
untagged: mysql:latest
untagged: mysql@sha256:4552fcc5d3cdb8cdee76ee25cce28bf60b0eb3ce93d25ba3bfff7a66bfdcdee8
deleted: sha256:82563e0cbf18162af685bff03debc195b851c327c31163fd211c0144d3c1baae
deleted: sha256:1ec6a25d9d0e9f5b6b9de54bd25a7abadf87e462e4a8f7bcdd2e51465514d1a0
deleted: sha256:94db37d32ebfad636d2c0c57e92f333416c8df0328eca57c9acaf4ee17f79146
deleted: sha256:841f234a9a856b8a729e98ff390dd0e41ca8f08b63dd361597dd1b809047e63f
deleted: sha256:4780dae798526f95105c00ebe09cc47591b30eff4de56c86c700430ebd0348b5
deleted: sha256:64b93fdb873fcf262cc40fa492e6598b7df0b64ee02771df1aa120685b970d09
deleted: sha256:696891c1289e24722d08ab7db3f61edb32874dcc6c764d748df077370f7bbae5
deleted: sha256:26f817f40dbe49d6507930ebccae13645bbfb39ca63bf1ceaf769f7605df9b32
deleted: sha256:7f9290a30ea78acd85c216f714bb5df589531db0b559bb3cd8f17332390a55b2
deleted: sha256:b1594fddff8b8af91a2289850c56169c201baa26df4e7a98ecfeb6f669619279
deleted: sha256:18a3ada103a9229bc00b549b66ae7caa0bc0eb47e785859d8b1346a254a871d1

Total reclaimed space: 819.1MB