web-dev-qa-db-ja.com

DockerfileのVOLUMEの目的は何ですか

私はDockerのボリュームをより深く理解しようとしていますが、以下の違い/ユースケースを理解するのに苦労しています:

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

VOLUMEエントリと-vフラグを組み合わせるとどうなるか、特にわかりません。

誰かがよく理解したら、私に説明してください!

70
radium226

ボリュームは、/var/lib/docker/volumes/...に保存される永続的なデータです

  • Dockerfileで宣言することができます。つまり、コンテナがイメージから起動されるたびに、ボリュームが作成されます(empty-vオプションはありません。

  • 実行時に宣言できます docker run -v [Host-dir:]container-dir
    2つの組み合わせ(VOLUME + docker run -v)は、ホストフォルダーのコンテンツを、/var/lib/docker/volumes/...のコンテナーによって保持されているボリュームにマウントできることを意味します。

  • docker volume create 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!
49
VonC