Dockerホスト上のディレクトリをコンテナに見せる方法(bind mount)
Dockerホスト上のディレクトリをコンテナに見せるには--mount type=bindオプションを指定してdocker container runコマンド実行します。
なお、ホストOSのデータをコンテナに見せる方法として以下の3種類があります。
- bind mount:Dockerホスト上のディレクトリをコンテナに見せる
- volume:Dockerホストが管理するボリューム(/var/lib/docker/volumes以下)をコンテナに見せる
- tmpfs mount:Dockerホストのメモリをファイルシステムとしてコンテナに見せる
オプションの説明(抜粋)
$ docker container run --help Usage: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container Options: -i, --interactive Keep STDIN open even if not attached --mount mount Attach a filesystem mount to the container --name string Assign a name to the container -t, --tty Allocate a pseudo-TTY
オプションの説明
- --mountオプション:ホストOSが提供するディレクトリをコンテナに見せる
- -iオプション:Dockerコンテナ起動時に、標準入力(STDIN)を受け付ける
- -tオプション:仮想端末(pseudo-TTY)をコンテナに割り当てる
- --nameオプション:作成するコンテナに名前を付ける
- ※-i -tを同時に使用する場合は、-itオプションを使用できます
実行例
--mountオプションのsrcにホストOSが提供するディレクトリ、dstにコンテナ内のディレクトリを指定します。
$ mkdir $HOME/hostdir01 # コンテナに見せるディレクトリを作成
$ echo "Hello" > $HOME/hostdir01/testfile01.txt # ホストOS側にファイルを作成
$ docker container run -it --name test01 --mount type=bind,src=$HOME/hostdir01,dst=/root/ctdir01 centos:7.7.1908 /bin/bash
[root@b65328f17905 /]# ls /root/ctdir01/
testfile01.txt
[root@b65328f17905 /]# cat /root/ctdir01/testfile01.txt
Hello
[root@b65328f17905 /]# rm -f /root/ctdir01/testfile01.txt
[root@b65328f17905 /]# CTRL+P、CTRL+Qでコンテナから離脱
$ ls $HOME/hostdir01 # ファイルは削除されている
$ docker volume ls # docker volumeコマンドでは表示されない
DRIVER VOLUME NAME
なお、-vや--volumeオプションでもマウントできますが、わかりやすさの点から--mountオプションを使うことが推奨されています。
$ docker container run -it --name test01 -v $HOME/hostdir01:/root/ctdir01 centos:7.7.1908 /bin/bash [root@14e445b928bc /]# ls /root/ctdir01/ testfile01.txt