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
です。

  1. {PWD} :

    ホスト OS のユーザ領域です。
    私の場合は /home/yamada/ を示しています。

  2. d-minic-v : ③

    名前は適当です。
    /home/yamada/d-minic-v
    が共有フォルダになります。

  3. volume_dir : ④

    コンテナの volume 用ディレクトリ(volume_dir)→名前は適当
    ホスト OS の root 領域
    /var/lib/docker/volumes/volume_dir/_data/
    が共有フォルダになります。

  4. 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

  1. type=bind :

    ホスト OS のユーザ領域と共有するために type=bind とします。

  2. "$(pwd)" : ⑤

    ホスト OS のユーザ領域です。
    私の場合は /home/yamada/ を示しています。
    /home/yamada/d-minic-v
    と共有されます。
    フォルダ名 d-minic-v は適当です。

  3. target=/app : ⑥

    作業フォルダの app [名前は適当]がホスト OS のユーザ領域と共有されます。

  4. 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 を使ってもっと簡便にしたいと思います。


  • docker-compose を使ってマウントの指定 に進む
  • Docker volume に戻る
  • Docker イメージ d-minic コンテナを起動 に戻る
  • dockerfile で continuumio/miniconda3 コンテナを起動 に戻る
  • docker-miniconda3 コンテナの構築 に戻る
  • NVIDIA Container Toolkit インストール準備まとめ に戻る
  • Docker コンテナ miniconda3 に戻る
  • 70VPS に戻る