Windows11 WSL2 Ubuntu 24.04 LTS Docker miniconda3
Docker volume バインドマウント
ここまでは volume 指定で Docker 起動し、ホストの root 内のフォルダと
コンテナで作成したデータの共有ができるようにしました。
今度は、ホスト OS のユーザ領域
/home/yamada/****/
とデータの共有ができるようにします。
こんな時は
Docker volume バインドマウント
を使用します。
書式は
$ docker run -it --rm -v ${PWD}/d-minic-v:/volume_dir continuumio/miniconda3
です。
- {PWD} :
ホスト OS のユーザ領域です。
私の場合は /home/yamada/ を示しています。 - d-minic-v : ③
名前は適当です。
/home/yamada/d-minic-v
が共有フォルダになります。 - volume_dir : ④
コンテナの volume 用ディレクトリ(volume_dir)→名前は適当
ホスト OS の root 領域
/var/lib/docker/volumes/volume_dir/_data/
が共有フォルダになります。 - continuumio/miniconda3
コンテナ化するイメージ名
③と④をバインドします。
yamada@yama:~$ docker run -it --rm -v ${PWD}/d-minic-v:/volume_dir continuumio/miniconda3
(base) root@7b005887084d:/# 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@7b005887084d:/# cd volume_dir
(base) root@7b005887084d:/volume_dir# echo "test" > test.txt
(base) root@7b005887084d:/volume_dir# cat test.txt
test
# PC エクスプローラから見えるようにする
yamada@yama:~$ sudo chmod 777 /home/yamada/d-minc-v/test.txt
volume_dir はコンテナを削除すると同時になくなります。
でも、/home/yamada/d-minic-v に中のデータは消えずに残っています。
Docker run --mount
Docker run --mount オプションでバインドマウントしてみます。
Docker volume よりコマンドが長くなりますが、書き方としては分かり易いです。
ホスト側のディレクトリをコンテナ内のディレクトリと共有します。
バインドマウントを使ってコンテナを起動
が参考になります。
書式は
$ docker run -it --rm --mount type=bind, source="$(pwd)"/d-minic-v, target=/app continuumio/miniconda3
- type=bind :
ホスト OS のユーザ領域と共有するために type=bind とします。
- "$(pwd)" : ⑤
ホスト OS のユーザ領域です。
私の場合は /home/yamada/ を示しています。
/home/yamada/d-minic-v
と共有されます。
フォルダ名 d-minic-v は適当です。 - target=/app : ⑥
作業フォルダの app [名前は適当]がホスト OS のユーザ領域と共有されます。
- continuumio/miniconda3
コンテナ化するイメージ名
⑤と⑥をバインドします。
yamada@yama:~$ docker run -it --rm --mount type=bind,source="$(pwd)"/d-minic-v,target=/app continuumio/miniconda3 (base) root@5c85ca10cb1f:/# ls app boot etc lib media opt root sbin sys usr bin dev home lib64 mnt proc run srv tmp var (base) root@5c85ca10cb1f:/# cd app (base) root@5c85ca10cb1f:/app# ls test.txt test1.txt (base) root@5c85ca10cb1f:/app# test.txt test1.txt (base) root@5c85ca10cb1f:/app# echo "test3" > test3.txt (base) root@5c85ca10cb1f:/app# cat test3.txt test3 (base) root@5c85ca10cb1f:/app# exit # PC エクスプローラから見えるようにする yamada@yama:~$ sudo chmod 777 /home/yamada/d-minic-v/test3.txt
ここまでで、ホスト OS のユーザ領域とコンテナ内のフォルダを共有することができました。
でもそのためには、説明してきたように長いコマンドを書く必要があります。
もっと簡単にしたいですよね。
引き続き docker-compose を使ってもっと簡便にしたいと思います。