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架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

每天认识几个maven依赖(ActiveMQ+activemq-jaxb+activesoap+activespace+adarwin)

八、ActiveMQ 1、是什么? ActiveMQ 是一个开源的消息中间件(Message Broker),由 Apache 软件基金会开发和维护。它实现了 Java 消息服务(Java Message Service, JMS)规范,并支持多种消息传递协议,包括 AMQP、MQTT 和 OpenWire 等。 2、有什么用? 可靠性:ActiveMQ 提供了消息持久性和事务支持,确保消

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

SpringMVC入参绑定特别注意

1.直接在controller中定义一个变量,但是此种传输方式有一个限制就是参数名和请求中的参数名必须保持一致,否则失效。 @RequestMapping("test2")@ResponseBodypublic DBHackResponse<UserInfoVo> test2(String id , String name){UserInfoVo userInfoVo = new UserInf

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

docker-compose安装和简单使用

本文介绍docker-compose的安装和使用 新版docker已经默认安装了docker-compose 可以使用docker-compose -v 查看docker-compose版本 如果没有的话可以使用以下命令直接安装 sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-c

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储,载入镜像和删除镜像 1.4 Doecker容器操作 1.4