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

Docker超入門:Dockerfileからボリュームを作成してマウントする方法②

Dockerfileからボリュームを作成してマウントする方法②

 前回の「方法①」では、Dockerfileからイメージを作成し、そのコンテナにボリュームをマウントするところまでを確認しました。今回は続きとして、別のコンテナから同じボリュームを利用できることを確認する手順を解説します。これにより、コンテナ間でデータを共有できる仕組みが理解できます。

別のコンテナでボリュームをマウント

 Dockerのボリュームは、コンテナが消えても残り続けるため、他のコンテナから再利用できます。ここでは軽量な BusyBoxコンテナ を使って、前回作成した app ボリュームをマウントし、データにアクセスしてみます。

コマンド書式

docker run -v <ボリューム名>:<ディレクトリ> --rm -it <イメージ名>

実行例

docker run -v app:/app --rm -it busybox
コマンドパーツ説明
docker runコンテナを起動するためのコマンド
-v app:/appapp という名前のボリュームをコンテナ内の /app にマウント
--rmコンテナ終了時に自動的に削除
-it対話的にコンテナを操作するモード
busybox使用するイメージ。軽量なLinux環境を提供するBusyBoxを指定

実行結果

PS C:\Users\joeac> docker run -v app:/app --rm -it busybox
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
80bfbb8a41a2: Pull complete
Digest: sha256:d82f458899c9696cb26a7c02d5568f81c8c8223f8661bb2a7988b269c8b9051e
Status: Downloaded newer image for busybox:latest
/ #

ボリュームの内容を確認

BusyBoxコンテナが起動したら、前回 volume-test コンテナで作成したデータを読み込んでみます。

実行結果

/ # cd app
/app # cat sample.txt
This is App Data
/app #

 これで、別のコンテナからも同じボリュームのデータを利用できることが確認できました。これはアプリケーションのログや設定ファイル、アップロードデータなどを複数のコンテナで共有する際にとても便利です。

BusyBoxコンテナを終了させます。

コンテナを終了するときは exit を実行します。

/app # exit
PS C:\Users\joeac\Desktop\docker\volume-test>

Dockerオブジェクトの整理

演習後は不要なコンテナやイメージを整理しておくと、環境がスッキリします。

実行結果

PS C:\Users\joeac\Desktop\docker\volume-test> 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

このコマンドは以下を一括で削除します。

  • 停止中のコンテナ
  • 未使用のネットワーク
  • コンテナに関連付けられていないイメージ
  • ビルドキャッシュ

確認メッセージが表示されたら y を入力します。

ボリュームの削除

ボリュームも整理したい場合は以下を実行します。

個別に削除します。

PS C:\Users\joeac\Desktop\docker\volume-test> docker volume rm app
app

まとめ

  • ボリュームはコンテナが削除されても残るため、他のコンテナからも再利用できる。
  • BusyBoxのような軽量コンテナを使えば、ボリュームの中身を簡単に確認できる。
  • docker system prune -a で不要なオブジェクトを一括削除し、docker volume rm で個別のボリュームも整理できる。

 これで、「方法①」と「方法②」を通して、Dockerfileからボリュームを定義してマウントし、さらに別のコンテナでも利用する流れが理解できました。