毎度忘れるのでメモ。
コンテナの中でファイルを作成しても、コンテナを削除すると消える。そこでホスト側のフォルダをコンテナにマウントすることで永続化する。
データベースの保持 — Docker-docs-ja 24.0 ドキュメント
環境
・Windows10
・Docker Desktop v4.26.1
volume でマウント
基本的にはホスト側から操作するべきではないため、ホスト側でボリュームがどこに作成されるか意識する必要はない。とはいえ一応知りたい場合。
例として
> docker container run -it --rm --mount src=volumetest,dst=/tmp/volumetest python:3.9.18-slim-bullseye /bin/bash
で作成した場合。
# ls /tmp/ volumetest # echo "test-desu" > /tmp/volumetest/test.txt # ls /tmp/volumetest/ test.txt # exit exit
Volume が作成されている。

PS C:\Users\hoge> docker volume inspect volumetest
[
{
"CreatedAt": "2024-01-13T11:49:48Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/volumetest/_data",
"Name": "volumetest",
"Options": null,
"Scope": "local"
}
]
"Mountpoint": "/var/lib/docker/volumes/volumetest/_data" とのことで、Windows上では下記となる。

bind でマウント
バインド マウント(bind mount) の使用 — Docker-docs-ja 24.0 ドキュメント
ホスト側でもフォルダの内容を操作したい場合に利用する。ホスト側の任意のフォルダを割り当てる。
bindの方がvolumeよりアクセス速度が遅い。
Windows上にフォルダを作成
PS C:\Users\hoge> mkdir bindtest
Directory: C:\Users\hoge
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/01/13 土 21:21 bindtest
フォルダに移動
PS C:\Users\hoge> cd .\bindtest\
コンテナ起動とマウント
PS C:\Users\hoge\bindtest> docker container run -it --rm --mount "type=bind,src=$pwd,dst=/tmp/bindtest" python:3.9.18-slim-bullseye /bin/bash
テストファイルを作成
# echo "test-desu" > /tmp/bindtest/test.txt
# ls /tmp/bindtest/
test.txt
# exit
exit
PS C:\Users\hoge\bindtest> ls
Directory: C:\Users\shink\bindtest
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2024/01/13 土 21:52 10 test.txt
後始末。テストファイルとフォルダの削除
PS C:\Users\shink\bindtest> cd ../
PS C:\Users\shink> rm -R .\bindtest\
PS C:\Users\shink>
Macについては後日確認。