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

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' ]
},
)


参考

http://qiita.com/sokutou-metsu/items/b83b275198fc9594f5a4