LoginSignup
343
329

More than 3 years have passed since last update.

【Docker】Dockerでホストのディレクトリをマウントする

Last updated at Posted at 2016-06-29

Manage data in Docker | Docker Documentation

ホストのディレクトリをDockerのコンテナから参照できるようにする。

コマンド

ホスト側のマウント先を指定する場合

docker run -v [ホストディレクトリの絶対パス]:[コンテナの絶対パス] [イメージ名] [コマンド]
docker run -v /lib/modules:/lib/modules dummy-img /bin/bash

これでホスト側のディレクトリがコンテナにマウントされる。コンテナ上で作ったファイルがホストの方に残る。

docker inspectするとこんな感じで表示される↓

"Mounts": [
    {
        "Source": "/lib/modules",
        "Destination": "/lib/modules",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
]

マウントするとデフォルトでread-write modeなので"RW": trueになってる。

Docker volumes default to mount in read-write mode, but you can also set it to be mounted read-only.

docker run -v [ホストディレクトリの絶対パス]:[コンテナの絶対パス]:ro [イメージ名] [コマンド]

最後にroをつけるとread-only modeになる。

"Mounts": [
    {
        "Source": "/lib/modules",
        "Destination": "/lib/modules",
        "Mode": "ro",
        "RW": false,
        "Propagation": "rprivate"
    }
]

ホスト先のマウント先を指定しない場合

docker run -v [コンテナの絶対パス] [イメージ名] [コマンド]
docker run -v /lib/modules dummy-img /bin/bash
"Mounts": [
    {     
        "Name": "3da94f6d7353ac0287b97b5a2eaa6434b4a827683dddaf03719c112e531fd47b",
        "Source": "/var/lib/docker/volumes/3da94f6d7353ac0287b97b5a2eaa6434b4a827683dddaf03719c112e531fd47b/_data",
        "Destination": "/lib/modules",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]

ホスト側の/var/lib/docker/volumesの下にディレクトリ作られてマウントされた。

ホスト先のマウント先を指定しない場合 (name指定)

docker run -v [name]:[コンテナの絶対パス] [イメージ名] [コマンド]
docker run -v foo:/lib/modules dummy-img /bin/bash
"Mounts": [
    {
        "Name": "foo",
        "Source": "/var/lib/docker/volumes/foo/_data",
        "Destination": "/lib/modules",
        "Driver": "local",
        "Mode": "z",
        "RW": true,
        "Propagation": "rprivate"
    }
]

ホスト側の/var/lib/docker/volumesの下にfoooディレクトリ作られてマウントされる。

ちなみに

pythonのdocker-pyとかrubyのdocker-apiを使うことが多いのでメモ。

docker-py

docker-py Documentation using-volumes

container_id = cli.create_container(
    'busybox', 'ls', volumes=['/mnt/vol1', '/mnt/vol2'],
    host_config=cli.create_host_config(binds={
        '/home/user1/': {
            'bind': '/mnt/vol2',
            'mode': 'rw',
        },
        '/var/www': {
            'bind': '/mnt/vol1',
            'mode': 'ro',
        }
    })
)

docker-api

container = Docker::Container.create(
      'Image' => 'dummy_img',
      'HostConfig' => { 
          'Binds':  [ '/lib/modules:/lib/modules' ]
      },
)

参考

343
329
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
343
329