概要
Dockerのホストとコンテナでディレクトリーをバインドして共有する。runコマンドの--mountオプションを使う。
以下を前提とする。
- UbuntuにApache2をインストールしたイメージ(ubuntu-apache)を使う
 - 以下のフォルダーとディレクトリーをバインドする。
- ホスト側:C:\dev\docker\ubuntu\share
 - コンテナ側:/var/www/html
 
 
mountオプション
runコマンドのmountオプションの書き方は以下の通り。key=valueの間のコンマの前後にスペースを入れないこと。
--mount type=bind,src=[ホスト側],dst=[コンテナ側]
実行例
イメージを確認。
| 
					 1 2 3  | 
						>docker images REPOSITORY                 TAG       IMAGE ID       CREATED        SIZE ubuntu-apache              latest    becd48c3de48   14 hours ago   259MB  | 
					
runコマンドを実行。
| 
					 1 2 3 4 5 6  | 
						>docker run -itd --name ubuntu-apache -p 8080:80 --mount type=bind,src=C:\dev\docker\ubuntu\share,dst=/var/www/html ubuntu-apache 6021eb0f9d4a74c995d14c616f8dde07f809be6cd1b61e614596ed1883048550 >docker ps -a CONTAINER ID   IMAGE                             COMMAND                   CREATED          STATUS                      PORTS                  NAMES 6021eb0f9d4a   ubuntu-apache                     "systemctl start apa…"   20 minutes ago   Up 20 minutes               0.0.0.0:8080->80/tcp   ubuntu-apache  | 
					
これにより、ホスト側のC:\dockshareフォルダーの内容とコンテナ側の/usr/local/shareディレクトリーの内容が同期される。
コンテナ側の上書き
コンテナが起動したとき、ホスト側のフォルダーの内容でコンテナ側のディレクトリーが上書きされる(ホスト側のフォルダーが空ならコンテナ側にファイルがあったとしても空になる)。ホスト側のC:\dev\docker\ubuntu\shareが空だとコンテナ側の/var/www/htmlディレクトリーも空になり、デフォルトページindex.htmlも削除される。
ここでホスト側の共有フォルダーに新たなindex.htmlを作ると、その内容がコンテナ側に反映され、localhost:8080で表示できる。
| 
					 1 2 3  | 
						>docker exec -it ubuntu-apache /bin/bash root@6021eb0f9d4a:/# cat /var/www/html/index.html <h1>Apache2起動</h1>  | 
					
なお共有後はコンテナ側での作成・削除・変更内容もホスト側に反映される。