将Docker宿主机的数据挂载到容器
Docker提供三种不同的方式将数据从宿主机挂载到容器中:
volumes,bind mounts和tmpfs。 volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
bind mounts:可以存储在宿主机系统的任意位置。
tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统。
Volume
docker volume create 创建数据卷
[root@docker ~]# docker volume create nginx-vol
nginx-vol
docker volume ls 查看当前的数据卷
[root@docker ~]# docker volume ls
DRIVERVOLUME NAME
localnginx-vol
docker volume inspect 查看数据的详细信息
[root@docker ~]# docker volume inspect nginx-vol
[
{
"CreatedAt": "2018-06-26T17:00:44+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
"Name": "nginx-vol",
"Options": {},
"Scope": "local"
}
]
使用数据卷创建容器
第一种使用数据卷创建容器
[root@docker ~]# docker container run -d -it --name nginx-vol --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
f7ef0f178af17e694849a6858b219b9863c4c104defe2ad08f9bcfd73e3bb82b
第二种使用数据卷创建容器
[root@docker ~]# docker container run -d -it --name nginx-vol02 -p 87:80 -v nginx-vol:/usr/share/nginx/html nginx
查看数据卷数据是否共享
进入容器查看数据
[root@docker ~]# docker container exec -it nginx-vol bash
root@f7ef0f178af1:/# ls /usr/share/nginx/html/
50x.htmlindex.html
在宿主机中查看容
“`python器挂载卷的内容
[root@docker ~]# ls /var/lib/docker/volumes/nginx-vol/_data/
50x.htmlindex.html
### docker volume rm清理数据卷
#### 停止并删除使用数据卷的容器
[root@docker ~]# docker container rm -f $(docker container ps -aq)
#### 删除数据卷
```python
[root@docker ~]# docker volume rm nginx-vol
nginx-vol
Ø 注意:
- 数据卷可以用做共享使用
- 如果没有指定卷,自动创建一个匿名卷,名称为随机数
- 建议使用–mount,更通用
Bind Mounts
将宿主机中已有的文件或名录挂载到宿主机中,若宿主机中挂载的目录不存在,会提示bind mount
的挂载类型,会将容器里挂载的目标目录隐藏。
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist.
所以绑定的源目录必须存在
用卷创建一个容器
先创建绑定的目录
[root@docker ~]# mkdir -p /app/wwwroot
运行创建容器
[root@docker ~]# docker container run -it -d --name nginx-bind --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
4a907f03fce4f61a747f5902dfb6954a9d04e5c9db59d6f96f616d68792bd5b8
登录容器后,查看容器目录下没有内容
[root@docker ~]# docker container exec -it nginx-bind bash
root@4a907f03fce4:/# ls /usr/share/nginx/html/
root@4a907f03fce4:/#
另一种bind mount形式
[root@docker ~]# docker container run -it -d --name nginx-bind-v -p 8081:80 -v /app/wwwroot/:/usr/share/nginx/html nginx
55685033cb57680fa0cbd727d63bdb27ba73b3fc46ed03accbb8470b0ad3776e
验证绑定
docker container inspect nginx-bind
………………….
"Mounts": [
{
"Type": "bind",
"Source": "/app/wwwroot",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
………………………
清理
[root@docker ~]# docker container stop nginx-bind nginx-bind-v
nginx-bind
nginx-bind-v
[root@docker ~]# docker container rm nginx-bind nginx-bind-v
nginx-bind
nginx-bind-v
Ø 注意
- 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
- 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。