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

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

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思想压缩)。