Docker绑定挂载使用手册

2024-08-26 09:04

本文主要是介绍Docker绑定挂载使用手册,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

目标

官方文档

绑定挂挂载(Bind mounts)

简介

基本创建方法

控制读写权限(默认有读写权限)

为什么绑定挂载不适合做数据库持久化

为什么绑定挂载更适合做热部署

临时挂载(tmpfs mounts)

简介

基本创建方法

验证临时挂载的生命周期

最佳实践

数据卷&绑定挂载&临时挂载的区别


目标

        掌握绑定挂载、临时挂载的常用命令。理解绑定挂载、数据卷、临时挂载之间的区别。


官方文档

Bind mounts


绑定挂挂载(Bind mounts)

简介

官方定义

Bind mounts have been around since the early days of Docker. Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker's storage directory on the host machine, and Docker manages that directory's contents.

The file or directory does not need to exist on the Docker host already. It is created on demand if it does not yet exist. Bind mounts are very performant, but they rely on the host machine's filesystem having a specific directory structure available. If you are developing new Docker applications, consider using named volumes instead. You can't use Docker CLI commands to directly manage bind mounts.

官方示意图 

翻译

  1. 与数据卷相比,绑定挂在功能有限。
  2. 绑定挂载要用主机上的绝对目录引用,如果目录不存在,则会按需求创建。而使用数据卷时,不需要引用主机上的绝对目录,Docker会创建目录并管理这个目录中的内容。
  3. 绑定挂载性能高,但推荐优先考虑使用数据卷,因为绑定挂载依赖于主机文件系统中存在特定的目录结构(官方的示意图很好地体现了这一点)。
  4. Docker命令不能直接管理绑定挂载。

基本创建方法

方法一:用mount参数创建。前提条件:引用的主机目录必须存在,否则报错。

#source:主机目录
#target:容器目录
#type:挂载类型为绑定
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html nginx

方法二:用v参数创建。如果主机目录不存在则会自动创建目录。

#-v前面的目录表示主机目录,如果这个目录不存在则会自动创建。
#-v后面的目录表示容器目录
docker run -d -p 5601:80 --name nginx2 -v /opt/data/html:/usr/share/nginx/html nginx


控制读写权限(默认有读写权限)

方法一:用mount参数创建。

#readonly:创建只读权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly nginx#readonly=true:创建只读权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly=true nginx#readonly=false:创建读写权限
docker run -d -p 8848:80 --name nginx --mount type=bind,source=/opt/data/,target=/usr/share/nginx/html,readonly=false nginx

方法二:用v参数创建。

#rw:创建读写权限
docker run -d -p 8848:80 --name nginx -v /opt/data/html:/usr/share/nginx/html:rw nginx
#ro:创建只读权限
docker run -d -p 8848:80 --name nginx -v /opt/data/html:/usr/share/nginx/html:ro nginx

验证:进入容器内部,尝试修改被映射的目录中的内容。发现修改失败,说明只读挂载生效。


为什么绑定挂载不适合做数据库持久化

  1. 绑定挂载不支持跨容器共享,而数据卷支持。
  2. 绑定挂载直接暴露宿主机文件系统,使得容器和宿主机之间的隔离性降低,可能导致数据泄漏或安全隐患。数据卷更好地支持容器的隔离性和数据的独立性。容器与宿主机的文件系统的隔离,使得数据管理更为简单和安全。
  3. 绑定挂载依赖主机文件系统,需要关注主机文件的权限、存储空间等问题。
  4. 数据卷提供了更为丰富的数据管理功能,如自动备份、恢复、数据迁移等,这些功能在绑定挂载中是无法实现的。

为什么绑定挂载更适合做热部署

        两者都可以实现热部署,但是:

  1. 绑定挂载将主机目录直接映射到容器的文件中,使得修改主机文件可以实时更新到容器文件中。
  2. 数据卷侧重安全和持久化,实时同步不如绑定挂载优秀。数据卷中的文件进行修改甚至可能需要手动操作来确保变更被及时应用到容器中。

临时挂载(tmpfs mounts)

简介

        官方将没有将临时挂载归为绑定挂载之类,而是将其与绑定挂载并列。虽然他们之间的命令只在type值上有所区别,但是数据存储方式完全不同,这在官方文档和示意图中都能有明确的说明。

官方文档

As opposed to volumes and bind mounts, a tmpfs mount is temporary, and only persisted in the host memory. When the container stops, the tmpfs mount is removed, and files written there won't be persisted.

翻译
        与卷和绑定挂载不同,tmpfs挂载是临时的,只持久化在主机内存中。当容器停止时,tmpfs挂载将被删除,写入其中的文件将不会被持久化。 


基本创建方法

#这三条的命令的区别在于指定容器目录使用的参数不同,实际上它们是等价的。
docker run -d -p 8848:80 --name nginx --mount type=tmpfs,destination=/usr/share/nginx/html nginx
docker run -d -p 5601:80 --name nginx2 --mount type=tmpfs,dst=/usr/share/nginx/html nginx
docker run -d -p 3306:80 --name nginx3 --mount type=tmpfs,target=/usr/share/nginx/html nginx


验证临时挂载的生命周期

第一步:进入Nginx容器内部,修改Nginx的主页,并访问主页。

docker exec -it nginx2 /bin/bash
cd /usr/share/nginx/html/
echo '<h1>111</h1>' > index.html

第二步:重启容器,再次访问Nginx首页,发现首页已经没有了。


最佳实践

注意

  1. 临时挂载的数据存储在内存中,如果容器创建期间没有给设定内存阈值,则该容器会有耗尽服务器内存的风险。所以我们如果使用临时挂载,最好在创建容器时设定容器内存阈值和挂载内存阈值。
  2. 容器内存包含进程、各种文件系统、挂载内存。比如设定容器内存为100兆,挂载内存20兆,则容器中其他消耗内存的操作可用内存是80兆。

案例

        给Nginx容器的首页目录设定20兆内存阈值,容器总内存设定100兆内存阈值。

查看容器内存使用情况

查看挂载内存

#进入容器后执行查看内存的命令
df -h

        如图所示,挂载内存使用了4K。


数据卷&绑定挂载&临时挂载的区别

特性/方式绑定挂载(Bind Mount)数据卷(Volume)临时挂载(Tmpfs Mount)
适用场景开发热部署、日志文件系统。侧重开发和测试阶段。数据库持久化、MQ中间件。侧重生产阶段。铭感数据比如密码、认证数据、密钥,避免写入到磁盘中
数据存储位置宿主机指定目录Docker 管理的卷位置内存(RAM)
数据持久化依赖宿主机目录数据卷的具体存储路径由Docker决定,通常位于宿主机的Docker文件系统中(如 /var/lib/docker/volumes/),所以不依赖于宿主机的直接目录结构。数据不持久化,容器停止后丢失。
跨容器共享不支持(除非使用同一宿主机目录)支持跨容器共享不支持

这篇关于Docker绑定挂载使用手册的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

更改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集群

如何用Docker运行Django项目

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

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

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实例云服务是新一代开箱即用、体