毎度忘れるのでメモ。
コンテナの中でファイルを作成しても、コンテナを削除すると消える。そこでホスト側のフォルダをコンテナにマウントすることで永続化する。
データベースの保持 — 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については後日確認。