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