Docker:认识Bind Mounts绑定卷

2024-06-12 10:52
文章标签 docker 认识 绑定 bind mounts

本文主要是介绍Docker:认识Bind Mounts绑定卷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 绑定卷bind mount
    • 创建卷
    • 操作案例
      • 使用mount创建绑定卷
  • 使用场景
  • 管理卷和绑定卷的区别?

绑定卷bind mount

-v和-mount都可以进行绑定卷的创建

创建卷

功能:完成卷映射

语法:

docker run -v name:directory[:options]...

参数:

第一个参数表示的是宿主机目录,这个和管理卷是两个概念,第二个参数是卷映射到容器的目录,第三个参数表示的是选项,比如说有ro表示的就是read only

样例:

root@VM-24-7-ubuntu:~# docker run -d -it --name devtest -v "$(pwd)"/target:/app nginx
e387ba58e12c80be33a814e0998a815da1ed4e17623954d5cad2a2c44dfa0d21

操作案例

使用mount创建绑定卷

创建一个nginx容器,并且把宿主机的/webapp1目录挂载到容器的/usr/share/nginx/html上

root@VM-24-7-ubuntu:~# docker run -d -p 80:80 --name bind1 --mount type=bind,source=/data/myworkdir/fs/webapp1,target=/usr/share/nginx/html nginx
11a8ccfec2692842f4f44ffa6b3bccc6c05df4e0691bf62583b9ad9491582563

查看挂载信息

docker inspect bind1

进入到容器的终端,查看挂载点目录

root@VM-24-7-ubuntu:~# docker exec -it bind1 ls /usr/share/nginx/html
root@VM-24-7-ubuntu:~# cd /data/myworkdir/fs/webapp1
root@VM-24-7-ubuntu:/data/myworkdir/fs/webapp1# ls

由此可以看出,这两个内部都是没有内容的,这也是bind mount模式和volume模式最大的不同点

在宿主机添加index.html

root@VM-24-7-ubuntu:/data/myworkdir/fs/webapp1# echo hello bind mount > index.html
root@VM-24-7-ubuntu:/data/myworkdir/fs/webapp1# cat index.html 
hello bind mount

然后进行查看nginx:

在这里插入图片描述

删除容器

root@VM-24-7-ubuntu:/data/myworkdir/fs/webapp1# docker rm -f bind1
bind1
root@VM-24-7-ubuntu:/data/myworkdir/fs/webapp1# ls
index.html

此时内容依旧存在

使用场景

什么时候用volume,什么时候用bind,tmpfs?

volume:这是Docker宿主机文件系统的一部分,用于不需要规划具体目录的场景

bind:bind amount完全是依赖于主机的目录结构和操作系统,用于目录需要提前进行规划的场景,比如MySQL中的目录需要一个空间比较大的,其他服务有不占用的时候,用volume就不合适

tmpfs:用于敏感文件存储,文件不想存储在宿主机和容器的可写层之间

存储卷的意义?

  1. 跨主机使用:Docker存储卷式使用其所在的宿主机上的本地文件系统目录,也就是说宿主机上有一块片,这块磁盘没有共享给其他的Docker主机,那么工期在这个宿主机上停止或者删除,是可以重新进行创建的,但是不能调度到其他的主机上,这就是Docker没有解决的问题,所以Docker存储卷默认就是Docker所在的本地
  2. 启动参数位置:容器有一个问题,就是启动的选项比较多,如果下次再进行启动时候,可能会导致启动的参数遗忘,因此就需要有一个文件用来保存容器的启动,这就是容器编排工具的使用,一般情况下,可以使用命令来进行Docker的启动,但是也可以使用文件来进行读取,也就是说是借助读取文件来进行启动,读取一些比如说有存储卷这样的信息,但是也只是操作一个容器,如果有太多的容器需要进行操作,那么此时就需要用到专门的容器编排工具

管理卷和绑定卷的区别?

Docker提供了两种主要的方式来在容器和宿主机之间持久化和共享数据:管理卷(Docker Managed Volumes)和绑定挂载(Bind Mounts)。下面是两者之间的主要区别:

  1. 管理方式

    • 管理卷(Docker Managed Volumes):是由Docker直接管理和维护的存储区域。这些卷存储在宿主机的一个特定目录下(通常是 /var/lib/docker/volumes),但对用户来说是抽象化的。用户不需要关心宿主机上的确切路径,Docker会自动处理卷的创建、挂载和删除。这为数据提供了更好的隔离性和可移植性,因为卷不依赖于宿主机的具体文件系统布局。

    • 绑定挂载(Bind Mounts):直接将宿主机上的一个目录或文件挂载到容器内的一个目录。这意味着你需要明确指定宿主机上的源目录。这种类型的挂载让用户可以直接控制数据的存放位置,并且可以利用宿主机的文件系统特性,比如SELinux标签或访问控制。但这也意味着数据管理的责任在于用户,且可能与宿主机的目录结构和权限紧密耦合。

  2. 数据生命周期

    • 管理卷独立于任何单一容器的生命周期存在,可以在多个容器间共享,即使这些容器被删除,卷中的数据仍然会被保留,除非显式地删除卷。
    • 绑定挂载的生命周期通常与宿主机上的目录或文件绑定,如果删除了宿主机上的源目录,那么数据也会丢失。
  3. 便携性和可迁移性

    • 管理卷更便于在不同宿主机间迁移容器,因为它们是Docker管理的标准化实体,可以在Docker网络中轻松复制和移动。
    • 绑定挂载在跨宿主机迁移时可能需要重新配置,因为它们直接引用宿主机的特定目录。
  4. 功能特性

    • 管理卷支持额外的功能,如备份、恢复、加密以及在容器间共享,而不影响宿主机的文件系统。
    • 绑定挂载则较为基础,主要是实现简单的文件共享,但可能在某些特定场景下(如需要高性能I/O或特定权限设置)更为灵活或高效。

总的来说,选择使用管理卷还是绑定挂载,取决于你的具体需求:是否需要高度的数据控制和性能,或者更倾向于数据的隔离性、可移植性和易于管理性。在开发环境中,绑定挂载可能因为其灵活性而更受欢迎;而在生产环境中,管理卷因其提供的高级特性和数据管理便利性而成为优选。

这篇关于Docker:认识Bind Mounts绑定卷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054016

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp