このページで解説している内容は、以下の 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