docker_practice/data_management/bind-mounts.md
Kang HuaiShuai 5cb92f63cf
Update title style
Signed-off-by: Kang HuaiShuai <khs1994@khs1994.com>
2019-11-06 14:58:03 +08:00

76 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 挂载主机目录
## 挂载一个主机目录作为数据卷
使用 `--mount` 标记可以指定挂载一个本地主机的目录到容器中去
```bash
$ docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp \
--mount type=bind,source=/src/webapp,target=/opt/webapp \
training/webapp \
python app.py
```
上面的命令加载主机的 `/src/webapp` 目录到容器的 `/opt/webapp`目录这个功能在进行测试的时候十分方便比如用户可以放置一些程序到本地目录中来查看容器是否正常工作本地目录的路径必须是绝对路径以前使用 `-v` 参数时如果本地目录不存在 Docker 会自动为你创建一个文件夹现在使用 `--mount` 参数时如果本地目录不存在Docker 会报错
Docker 挂载主机目录的默认权限是 `读写`用户也可以通过增加 `readonly` 指定为 `只读`
```bash
$ docker run -d -P \
--name web \
# -v /src/webapp:/opt/webapp:ro \
--mount type=bind,source=/src/webapp,target=/opt/webapp,readonly \
training/webapp \
python app.py
```
加了 `readonly` 之后就挂载为 `只读` 如果你在容器内 `/opt/webapp` 目录新建文件会显示如下错误
```bash
/opt/webapp # touch new.txt
touch: new.txt: Read-only file system
```
## 查看数据卷的具体信息
在主机里使用以下命令可以查看 `web` 容器的信息
```bash
$ docker inspect web
```
`挂载主机目录` 的配置信息在 "Mounts" Key 下面
```json
"Mounts": [
{
"Type": "bind",
"Source": "/src/webapp",
"Destination": "/opt/webapp",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
```
## 挂载一个本地主机文件作为数据卷
`--mount` 标记也可以从主机挂载单个文件到容器中
```bash
$ docker run --rm -it \
# -v $HOME/.bash_history:/root/.bash_history \
--mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \
ubuntu:18.04 \
bash
root@2affd44b4667:/# history
1 ls
2 diskutil list
```
这样就可以记录在容器输入过的命令了