Docker与docker-compose中volume参数的使用方式
作者:Felier.
数据卷Volume的概念
在docker内有个“数据卷持久化”的概念,也就是我们常说的“数据挂载”。
它的作用是,将宿主机上的数据与容器内的数据形成映射,实现数据的共享或者数据的保存;当删除容器的时候,在宿主机上仍然能够保留文件目录,这就是Volume,数据卷。
数据挂载的实现方式
docker实现数据挂载的方式本质上分为两种:
- 通过宿主机绝对路径挂载
- 通过卷标映射挂载(又包括匿名挂载与具名挂载)
宿主机路径挂载在docker/docker-compose中的使用
使用方法:
# docker docker run -itd -v 宿主机路径:容器路径 --name 容器名 镜像 # docker-compose.yaml services: service_name: container_name: container_name image: image:tag restart: always volumes: - 宿主机路径:容器路径
引例如下:
卷标映射挂载在docker/docker-compose中的使用
当使用卷标的方式进行数据挂载的时候,容器数据具体存放在宿主机的什么路径其实并不直观,但是docker提供了方法查看数据卷的宿主机目录,具体查看的方法如下,后文会在引例中直观说明。
# 查看所有的数据卷 sudo docker volume ls # 查看指定数据卷的详细信息 sudo docker volume inspect 数据卷名称
A.匿名挂载
使用方法:
# docker docker run -itd -v 容器路径 --name 容器名 镜像 # docker-compose.yaml services: service_name: container_name: container_name image: image:tag restart: always volumes: - 容器路径
引例:
这种情况下,我们可以看到,当我们通过docker volume ls查看卷标的时候,我们只能查看到其对应的“匿名”的数据卷。
如下图所示,如果我们随便查看一个数据卷的详细信息(命令为docker volume inspect 数据卷),可以看出其挂载点实际是在/var/lib/docker/volumes/<uuid>/_data下面的,其中uuid是docker自动生成的,而/var/lib/docker是docker的默认路径。
B.具名挂载
使用方法:
# docker docker run -itd -v 数据卷名称:容器路径 --name 容器名 镜像 # docker-compose.yaml services: service_name: container_name: container_name image: image:tag restart: always volumes: - 数据卷名称:容器路径 volumes: 数据卷名称:
引例:
这种情况下,我们可以看到,当我们通过docker volume ls查看卷标的时候,我们能查看到其对应的“具名”的数据卷。
可以看出其挂载点实际是在/var/lib/docker/volumes/<数据卷名称>/_data下面的,/var/lib/docker是docker的默认路径。
别急,特别针对docker-compose,还有另一个现象要看,如下:
可以看到,当我们通过docker-compose启动容器时,数据卷的名称多了一个software的前缀,而这正是docker-compose.yaml的存放路径,同时其挂载点在/var/lib/docker/volumes/<yaml路径_数据卷名称>/_data下面的。
特别的,如果docker-compose在根目录执行,则数据卷的名称的前缀会默认设置为default。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。