Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker实践之07-数据管理

Docker实践之07-数据管理

作者头像
编程随笔
发布于 2022-09-09 00:26:37
发布于 2022-09-09 00:26:37
39200
代码可运行
举报
文章被收录于专栏:后端开发随笔后端开发随笔
运行总次数:0
代码可运行

目录

一.数据卷概述

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

注意: 数据卷的使用,类似于Linux下对目录或文件进行mount,镜像中被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。

二.创建数据卷

使用命令docker volume create创建数据卷,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume create test-vol
test-vol

三.查看数据卷

使用命令docker volume ls查看所有的数据卷,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume ls
DRIVER              VOLUME NAME
local               my-vol

在主机里使用命令docker volume inspect可以查看指定数据卷的详细信息,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume inspect test-vol
[
    {
        "CreatedAt": "2018-05-03T16:42:05+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/test-vol/_data",
        "Name": "test-vol",
        "Options": {},
        "Scope": "local"
    }
]

使用的docker volume create test-vol创建的数据卷默认挂载目录为“/var/lib/docker/volumes/test-vol/_data”。 注意: 数据卷的默认主机目录是:/var/lib/docker/volumes,但是在Mac下使用Docker Desktop时是不存在目录“/var/lib/docker/volumes”的,因为Mac上启动Docker本质上是启动了一个虚拟机,所以并不会在Mac主机本身存在数据卷的默认挂载目录,参考:Mac使用docker时,卷默认挂载路径/var/lib/docker/volumes不存在问题

四.挂载数据卷

所谓"挂载数据卷"是指将数据卷加载到容器的指定目录,在用docker run命令的时候,可以将数据卷挂载到容器里。在一次docker run中可以挂载多个数据卷。挂载数据卷可以使用2个选项:--mount或者--volume,推荐使用--mount。 如下创建一个名为web的容器,并加载一个数据卷到容器的/usr/local/tomcat/webapps目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run -d -P --name web --mount source=my-vol,target=/usr/local/tomcat/webapps tomcat

挂在数据卷之后,来看一下如下信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume inspect my-vol
[
    {
        "CreatedAt": "2018-05-03T17:02:43+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo ls /var/lib/docker/volumes/my-vol/_data -al
total 28
drwxr-x---  7 root root 4096 May  3 17:02 .
drwxr-xr-x  3 root root 4096 May  3 16:34 ..
drwxr-x--- 14 root root 4096 May  3 16:58 docs
drwxr-x---  6 root root 4096 May  3 16:58 examples
drwxr-x---  5 root root 4096 May  3 16:58 host-manager
drwxr-x---  5 root root 4096 May  3 16:58 manager
drwxr-x---  3 root root 4096 May  3 17:04 ROOT

将数据卷加载到容器的指定目录之后,在数据卷的挂载点目录下就可以看到容器的对应目录下的内容。而且,此时对数据卷挂载目录下内容的修改会同步到容器的对应目录下。 显然,上面看到的数据卷中的信息正是容器的/usr/local/tomcat/webapps目录下的内容。 现在来修改/var/lib/docker/volumes/my-vol/_data/ROOT/index.jsp文件,可以看到修改的内容马上就生效。 现在停止容器,查看/var/lib/docker/volumes/my-vol/_data内容发现数据依然存在,删除容器之后再查看,数据依然存在。

五.删除数据卷

可以使用命令docker volume rm删除数据卷,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume rm my-vol
my-vol

数据卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷。 如果需要在删除容器的同时移除对数据卷的引用,可以在删除容器的时候使用"-v"选项,即:docker rm -v注意: 在删除容器时使用"-v"选项并不会删除该容器使用的数据卷,仅仅是删除容器对数据卷的引用关系;因为容器删除之后,如果未使用"-v"选项移除对应的数据卷,那么再去删除数据卷时将会提示数据卷正在容器中被使用,不允许删除。

无主的数据卷可能会占据很多空间,需要使用命令docker volume prune进行清理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
my-vol
test-vol

Total reclaimed space: 4.642MB

六.挂载主机目录或文件

1.挂载一个主机目录作为数据卷

使用--mount选项可以指定一个本地主机的目录挂载到容器中去,此时需要指定type=bind,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run -d -P --name web --mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps tomcat

此时在主机目录上做的修改,在容器中就能够及时地被感知到.

Docker挂载主机目录的默认权限是读写,也可以通过增加readonly指定为只读,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run -d -P --name web --mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps,readonly tomcat

2.挂载一个主机文件作为数据卷

--mount选项也可以从主机挂载单个文件到容器中,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker run --rm -it --mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history ubuntu:16.04 bash

这样就可以记录在容器输入过的命令了。

七.挂载数据卷与主机目录/文件的比较

相同点:

  1. 挂载数据卷或者主机目录/文件都是容器进行数据管理的方式
  2. 都可以通过"--mount"选项进行挂载

不同点:

  1. 挂载数据卷时不需要明确指定type参数,只需要指定source和target即可,例如:--mount source=my-vol,target=/usr/local/tomcat/webapps
  2. 挂载主机目录/文件时必须明确指定type参数为bind,例如:--mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps;另外,挂载的主机目录默认权限是读写,也可以通过增加readonly指定为只读:--mount type=bind,source=/home/test/webapps,target=/usr/local/tomcat/webapps,readonly
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习分类模型决策边界,MLxtend轻松绘制!
https://rasbt.github.io/mlxtend/user_guide/classifier/LogisticRegression/
皮大大
2024/07/12
4020
贷款违约预测-Task5 模型融合
Tip:此部分为零基础入门金融风控的 Task5 模型融合部分,欢迎大家后续多多交流。 赛题:零基础入门数据挖掘 - 零基础入门金融风控之贷款违约预测 项目地址:https://github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl
致Great
2020/10/10
9720
贷款违约预测-Task5 模型融合
无比强大的机器学习扩展包MLxtend
mlxtend(machine learning extensions,机器学习扩展)是一个用于日常数据分析、机器学习建模的有用Python库。
皮大大
2024/06/06
2060
机器学习集成学习与模型融合!
对比过kaggle比赛上面的top10的模型,除了深度学习以外的模型基本上都是集成学习的产物。集成学习可谓是上分大杀器,今天就跟大家分享在Kaggle或者阿里天池上面大杀四方的数据科学比赛利器---集成学习。
Datawhale
2020/08/20
1.1K0
机器学习集成学习与模型融合!
机器学习扩展包MLXtend绘制多种图形
mlxtend(machine learning extensions,机器学习扩展)是一个用于日常数据分析、机器学习建模的有用Python库。mlxtend可以用作模型的可解释性,包括统计评估、数据模式、图像提取等。
皮大大
2024/06/13
2870
「超级干货大放送」机器学习十二种经典模型实例
目录 实例一:线性回归波士顿房价 实例二:KNN实现电影分类 实例三:基于线性回归预测波士顿房价 ​ 实例四:sklearn完成逻辑回归鸢尾花分类 实例五:支持向量机完成逻辑回归鸢尾花分类 实例六:使用决策树实现鸢尾花分类 实例七:使用随机森林实现鸢尾花分类 实例八:使用朴素贝叶斯进行鸢尾花分类 实例九:使用Kmeans来进行鸢尾花分类 实例十:K最近邻的使用方式 实例十一:kmeans的其他展示方式 实例十二:Kmeans实现鸢尾花聚类 ---- 实例一:线性回归波士顿房价 ''' 实例一:线性回归
荣仔_最靓的仔
2021/02/02
9440
「超级干货大放送」机器学习十二种经典模型实例
stacking的实现-mxtend库「建议收藏」
环境情况: ################################################################## python 3.6 mlxtend 0.13.0 scikit-learn 0.19.0 ##################################################################
全栈程序员站长
2022/07/25
1.3K0
stacking的实现-mxtend库「建议收藏」
Python数据开发代码示例
随着人工智能和大数据的快速发展,机器学习和数据科学成为了炙手可热的领域。Python作为一种功能强大且易于学习的编程语言,成为了开发机器学习和数据科学应用的首选语言。本文将介绍如何在Python中进行机器学习和数据科学开发,并提供代码示例。
疯狂的KK
2023/08/08
2990
Python数据开发代码示例
数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}
 题目出自阿里天池赛题链接:零基础入门数据挖掘 - 二手车交易价格预测-天池大赛-阿里云天池
汀丶人工智能
2022/12/21
6460
数据挖掘机器学习[五]---汽车交易价格预测详细版本{模型融合(Stacking、Blending、Bagging和Boosting)}
机器学习 pipeline 可视化
作为任何数据科学项目的一部分,数据可视化在理解更多可用数据和识别任何主要模式方面发挥着重要作用。
McGL
2020/10/30
1.2K0
机器学习 pipeline 可视化
高斯朴素贝叶斯分类的原理解释和手写代码实现
Gaussian Naive Bayes (GNB) 是一种基于概率方法和高斯分布的机器学习的分类技术。朴素贝叶斯假设每个参数(也称为特征或预测变量)具有预测输出变量的独立能力。所有参数的预测组合是最终预测,它返回因变量被分类到每个组中的概率,最后的分类被分配给概率较高的分组(类)。
deephub
2022/04/14
8440
高斯朴素贝叶斯分类的原理解释和手写代码实现
强大的 Scikit-learn 可视化让模型说话
使用 utils.discovery.all_displays 查找可用的 API。
数据STUDIO
2024/05/10
2450
强大的 Scikit-learn 可视化让模型说话
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
K折交叉验证: KFold 将所有的样例划分为 k 个组,称为折叠 (fold) (如果 k = n, 这等价于 Leave One Out(留一) 策略),都具有相同的大小(如果可能)。预测函数学习时使用 k - 1 个折叠中的数据,最后一个剩下的折叠会用于测试。
汀丶人工智能
2023/03/28
1.6K0
B.机器学习实战系列[一]:工业蒸汽量预测(最新版本下篇)含特征优化模型融合等
理解 SVM 的核函数的实际作用
在 SVM 中引入核函数,用它处理非线性数据,即:将数据映射到高维空间中,使数据在其中变为线性的,然后应用一个简单的线性 SVM。听起来很复杂,在某种程度上确实如此。然而,尽管理解核函数的工作原理可能很困难,但它所要实现的目标很容易把握。
老齐
2022/12/09
1.5K0
理解 SVM 的核函数的实际作用
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(下篇)xgboots/lightgbm/Catboost等模型--模型融合:stacking、blend
通过组合多个学习器来完成学习任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习的泛化能力一般比单一分类器要好。
汀丶人工智能
2023/05/17
4.1K0
数据挖掘实践(金融风控):金融风控之贷款违约预测挑战赛(下篇)xgboots/lightgbm/Catboost等模型--模型融合:stacking、blend
牛逼了!Scikit-learn 0.22新版本发布,新功能更加方便
作者:xiaoyu,数据爱好者 Scikit-learn此次发布的版本为0.22。我浏览了一下,此次版本除了修复之前出现的一些bug,还更新了很多新功能,不得不说更加好用了。下面我把我了解到主要的几个最新功能和大家分享一下。
Python数据科学
2019/12/18
1.4K0
Python快速实战机器学习(3) 线性分类器
机器学习是如今人工智能时代背景下一个重要的领域。这个“Python快速实战机器学习”系列,用Python代码实践机器学习里面的算法,旨在理论和实践同时进行,快速掌握知识。
HuangWeiAI
2019/10/14
2.9K0
Python快速实战机器学习(3) 线性分类器
Scikit-learn新版本发布,一行代码秒升级
对于创建可视化任务,scikit-learn 推出了一个全新 plotting API。
量子位
2019/12/10
7320
数据科学和人工智能技术笔记 十五、支持向量机
SVC 使用超平面来创建决策区域,不会自然输出观察是某一类成员的概率估计。 但是,我们实际上可以通过一些技巧输出校准的类概率。 在 SVC 中,可以使用 Platt 缩放,其中首先训练 SVC,然后训练单独的交叉验证逻辑回归来将 SVC 输出映射到概率:
ApacheCN_飞龙
2022/12/02
1.1K0
数据科学和人工智能技术笔记 十五、支持向量机
【一文搞懂:什么是集成学习--原理+python代码】
数据准备:make_moons 类似于⽉⽛形状的数据集,通常⽤于机器学习中的分类问题。
机器学习司猫白
2025/01/21
1640
【一文搞懂:什么是集成学习--原理+python代码】
推荐阅读
相关推荐
机器学习分类模型决策边界,MLxtend轻松绘制!
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档