Dockerコンテナ内のパスにホストマシンのパスをマウントする複数の方法と、マウントされたパスを確認する方法を説明します。
この記事の内容
docker runでマウントする
dockerコンテナの生成と同時にマウントするにはdocker run
の-v
オプションを使います。
> docker run -v ホストのパス:コンテナのパス イメージ名
docker runでマウントしてコンテナに入る
docker runの-itオプションを組み合わせれば、コンテナの生成、起動、マウントと同時にアタッチ(コンテナに入る)事が出来ます。
> docker run -it -v ホストのパス:コンテナのパス イメージ名
docker createでマウントする
docker run
とほぼ同じですが、docker create
でもマウントできます。
> docker create -v ホストのパス:コンテナのパス イメージ名
複数のパスをマウントする
-vオプションを追加したぶんマウントを追加できます。
> docker run -it -v ホストのパス:コンテナのパス -v ホストのパス2:コンテナのパス2 イメージ名
Dockerfileでマウントするパスを指定する
Dockerfileでマウントするパスを指定することもできます。
ただし指定できるのはコンテナ側のパスのみです。
以下のようなDockerfileを作ります。
FROM centos
RUN mkdir /mydata
VOLUME /mydata
イメージを作ります。
> docker build -t イメージ名 .
作ったイメージを使ってコンテナを作ります。
この時マウントは指定しません。
> docker create イメージ名
ホストマシンのどこにファイルが作られたのか確認します。
docker inspect
でマウントされたパスを確認します。
コンテナID確認 > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6bc27367d4f1 イメージ名 "/bin/bash" 4 seconds ago Created eager_hawking マウントの情報を確認 > docker inspect 6bc27367d4f1 … "Mounts": [ { "Type": "volume", "Name": "147eb~略", "Source": "/var/lib/docker/volumes/147eb~略/_data", "Destination": "/mydata", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], …
/var/lib/docker/volumes/147eb~略/_data
というホストのパスにマウントされているようです。
MacOSやWindowsの場合は実際にこのパスではなく、仮想Linux環境上のパスになっています。
ホスト側のパスが指定できないので、この方法はあまり使わないかと思います。
docker-composeでマウントする
docker-compose.yml
にマウントの設定を書いておくこともできます。
Dockerfile
を作っておきます。
FROM centos
docker-compose.yml
は以下のようにします。
version: '3'
services:
sample:
build: .
volumes: # 「- ホスト側のパス:コンテナのパス」で指定
- ./mydata:/mydata
tty: true
コンテナを作成します。
> docker-compose up -d
以下のコマンドでコンテナに入る事が出来ます。
> docker-compose exec sample /bin/bash
# touch mydata/sample.txt
ホスト側にも./mydata/sample.txt
が作られる事が確認できます。
この方法が一番管理しやすく良いやり方だと思います。
コンテナ作成後のマウントの追加はできない
docker run
やdocker create
で作成したコンテナに後からマウントを追加することはできません。
コンテナを作り直すのが良いでしょう。
マウントされているパスを確認する
コンテナにマウントされているパスを確認するには、docker inspect
を使います。
MountsのSourceがホストマシン側のパス、Destinationがコンテナのパスになります。
コンテナID確認 > docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6bc27367d4f1 イメージ名 "/bin/bash" 4 seconds ago Created eager_hawking マウントの情報を確認 > docker inspect 6bc27367d4f1 … "Mounts": [ { "Type": "volume", "Name": "147eb~略", "Source": "/var/lib/docker/volumes/147eb~略/_data", "Destination": "/mydata", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], …
以上です。
コメント/ピンバック