Dockerコンテナにホストマシンのディレクトリをマウントする/マウントされたパスを確認する

Docker ツール

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 rundocker 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": ""
            }
        ],
…

以上です。

コメント/ピンバック

タイトルとURLをコピーしました