微服务实战系列之玩转Docker(四)
前言
幸福,就是继续追寻已经拥有的东西。
——圣·奥古斯丁

什么算已经拥有的?比如爱你的人在等你,比如每日热腾腾的三餐,比如身边可爱的同事,又比如此刻的你,看见了这篇博文(😁😁😁)。所以这么看来幸福很简单,也很直接哈。轻松自在,乐于学习,何尝不是一种已经拥有的幸福。
话不多说,言归正传。博主前序的三篇博文,旨在对docker的背景目标、运行原理、桌面体验进行简单概述。我想任何一个“小白”读完后,必然有所收获,甚至可以直接向团队提建议——我们愉快的使用docker吧!
当然,在这里,博主先奉上一句:“玩归玩,闹归闹,不用不知道,用过必骄傲”。可是上古兵法云:“知己知彼,百战不殆”,因此,如需熟练使用docker,还需掌握更多“情报”。
本博将继续挖掘docker的内涵,呈现它的魅力!

Q:如何让Docker更高效
既然提到高效,我们是不是可以想到几个不高效的场景?比如最常见的系统迁移方面。
根据系统实施经验,在系统迁移前,我们最优先考虑的方面主要是数据和应用。换句话说,如何保持数据的连续性和系统的稳定性,是迁移时需解决的核心问题。
当然,数据量大不大取决于业务复杂度,但是无论大小与否,在保持业务连续性的前提下,往往会对应用的迁移施加影响。所以此时怎么办?
有些人说使用docker吧,一劳永逸!这个主意好,但是docker也有“难言之隐”。不过还是前辈们思考周全,真的让我们做到了“一劳永逸”。
1. 面临的挑战
我们在使用docker时,会面临哪些主要挑战呢?
1.1 容器间的数据共享
容器可以run anywhere,那么数据是否可以save anywhere?如无法满足,则带来一个问题,数据在容器间是无法共享的。

1.2 容器与docker主机间的数据共享
容器素以“轻,灵”著称,那么数据是否可以真的被有效剥离?如无法满足,则带来一个问题,容器可能会“越来越胖”,同时数据随容器的消亡而消失。

1.3 容器管理数据的性能代价
我们知道容器的运行是在基础镜像之上,加了个“盖”——可读写层。这个机制靠一个特殊的存储驱动来满足。同时联合文件系统(UnionFS)也依靠存储驱动来实现。如频繁的对容器进行数据操作,那么试想,容器能受得了么?

2. 提供的方案
docker为了真正做到数据与容器的分家,满足数据的共享,提供了3种方案:
| 方案名 | 方案简介 |
|---|---|
| Data Volume | 翻译为数据卷,由docker管理的一种文件目录,主机其他进程无法读写。(推荐) |
| Bind Mount | 绑定挂载,由用户自定义存储目录,主机其他进程可读写。(常用) |
| tmpfs Mount | 临时挂载,只临时存储于主机内存,重启后消失。(不常用) |

2.1 data volume
一种不同于联合文件系统,支持以正常的文件或者目录的形式,与主机进行数据交互,进而实现保存持久化数据以及共享容器间的数据。
一句话总结:docker为了解决以上挑战或劣势,特别发明了一种称为“卷”的文件或目录,这个目录或文件的使命就是完成容器数据的持久化。使用它时,数据被默认存储在主机指定的目录:/var/lib/docker/volumes/卷。

一个卷支持用于一个或多个容器,同时不会自动消失,如需删除必须手工操作。可命名也可通过docker自动取名(全局唯一)。
docker volume 命令 //用于卷管理
| 命令 | 作用 |
|---|---|
| create | 创建一个数据卷。 |
| inspect | 查看一个或多个数据卷基本信息。 |
| ls | 查看已创建的所有数据卷。 |
| prune | 删除全部未使用的卷。 |
| rm | 删除一个或多个指定的数据卷。 |
这是一个卷的信息,可做参考:

2.2 Bind Mount
一种直接与主机磁盘进行交互的数据挂载方式,实现用途大致和
volume类似,也是常用的docker数据持久化技术。
一句话总结:与volume相比,终于实现了目录选择的自由了,容器与主机直接交互。当然,“优势太明显,劣势也直接”。如此选择,会直接影响容器的数据安全。所以选择该方式,通常是一把双刃剑,需评估后操作。

2.3 tmpfs Mount
与
Bind Mount相比,容器的数据只在内存管理,不再持久化,这就是tmpfs。
一句话总结:没有持久化,也就无需考虑数据共享的情景(涉及敏感数据保护、数据安全等),可以选择tmpfs Mount。
结语
docker为了解决数据持久化,满足迁移效率和数据共享的需要,提供了以上3种数据交互方案。每种方案均代表了一类使用场景。根据业务特性和安全要求,选择最佳的持久化方案,应该是我们从中学到的基本经验之一。
系列回顾
- 微服务实战系列之玩转Docker(三)
- 微服务实战系列之玩转Docker(二)
- 微服务实战系列之玩转Docker(一)
- 微服务实战系列之云原生

相关文章:
微服务实战系列之玩转Docker(四)
前言 幸福,就是继续追寻已经拥有的东西。 ——圣奥古斯丁 什么算已经拥有的?比如爱你的人在等你,比如每日热腾腾的三餐,比如身边可爱的同事,又比如此刻的你,看见了这篇博文(😁&#…...
微信小程序-自定义组件生命周期
一.created 组件实例创建完毕调用。定义在lifetimes对象里。 不能在方法里面更改data对象里面的值,但是可以定义属性值。 lifetimes:{//不能给data设置值created(){this.testaaconsole.log("created") }}二. attached 模板解析完成挂载到页面。 可以更…...
2024年7月23日(samba DNS)
回顾 1、关闭防火墙,关闭selinux systemctl stop firewalld systemctl disable firewalld setenforce 0 2、修改静态IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 #修改uuid的目的是为了保证网络的唯一性 3、重启网络服务 systemctl restart netwo…...
Hyperledger顶级项目特点和介绍
Hyperledger的顶级项目 Hyperledger是Linux基金会主持的开源区块链项目,其目的是推动跨行业的区块链技术的开发和应用。以下是Hyperledger的顶级项目: 1. Hyperledger Fabric 描述:Hyperledger Fabric是一个可扩展的企业级区块链平台&…...
操作系统——笔记(1)
操作系统是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合,控制和管理着整个计算机系统的硬件和软件资源,是最基本的系统软件。 常见的操作系统:ios、windows、Linux。 计算机系统的结构层次&am…...
isEmpty() 和 isBlank()的区别
isEmpty() 和 isBlank()的区别 平时自己开发的时候没有注意到这个地方,直到实习的时候代码审查的时候发现其用法上两者的不同. isEmpty() public static boolean isEmpty(String str) {return str null || str.length() 0; }isBlank() public static boolean isBlank(Strin…...
scrapy生成爬虫数据为excel
scrapy生成爬虫数据为excel 使用openpyxl(推荐)安装openpyxl库建一个新的Item Pipeline类在settings.py中启用ExcelPipeline说明 使用scrapy-xlsx首先,安装scrapy-xlsx:然后在Scrapy爬虫中使用管道:说明 要使用Scrapy生…...
vscode debug C++无法输入问题
研究了半天vscode debug c无法输入的问题,原来vscode的文档里面已经记录了。issue都是2020年提的了,还没解决。。。 不过人家也确实给了一个解法:用外部的terminal。 不过怎么看都还不是很方便,所以还是推荐直接使用CodeLLDB插件来…...
MODBUS tcp学习总结
MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客...
【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么
TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型,从上到下包括: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP/IP模型是四层模型&…...
发现FionaAI:免费体验最新的GPT-4o Mini模型!
你现在可以在FionaAI上免费体验OpenAI刚刚发布的GPT-4o Mini模型!作为您在Google Chrome中的ChatGPT驱动助手,FionaAI可以随时随地与您对话,帮助您轻松创作和处理文本。 为什么选择GPT-4o Mini? 最新技术:GPT-4o Mini是…...
Linux Gui 窗口对话和窗口操作
zenity 可以实现窗口对话 eg: zenity --error --width 300 --text "Permission denied. Cannot write to the file." ChosenDate$(zenity --calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 --month 9 --year 2019); …...
人工智能驾驶技术:引领未来道路
随着科技的不断进步,人工智能驾驶技术正以惊人的速度改变着我们的交通方式和生活方式。这项技术不仅令人兴奋,还引发了许多关于安全性、道德和法律等方面的深思。本文将探讨人工智能自动驾驶技术的发展现状、应用前景以及对社会的影响。 技术背景与发展…...
管理的核心是管人,管人的核心就是这3条,看懂的是高手
管理的核心是管人,管人的核心就是这3条,看懂的是高手 一:管欲 每个人都有欲望,无可厚非。管理者的任务就是利用欲望,管理欲望,通过欲望来达到管人的目的。 最需要管理的就是以下两种: 1、金…...
代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)
Diffusion Models专栏文章汇总:入门与实战 前言:自从SDXL提出了长宽桶技术之后,彻底解决了不同长宽比的图像输入问题,现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…...
Linux下如何使用GitLab进行团队协作
在Linux系统中,使用GitLab进行团队协作是非常常见的做法。GitLab是一个基于Git的代码托管和项目管理平台,可以帮助团队成员共享、追踪和管理代码的开发过程。本文将介绍如何在Linux系统中安装和配置GitLab,以及一些常用的团队协作功能。 安装…...
无法连接到internet怎么办?已连接但无internet访问,其实并不难
有时我们会遇到无法连接到Internet的问题,由多种原因引起,包括硬件故障、软件设置问题、网络供应商故障等。本文将介绍无法连接到Internet时可以采取的步骤。 简述 当你无法连接到Internet时,可以按照以下步骤进行检查和解决: 1…...
建投数据人力资源系列产品获得欧拉操作系统及华为鲲鹏技术认证书
近日,经欧拉生态创新中心和华为技术有限公司测评,建投数据自主研发的人力资源管理系统、招聘管理系统、绩效管理系统、培训管理系统,完成了基于欧拉操作系统openEuler 22.03、华为鲲鹏Kunpeng 920(Taisha 200)的兼容性…...
【iOS】——属性关键字的底层原理
strong,retain,copy,atomic,nonatomic c源码 interface propertyTest : NSObject property (nonatomic, strong) NSString *nsstring___StrongTest; property (nonatomic, retain) NSString *nsstring___RetainTest; property (n…...
电影类平台如何选择服务器
电影类平台如何选择服务器 1、数据存储 电影网站对服务器的要求是比较高的,对存储空间的需求特别大,所以在服务器选择上首先要确保足够大的存储空间。另外,当你的网站内容特别多时,内存不够用,可以选择增加内存&#x…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
