docker持久化

news2024/11/16 1:52:56

        上周学习了docker的dockerfile,这周会往下学习一下docker的持久化;提到持久化,首先会涉及到一个UnionFS的概念;

1、什么是UnionFS?

        docker创建镜像的时候,会将各种依赖包括操作系统OS、工具包、依赖库等都放在文件系统(FS)中,这样容器进程调用各项依赖都在这个文件系统目录里,从而实现环境一致性;

        但是镜像是只读的,为了实现镜像的复用性,docker引入了层(layer)的概念;当镜像被docker run后,会在这个镜像的顶部添加一个新的可写层,这便是容器层;这个容器层和上一层的镜像层组成了container的运行时态;

        在容器层对FS的修改不会影响到上一层的FS;这一层一层的FS便组合成为了UnionFS,以下是专业的定义:

        联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下;

        比较遗憾的是UnionFS并未做到数据持久化,在容器丢失或被删除后,容器层所做的修改也全部丢失,同时也存在着迁移和备份困难、读写效率低的问题;

        为了保存容器层的修改,docker提供了数据卷持久化;

2、什么是数据卷?

       数据卷是宿主机中的一个特殊的文件或目录,与容器中的另一个文件/目录直接关联;数据卷是完全独立于容器的生命周期、它可以绕过UnionFS,为一个或多个容器提供访问;

数据卷的特点为:

        1)数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,这些数据会被拷贝到新初始化的数据卷中;

        2)数据卷可以在容器之间共享和重用;

        3)可以对数据卷里的内容直接进行修改;

        4)数据卷的变化不会影像镜像的更新;

        5)卷会一直存在,即使挂载数据卷的容器已经被删除;

3、数据持久化

        目前docker是提供了3种持久化数据的方式:

        卷(volume)、绑定挂载(bind mount)、临时挂载(tmpfs mount);

方式说明备注
卷(volume)存于宿主机文件系统中的某个目录如/var/lib/docker/volumes/非docker进程无权修改其中数据
绑定挂载(bind mount)存于宿主机文件系统中的任意位置非docker进程可以修改其中数据
临时挂载(tmpfs mount)存于宿主机内存中容器停止,tmpfs mount会被移除

3.1 卷(volume)

        多个容器可以通过读写或只读访问一个volume;当容器停止时,volume仍然存在,只有当显式删除时,volume才会被删除掉;以下学习一下volume的用法;

        1)为容器添加卷  (volume)
docker run --name tomcat2  -v /docker/data_volume:/data:ro -it centos  /bin/bash

        /docker/data_volume为宿主机目录,/data为容器目录,ro为只读权限

       创建容器以后呢,进入容器可以看到目录下已经有dir123的目录,且添加目录显示只读;

2)创建一个卷  (volume)
docker volume create data_volume

         以下是创建了一个data_volume的卷;

        

3)查看所有卷 (volume)
docker volume list

4)查看卷(volume)的详细信息
docker volume inspect data_volume

        可以看到他的创建日期、驱动、挂载点等信息;

5)删除卷 (volume)
docker volume rm -f data_volume

6)使用dockerfile构建卷 (volume)
FROM centos
MAINTAINER chililopp
LABEL version ="1.0"
WORKDIR /etc
RUN rm -f yum.repos.d/*
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
RUN yum -y install wget
RUN yum -y install zip

WORKDIR /usr
ADD jdk-8u212-linux-x64.tar.gz local
COPY etl_tomcat.zip local

RUN cp ~/.bash_profile ~/.bash_profile.bak
RUN source ~/.bash_profile
WORKDIR local
RUN unzip etl_tomcat.zip
WORKDIR /usr/local/etl_tomcat/bin
EXPOSE 8090
VOLUME ["/data1","data2"]

这是我之前构建的tomcat的镜像,我再其中加上VOLUME ["/data"],创建好容器以后,发现会自动创建卷,而且容器中自动创建了目录;

7)挂载卷 (volume)容器

        命名的容器挂载卷,其他容器通过挂载这个容器实现数据共享;

docker run --name centos --volumes-from=tomcat  -itd centos /bin/bash

进入容器中看看,同样是创建了data1和data2两个目录

tomcat的data1中创建目录,centos中的data1同样可以看到

8)备份卷 (volume)
docker run --volumes-from tomcat -v /root/backup:/backup --name tomcat-copy centos tar zcvf /backup/data-volume.tar.gz /data1

查看一下back下的目录,发现是有data-volume.tar.gz文件

9)还原卷 (volume)
docker run --volumes-from tomcat -v /root/backup:/backup --name tomcat-tar centos tar zxvf /backup/data-volume.tar.gz -C /data1

原来是将/data1下文件均删除:

还原以后存在;

3.2 绑定挂载(bind mount)

        需要手动在宿主机上创建挂载的目录(或者利用现有的),数据直接存在了宿主机硬盘上,删除容器或者卸载docker,数据并不会消失。

        以下学习一下bind mount的用法;

         1)为容器添加挂载bind mount

           其用法和使用volume添加卷类似:

docker run --name tomcat_bind  --mount type=bind,src=/docker/data_volume,dst=/data  -it centos  /bin/bash

        src为宿主机路径,dst为容器路径;

3.3 临时挂载(tmpfs mount)

        tmpfs mount只在linux中支持;相对于volume和bind mount,tmpfs mount是临时的,只在主机内存中持久化。当容器停止,tmpfs mount会被移除。对于临时存放敏感文件很有用;且多个容器之间无法共享tmpfs mount;

        1)为容器添加挂载(tmpfs mount)
docker run --name tomcat_tmpfs  --tmpfs /data1  -it centos  /bin/bash


        我是chililopp,正在学习k8s,之后如果有新的总结或者体验也会发出来,如果有说的不对的地方,还请指点,十分感谢阅读!

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

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

相关文章

Zookeeper之CAP理论及分布式一致性算法

CAP理论 CAP理论告诉我们,一个分布式系统不可能同时满足以下三种 一致性(C:consistency)可用性(A:Available)分区容错性(P:Partition Tolerance) 这三个基本要求,最多只能同时满足…

内容长度不同的div如何自动对齐展示

平时我们经常会遇到页面内容div结构相同页,这时为了美观我们会希望div会对齐展示,但当div里的文字长度不一时又不想写固定高度,就会出现div长度长长短短,此时实现样式可以这样写: .e-commerce-Wrap {display: flex;fle…

小程序-模板与配置

一、WXML模板语法 1.数据绑定 2.事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 事件传参 (以下为错误示例) 3.事件传参与数据同步 4.条件渲染 …

人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程13-神经网络的优化与设计之梯度问题及优化与代码详解。 文章目录 一、引言二、梯度问题1. 梯度爆炸梯度爆炸的概念梯度爆炸的原因梯度爆炸的解决方案 2. 梯度消失梯度消失的概念梯度…

十九、【文本编辑器(五)】排版功能

目录 一、搭建框架 二、实现段落对齐 三、实现文本排序 一、搭建框架 (1) 在imgprocessor.h文件中添加private变量: QLabel *listLabel; //排序设置项QComboBox *listComboBox;QActionGroup *actGrp;QAction *leftAction;QAction *…

实践致知第16享:设置Word中某一页横着的效果及操作

一、背景需求 小姑电话说:现在有个word文档,里面有个表格太长(如下图所示),希望这一个设置成横的,其余页还是保持竖的! 二、解决方案 1、将鼠标放置在该页的最前面闪烁,然后选择“页面”》“↘…

Macbook pro插移动硬盘没反应,Macbook pro移动硬盘读不了怎么办 macbook插移动硬盘后无法使用

为了弥补Macbook pro硬盘容量的缺失,我们有时候会使用到外接硬盘或移动硬盘。一般来说,这些硬盘都是即插即用的,可能部分要安装插件。不过,在一些特殊情况下,也会遇到插硬盘没反应等问题。本文会给大家解答Macbook pro…

PyTorch张量创建和随机数生成器算法

文章目录 1、基本创建方式1.1、根据已有数据创建张量1.2、根据已有数据创建张量1.3、根据已有数据创建张量 2、创建线性和随机张量2.1、创建线性空间的张量2.2、创建随机张量2.3、什么是随机数种子2.4、initial_seed()和manual_seed() 3、创建01张量3.1、全0张量3.2、全1张量3.…

PGCCC|【PostgreSQL】PCP认证考试大纲#postgresql 认证

PostgreSQL Certified Professional PCP(中级) PCP目前在市场上非常紧缺,除了具备夯实的理论基础以外,要有很强的动手能力,获得“PCP(中心)“的学员,将能够进入企业的生产系统进行运…

MongoDB自学笔记(二)

一、前言 接着上一篇文章,在上一篇文章中学习了如何使用数据库、如何创建集合、如何往集合里添加文档,今天我们继续学习一下更新文档,更新文档相对来说比较复杂笔者打算分多次来记录学习过程。 二、文档操作 1、更新文档 基础语法&#x…

爬虫-requests和Selenium

1、了解requests的功能 1.1 使用post和get发送请求 HTTP中常见发送网络请求的方式有两种,GET和POST。GET是从指定的资源请求数据,POST是向指定的资源提交要被处理的数据。 GET的用法: import requestsr requests.get("https://www.…

面试题010-数据库-MySQL(MySQL+索引)

面试题010-数据库-MySQL(MySQL索引) 目录 面试题010-数据库-MySQL(MySQL索引)题目自测题目答案1. MySQL是什么?有什么优点?2. 什么是SQL注入?如何解决SQL注入?3. MyISAM 和 InnoDB 有什么区别?4. SQL在MySQL数据库中的…

【论文阅读】LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING?

LLM4GCL: CAN LARGE LANGUAGE MODEL EMPOWER GRAPH CONTRASTIVE LEARNING? https://openreview.net/forum?idwxClzZdjqP 图对比学习的重点就是图数据的增强,针对图中节点的表示或者图的结构进行扰动,通过对比学习得到对应的节点表示,以便于…

azure学习在日本IT工作的重要性

在日本数字化转型的浪潮中,微软Azure已经成为众多企业的首选云平台。作为全球第二大云服务提供商,Azure在日本市场的重要性与日俱增。本文将探讨为什么学习Azure对日本IT专业人士至关重要,以及如何通过lalapodo云原生技术的培训课程,快速掌握这一关键技能。 Azure在日本的战略地…

MongoDB教程(五):mongoDB聚合框架

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言MongoDB 聚…

如何申请抖音本地生活服务商?3种方式优劣势分析!

随着多家互联网大厂在本地生活板块的布局力度不断加大,以抖音为代表的头部互联网平台的本地生活服务商成为了创业赛道中的大热门,与抖音本地生活服务商怎么申请等相关的帖子,更是多次登顶创业者社群的话题榜单。 就目前的市场情况来看&#x…

Gitlab CI/CD --- use a sample CI/CD template

0 Preface/Foreword Pipeline, job, stage的关系如下描述: A pipeline is composed of independent jobs that run scripts, grouped into stages. Stages run in sequential order, but jobs within stages run in parallel. 关键信息: pipeline由独…

新款S32K3 MCU可解决汽车软件开发的成本和复杂性问题(器件编号包含S32K322E、S32K322N、S32K328)

全新的S32K3系列专门用于车身电子系统、电池管理和新兴的域控制器,利用涵盖网络安全、功能安全和底层驱动程序的增强型封装持续简化软件开发。 相关产品:S32K328NHT1VPCSR S32K328GHT1MPCSR S32K322NHT0VPASR S32K322EHT0VPBSR S32K322NHT0VPBSR S32K32…

javascript之匿名函数和立即执行函数

函数总体分为具名函数(有名字)和匿名函数 匿名函数使用方法: let fn function (x, y) { // console.log(函数) console.log(x y) } fn(1, 2) 正常函数: function fun() { console.log(1) } fun() 2.立即执行函数 好处是避免全局…

MySQL运维实战之ProxySQL(9.9)proxysql自身高可用

作者:俊达 proxysql作为一个程序,本身也可能出现故障。部署proxysql的服务器也肯能出现故障。高可用架构的一个基本原则是消除单点。 可以在多个节点上部署proxysql,在proxysql之前再加一层负载均衡(如使用LVS或其他技术&#x…