容器数据卷挂载
背景:容器删除后,容器内产生的数据丢失. 数据卷就是为数据同步诞生的.【同步备份】
主要命令:-v
指定路径(绑定挂载)
作用:将宿主机上的某个目录或文件直接映射到容器中的 /xx 目录. 宿主机的目录会覆盖掉创建容器时里面的目录, 使其完全映射为宿主机的指定目录
命令:docker run -it -v 宿主机目录:容器内目录 IMAGES-ID
举例:
docker run -it -p 9001:80 -v /docker-volume:/usr/share/nginx/html centos
TIP
- 在宿主机/docker-volume目录中的文件会被同步备份到docker容器的/usr/share/nginx/html中,反之亦然.
- 与容器运行状态无关
- 占用双倍存储空间
具名挂载(Docker卷)
创建卷:docker volume create 卷名
命令:docker run -it -v 卷名:容器内目录 IMAGES-ID
bash
# 除非卷已经有数据,否则初次挂载时容器内的 /usr/share/nginx/html 目录会自动复制到卷中
# 一旦卷包含数据,后续容器挂载该卷时将看到卷中的数据,而非容器镜像中原始的 /usr/share/nginx/html 目录内容,创建的容器中的目录将会被移除而使用数据卷中的数据
docker run -it -p 9001:80 -v volume-name:/usr/share/nginx/html centos
匿名挂载
- 不指定宿主机目录, 在/var/lib/docker/volumes目录下创建一个目录来绑定匿名卷.
命令:docker run -it -v 容器内目录 IMAGES-ID 【不推荐使用】
举例:
docker run -it -p 9002:80 -v /usr/share/nginx/html centos
查看挂载目录信息
docker inspect CONTAINER-ID
js
// 指定路径挂载的
"Mounts": [
{
"Type": "bind",
"Source": "/docker-volume", // 宿主机目录
"Destination": "/usr/share/nginx/html", // 容器内目录
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
// 具名挂载的
"Mounts": [
{
"Type": "volume",
"Name": "volume-name",
"Source": "/var/lib/docker/volumes/volume-name/_data",
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
// 匿名挂载的
"Mounts": [
{
"Type": "volume",
"Name": "4715fd6bf4897b9fa95ff69777fc74393ddc8d4fc946fe7a5ca9b7fae46824ca",
"Source": "/var/lib/docker/volumes/4715fd6bf4897b9fa95ff69777fc74393ddc8d4fc946fe7a5ca9b7fae46824ca/_data", // 默认目录
"Destination": "/usr/share/nginx/html",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
]
Dockerfile指定卷
只能指定匿名挂载
docker
# 匿名挂载两个目录
VOLUME ["/etc/nginx/nginx.conf", "/usr/share/nginx/html"]