1. ホーム
  2. docker

[解決済み] DockerfileのVOLUMEは何のためにあるのか?

2022-05-04 05:44:01

質問

DockerのVolumeについて理解を深めようと思っているのですが、その違いやユースケースを理解するのに苦労しています。

  • その docker volume create コマンド
  • docker run -v /path:/host_path
  • VOLUME のエントリは Dockerfile ファイル

を組み合わせるとどうなるのか、特に理解できません。 VOLUME エントリと -v フラグを使用します。

解決方法は?

ボリュームは /var/lib/docker/volumes/...

  • Dockerfileで宣言しておくと、イメージからコンテナが起動するたびにボリュームが作成されることになります( ) がない場合でも、そのようなことはありません。 -v オプションで指定します。

  • 実行時に宣言することができます docker run -v [host-dir:]container-dir .

    という2つの組み合わせ( VOLUME + docker run -v でコンテナが保持するボリュームにホストフォルダの内容をマウントできることを意味します)。 /var/lib/docker/volumes/...

  • ドッカーボリューム作成 は、Dockerfile を定義してイメージをビルドし、コンテナを実行することなく、ボリュームを作成します。これは、他のコンテナが当該ボリュームをマウントすることを迅速に許可するために使用されます。

ボリュームにコンテンツを保存していたが、コンテナを削除した場合 (docker rm -v を使用していない限り、デフォルトでは関連するボリュームは削除されません)、新しいコンテナにそのボリュームを再アタッチできます (同じボリュームを宣言しています)。

"を参照してください。 Docker - コンテナに接続されていないボリュームにアクセスする方法は? "。

docker volume createを使えば、名前付きボリュームをコンテナに再付属させることが簡単にできます。

docker volume create --name aname
docker run -v aname:/apath --name acontainer
...
# modify data in /apath
...
docker rm acontainer

# let's mount aname volume again
docker run -v aname:/apath --name acontainer
ls /apath
# you find your data back!