Windows11 WSL2 Ubuntu 24.04 LTS Docker miniconda3
Docker volume
ここまで何とか Docker コンテナが動くようになりました。
引き続き Docker volume について考えて行きます。
コンテナを破棄すると出来上がったデータも破棄されてしまい再利用できません。
Docker はコンテナ外にデータ保存領域をつくる機能を提供しています。
volumes は Docker のコンテナ内で作成したデータを永続化するための場所です。
volumes に保存したデータはコンテナを破棄しても残り再利用できます。
d-minic コンテナでは Dockerfile の中に
VOLUME /app
を書いて対応しました。
しかし Dockerfile に書かなくても Docker volume を利用することができます。
Docker の Volume がよくわからないから調べた
が参考になります。
docker volume create
docker volume を作成します。
コンテナ外にデータ保存領域をつくります。
t-volume という保存領域を作ります。
名前は適当です。
どこに作成されるかと言うとホスト OS の中の
/var/lib/docker/volumes/t-volume/_data
にあります。
しかし、windows11 wls2 を使っている場合、
Docker 環境は HyperKit という VM(バーチャルマシン)上で実行されているため
windows からは参照できないようです。
volume を createします。
yamada@yama:~$ docker volume create t-volume
作成された t-volume の詳細を見ます。
inspect コマンドで参照することができます。
yamada@yama:~$ docker volume inspect t-volume
[結果]
{
"CreatedAt": "2025-10-06T20:40:16+09:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/t-volume/_data",
"Name": "t-volume",
"Options": null,
"Scope": "local"
}
Docker で volumes を設定する
が参考になります。
volume 指定で Docker 起動
作成した volume を指定してコンテナ(continuumio/miniconda3)を起動します。
-v [volume名]:[コンテナの volume 用ディレクトリ(volume_dir)→名前は適当]
のオプションで t-volume を指定します。
無事コンテナに入ることができたら ls -la で
コンテナ内に volume 用ディレクトリ volume_dir が存在するか確認します。
yamada@yama:~$ docker run -it --rm -v t-volume:/volume_dir continuumio/miniconda3 (base) root@a6428994173a:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr volume_dir volume_dir ディレクトリ内に test.txt を作成します。 (base) root@a6428994173a:/# cd volume_dir (base) root@a6428994173a:/volume_dir# echo "test" > test.txt (base) root@a6428994173a:/volume_dir# cat test.txt test (base) root@a6428994173a:/volume_dir# exit
exit でコンテナを破棄しました。
--rm オプション付きで起動しましたので、コンテナはきれいになくなりました。
よって
/volume_dir/test.txt
も同時に破棄されました。
でもホスト OS ubuntu の中の
/var/lib/docker/volumes/t-volume/_data
になかに test.txt は保存され残っています。
yamada@yama:~$ sudo cat /var/lib/docker/volumes/t-volume/_data/test.txt [結果] test
PC エクスプローラ
\\wsl.localhost\Ubuntu-24.04\var\lib\docker\volumes\t-volume\_data\test.txt
から見えるようにファイル権限を 777 に変更し、 誰でもファイルを読取り、実行、変更できるようにします。(chmod 777)
yamada@yama:~$ sudo chmod 777 /var/lib/docker/volumes/t-volume/_data/test.txt
この変更をしないと
\\wsl.localhost\Ubuntu-24.04\var\lib\docker
までしか見ることができません。
この先を見ようとすると
が発生します。
場合によっては、permission denied が発生しているファイル、フォルダのすべての権限を
書き換えないといけないケースもあります。
例)
yamada@yama:~$ sudo chmod 777 /var/lib/docker/
yamada@yama:~$ sudo chmod 777 /var/lib/docker/volumes/
根本的な解決案もあるようですが大変なようです。
Docker コンテナで「Permission denied」エラーを解決する方法
を見てください。
docker volume 削除
docker volume をいじっているとゴミがたまります。
削除してみます。
まずは、利用可能なボリュームを $ docker volume ls コマンドで確認します。
yamada@yama:~$ docker volume ls DRIVER VOLUME NAME local 2a6e94173e418003fba0b3a5633a4c4ef470bee107a1e2879512ed3064bdd11b ① local app local name ② local t-volume --①を削除 yamada@yama:~$ docker volume rm 2a6e94173e418003fba0b3a5633a4c4ef470bee107a1e2879512ed3064bdd11b [結果] 2a6e94173e418003fba0b3a5633a4c4ef470bee107a1e2879512ed3064bdd11b --②を削除 yamada@yama:~$ docker volume rm name [結果] name --利用可能なボリュームを再確認 yamada@yama:~$ docker volume ls [結果] DRIVER VOLUME NAME local app local t-volume ①②が削除されました。
ここまでで volume 指定で Docker 起動し、ホストの root 内のフォルダと
コンテナで作成したデータの共有ができるようにしました。
今度は、ホスト OS のユーザ領域
/home/yamada/****/
とデータの共有ができるようにします。