docker系列10:Dockerfile挂载容器卷

 传送门

docker系列1:docker安装

docker系列2:阿里云镜像加速器

 docker系列3:docker镜像基本命令

docker系列4:docker容器基本命令

docker系列5:docker安装nginx

docker系列6:docker安装redis

docker系列7:docker安装ES

docker系列8:容器卷挂载(上)

docker系列9:容器卷挂载(下)

容器卷挂载简单回顾

通过前面2节初步接触了容器卷,也从整体了解容器卷!

 docker系列8:容器卷挂载(上)

docker系列9:容器卷挂载(下)

这里还是有必要再回顾一下:

什么是容器卷?

从传统的磁盘挂载说起类比到容器卷挂载,所谓的容器卷就是为解决容器数据持久化而将外部设备(目录)挂载到容器(目录)的技术!

解决了什么问题?

这样既解决了容器应用在有状态的应用下的场景,也达到了容器数据共享的目的。所谓的有状态应用典型场景就是docker运行Mysql,里面的数据需要进行持久化,不能因为容器停止而消失

图片来自:https://docs.docker.com/storage/bind-mounts/
容器卷管理

容器卷的管理也可以像平时开发那样(CRUD-boy)归纳为C-创建、R-读取、D-删除:

C-创建:

# my-vol为卷名称
docker volume create my-vol

 R-读取:

docker volume ls

 D-删除

docker volume rm my-vol

 当然还有其它的一些参数,可以查看docker volume

具名与匿名挂载

通过上面的卷创建命令:docker volume create 卷名称 创建出来的卷进行手动挂载,这种称为具名挂载!反之通过容器启动命令-v挂载的称为匿名挂载:

docker  run  -v ./content:/content -w /content -i -t  ubuntu pwd

比如下面命令查看的卷列表:

容器卷的读写控制
回顾卷挂载的命令:-v 宿主机路径:容器内路径:权限
  • 在容器内路径后面,接着指定权限
  • r-代表读,w-代表写,ro-代表只读(read only),rw-代表可读可写
关于-v与--mount的选择 

卷挂载除了通过-v来使用以外还可以通过--mount方式:

docker run -d \-it \--name devtest \--mount type=bind,source="$(pwd)"/target,target=/app \nginx:latest

关于-v与--mount的选择可以参考Choose the -v or --mount flag 

官方推荐的是用mount方式:

New users should use the --mount syntax. Experienced users may be more familiar with the -v or --volume syntax, but are encouraged to use --mount, because research has shown it to be easier to use. 

手动挂载的烦恼

无论是通过运行容器自动挂载容器卷,还是通过手动管理的方式先创建好容器卷再进行绑定,可以预料的是这样的方式都不是一种理想方式:需要运行镜像在容器启动之后再手动挂载,如果容器实例一多,管理起来在操作上也是件麻烦事情(容器的编排先不去考虑探讨),这是原因这一。

再一个原因是,理论上一般镜像的提供者与使用者并不是同一个人(或团队),如果镜像的提供者在发布的镜像里面要指定卷挂载,或者说要规定一些默认的目录,肯定是不能用上面的方式来设定。

通过Dockerfile文件挂载容器卷

所以Docker提供了专门的方式,让镜像提供者在编写Dockerfile文件时指定卷挂载:

VOLUME ["/data"]

Dockerfile卷挂载命令

命令的具体详情可以查看VOLUME,该命令的表示 :创建一个具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。

其中VOLUME命令后参数表示卷挂载的目录,其中["/data"]就是一个普通的json数组,表示可以挂载多个目录;也可以配置多个字符串,VOLUME /var/log or VOLUME /var/log /var/db。

一个例子

来看一个官方给的例子,Dockerfile文件如下:

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

 首先在Linux机器上创建一个文件,比如名字为Dockerfile,该命令的大概意思就是:

  • FROM表示,从标准的ubuntu镜像为准
  • RUN表示执行shell命令,创建一个文件目录/myvol
  • 执行命令,打印"hello world"字符串到greeting文件
  • 最后VOLUME,就是这节要讲到卷挂载!
touch Dockerfile

将上面的命令粘贴到该文件中,如下:

 然后运行该Dockerfile文件,进行镜像构建:

docker build -t getting-started .

执行之后如果构建成功应该会显示如下结果: 

 既然是构建了镜像那就先查看一下在没有在镜像列表里面:docker images

 接着运行一下这个自己构建的镜像试试:

 会发现通过编写Dockerfile构建的镜像,在启动时自动的挂载了对应的卷。可以在宿主机上面查看该目录文件及容器的卷挂载信息:docker inspect 容器ID

这样对应找到该卷的名称之后,再用:docker volume ls里面查询一下,就可以看到卷的信息了,然后再查看该卷信息即可:

 宿主机看下存储的目录内容,跟容器里面一致,说明卷也挂载成功!

更多Dockerfile介绍

关于Dockerfile的更多介绍,可以看看这里

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言基础——数组

{\▁/} ( / 。\ ) / ⊃💔\⊃ 为什么我那么努力还是得不到那么多赞 ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言…

Java入门-java的集合框架

集合概念 集合,有时也称作容器(Container), 是对象的持有者,它们可以有助于高效访问的方式存储的组织对象。以生活中的案例为例: 集合就像装衣服的柜子,衣服就是集合中的元素。 集合框架图 Collection中每次操作的都是一个对象&a…

大事件项目实战

初始化 创建项目 新建api_server文件夹为项目根目录,并在项目中运行如下的命令,初始化管理配置文件: npm init -y 运行如下的命令,安装特定版本的express: npm i express4.17.1 在项目根目录中新建app.js作为整个项目的入口…

产品经理-交互说明撰写(八)

1. 交互说明 交互说明可以看做是交互设计师或者产品经理输出的最核心的”产品“交互说明面向的”用户“是下游的同事 ⇒ UI设计师、开发工程师、测试工程师 2. 基本交互形式 2.1 页面交互 2.2 元素控件交互 3. 交互说明主要包括以下3个维度 3.1 页面流程(页面之…

医学图像分割--U-net变种

参考:医学图像分割综述:U-Net系列_医学图像 实例分割-CSDN博客 2D Unet 收缩路径:每个块包含两个连续的3 3卷积,后面是一个ReLU激活函数和最大池化层(下采样)扩展路径:该路径包括一个2 2转置卷积层(上采…

推荐丨免费一年期SSL证书在哪里可以申请到?

当然,申请HTTPS证书的流程可以简化为三个主要步骤,以便理解: 第一步:选择证书类型和认证机构 1. 确定证书类型:首先,你需要确定适合你网站的SSL证书类型。常见的有三种: - 域名验证型&#xff0…

什么是HTTP代理?适用于哪些场景?

HTTP代理是一种网络代理服务器,它主要用于处理HTTP协议的请求和响应。HTTP代理充当客户端(如浏览器)和目标服务器之间的中介,允许客户端通过代理服务器来发送HTTP请求,并接收来自服务器的响应。HTTP代理可以分为正向代…

时空AI软件:地理信息与遥感领域的智慧引擎

在地理信息与遥感技术的广阔疆域,时空AI软件如同一颗璀璨新星,将时空信息与智能深度融合,驱动着地理信息分析、决策支持、环境监测、城市规划等领域的深刻变革。本文将深入剖析其技术核心、应用实例、未来趋势,探索时空AI软件如何…

自适应容积卡尔曼滤波|(自适应CKF)的MATLAB源代码

介绍 容积卡尔曼滤波在理论上拥有比UKF更高的精度和稳定性,本自适应算法通过对观测残差的计算,在观测协方差R不准确或无法获得时,对R进行调节,以起到降低估计误差的作用。 模型 使用的是三维的非线性模型,经过适当修…

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点:模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

数据集004:跌倒检测数据集 (含数据集下载链接)

数据集简介: 该数据集为跌倒检测数据集,属于imageclassify任务,分为fall和nofall两大类,累计共1000张图片,均为人工标注 xml格式,可用于yolo训练。 数据集链接:跌倒检测数据集(1000…

【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理

目录 一、软件测试的⽣命周期 二、BUG 2.1 bug的概念 2.2 描述bug的要素 2.3 bug级别 2.4 bug的⽣命周期 💡2.5 与开发产⽣争执怎么办(⾼频考题) 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…

Python筑基之旅专栏(导航)

目录 一、Python筑基之旅专栏博文清单及链接 二、推荐阅读 一、Python筑基之旅专栏博文清单及链接 01、溯源及发展 02、变量和数据类型 03、搭建Python开发环境及库 04、两个重要函数/列表/元组 05、字符串(一) 06、字符串(二) 07、字符串(三) 08、字典 09、集合 10…

Taro React组件开发 —— RuiVerifySlider 行为验证码之滑动拼图

1. 效果预览 2. 使用场景 账号登录,比如验证码发送,防止无限调用发送接口,所以在发送之前,需要行为验证! 3. 插件选择 AJ-Captcha行为验证码文档AJ-Captcha行为验证码代码仓库为什么要选用【AJ-Captcha行为验证码】呢?因为我们管理后台使用的是 pigx ,它在后端采用的是【…

HX-100调频广播覆盖专用天线

HX-100全向天线是北京恒星科通科技发展有限公司自主研发的一款隧道专用宽带调频发射天线,采用圆盘形结构、振子采用铝合金材料制造,具有增益高、功率容量大、工作频带宽、安装方便、防腐防潮、抗风性能好等特点,特别适合隧道调频广播覆盖、地…

【制作100个unity游戏之26】unity2d横版卷轴动作类游13(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言存储点灯光后处理存储位置信息存储更多数据存储场景信息持久化存储数据引入Unity 的可序列化字典类调用 游戏结束源码完结 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各…

拆分字段——kettle开发11

一、拆分字段 1、拆分字段就是将一个字段拆分为多个字段,原字段就不存在数据流之中,拆分的规则是按照一个的分隔符进行拆分。具体语法如下图所示。 2、实操将EXCEL中name拆分为firstname 和 lastname,具体转换包括EXCEL输入、拆分字段、EXCEL输出。 EXC…

《软件方法(下)》8.3.4.5和《设计模式》中用语的区别

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.4 类关系再整理 有了前面的知识,我们需要再整理一下类的关系。用类图表示类的关系如图8-134。 图8-134 “类的…

如何进行硬件监控

在复杂的技术环境中,人们很容易忘记硬件资源的重要性,IT 行业的爆炸性增长使得监控各种硬件资源变得越来越重要,在处理运行关键业务应用程序并在日常基础上启用全局操作的大型网络时,保护这些网络环境的基本构建块至关重要。硬件监…

苗情灾情监控系统—提高农业生产效率

TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备,通过实时监测和数据分析,帮助农民及时了解作物生长情况,采取相应的管理措施,提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…