概要
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> |
なお共有後はコンテナ側での作成・削除・変更内容もホスト側に反映される。