Docker与docker-compose中volume参数的使用方式

 更新时间:2024年11月15日 15:19:37   作者:Felier.  
文章介绍了Docker中的数据卷Volume的概念及其在宿主机和容器之间的数据共享和持久化,它详细说明了两种数据挂载方式:通过宿主机绝对路径挂载和通过卷标映射挂载,包括匿名挂载和具名挂载,同时,文章还展示了如何通过docker命令查看数据卷的宿主机目录

数据卷Volume的概念

在docker内有个“数据卷持久化”的概念,也就是我们常说的“数据挂载”。

它的作用是,将宿主机上的数据与容器内的数据形成映射,实现数据的共享或者数据的保存;当删除容器的时候,在宿主机上仍然能够保留文件目录,这就是Volume,数据卷。

数据挂载的实现方式

docker实现数据挂载的方式本质上分为两种:

  1. 通过宿主机绝对路径挂载
  2. 通过卷标映射挂载(又包括匿名挂载与具名挂载)

宿主机路径挂载在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。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter

    这篇文章主要介绍了在wsl-ubuntu中如何通过 docker 启动 gpu-jupyter,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Docker部署Go项目发布镜像到仓库

    Docker部署Go项目发布镜像到仓库

    这篇文章主要为大家介绍了Docker部署Go项目发布镜像到仓库示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • docker安装openjdk并运行jar包的操作方法

    docker安装openjdk并运行jar包的操作方法

    这篇文章主要介绍了docker安装openjdk并运行jar包的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • docker-compose部署Yapi的方法

    docker-compose部署Yapi的方法

    这篇文章主要介绍了docker-compose部署Yapi,需要的朋友可以参考下
    2022-04-04
  • Ubuntu20.04上安装docker步骤及docker使用方法

    Ubuntu20.04上安装docker步骤及docker使用方法

    Docker是一个可以简化容器中应用程序进程管理过程的应用程序,容器允许你在资源隔离的进程中运行应用程序,这篇文章主要介绍了Ubuntu20.04上安装docker步骤及docker使用的相关资料,需要的朋友可以参考下
    2026-04-04
  • Docker没有启动环境变量的问题解决

    Docker没有启动环境变量的问题解决

    在使用Docker容器时,有时候我们会遇到一个问题,就是在容器中没有启动环境变量,本文主要介绍了Docker没有启动环境变量的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 如何使用docker compose安装gitlab

    如何使用docker compose安装gitlab

    使用Docker Compose安装GitLab是一个相对简单的过程,但需要按照一定的步骤来确保一切设置正确,这篇文章主要介绍了使用docker compose安装gitlab,需要的朋友可以参考下
    2024-12-12
  • docker run本地镜像tar用法详解

    docker run本地镜像tar用法详解

    Docker中,使用docker load加载本地.tar镜像,再通过docker run运行,注意名称可能不同,需用docker images确认,确保文件完整及标签正确
    2025-09-09
  • Docker 私有仓库恢复实例详解

    Docker 私有仓库恢复实例详解

    这篇文章主要介绍了Docker 私有仓库恢复实例详解的相关资料,这里提供了详细的实现步骤,及注意事项,完成docker私有仓库的恢复,需要的朋友可以参考下
    2016-11-11
  • 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    本篇文章主要介绍了详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论