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作为整个项目的入口…

【MySQL】MySQL主要知识点目录整理

一、MySQL基本概念 作者相关文章链接: 1、【MySQL】数据库概述-CSDN博客 2、【MySQL】数据类型-CSDN博客 数据、表、数据库 数据:描述事物的符号记录,如数字、文字、图形等。表:将不同的记录组织在一起,用于存储具…

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

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软件如何…

【Python】no module named distutils问题怎么解决

【背景】 安装numpy没问题,启动项目却报numpy少distutils。 升级PIP,重装numpy也不行。 【分析】 看distutils这个名字,似乎是什么通用模块,可能不一定是numpy的问题。 【解决方案】 通过安装如下模块解决 pip install setu…

langchain学习(十三)

一、将其他chain的输入作为新chain的输出,三种方式 1、采用连接符"|",推荐 2、采用lamba表达式输入 3、采用pipe方法 from langchain_community.chat_models import ChatOllama from langchain_core.output_parsers import StrOutputParse…

代码随想录算法训练营第十八天(py)| 二叉树 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654.最大二叉树 力扣链接 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组…

React 为什么使用map来渲染列表 而不是其他循环方法

1. 声明式与函数式编程 React强调声明式编程,这意味着你只需要关心代码“做什么”,而不是“怎么做”。.map()函数是一种高阶函数,它属于函数式编程范畴,能够返回一个新数组,这非常适合用于生成组件列表。 使用.map()…

自适应容积卡尔曼滤波|(自适应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 与开发产⽣争执怎么办(⾼频考题) 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&…

快速生成sql

增加快速开发速度

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 ,它在后端采用的是【…