回答:
ボリュームは、に保存されている永続的なデータです /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!
Dockerfile
with VOLUME
と-v /path:/host_path/
フラグを使用するとします。のコンテンツは?VOLUME
のコンテンツによってオーバーライドされます/host_path/
。
docker volume create --name my_volume
続けたdocker run --volume-from my_volume
場合、マウントポイントがどこにあるかをどのようにして知ることができますか?
docker run ...
で、my_volume
ボリュームに保存されているファイルに書き込むにはどうすればよいですか?パスがわからない?何も定義していないため、実行中のコンテナ内のボリュームの 私は自分の
docker volume create --name aname
は、名前付きボリュームを作成します。実行時にコンテナーパスを割り当てます。docker run -v aname:/apath
:そのコンテナーには、/ apathフォルダーにマウントされたボリュームがアタッチされています。それを明確にするために答えを書き直しました。
VOLUME
volumes-from
ランタイムパラメータと組み合わせると、命令が面白くなります。
次のDockerfileがあるとします。
FROM busybox
VOLUME /myvolume
以下を使用してイメージを作成します。
docker build -t my-bb .
そして、次のコマンドでコンテナを起動します。
docker run --rm -it --name my-first-bb my-bb
最初に気付くのは、この画像にという名前のフォルダがあることですmyvolume
。しかし、コンテナを終了するとボリュームも削除されるため、特に興味深いことではありません。
このフォルダーに空のファイルを作成するため、コンテナーで次のコマンドを実行します。
cd myvolume
touch hello.txt
新しいコンテナを起動しますが、同じボリュームをと共有しmy-first-bb
ます:
docker run --rm -it --volumes-from my-first-bb --name my-second-bb my-bb
あなたはそれが表示されますmy-second-bb
ファイルが含まhello.txt
でmyvolume
フォルダを。
両方のコンテナを終了すると、ボリュームも削除されます。
--rm
オプションでコンテナーを開始したため、削除されます。私はそれを言及してうまくいくかもしれないと思います。でコンテナを開始しなかった場合--rm
でも、でコンテナとその匿名ボリュームを削除できますdocker rm -v my-container
。