Docker容器中数据两种持久化存储方式:卷和挂载宿主目录
镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
(1).卷(volumes):是宿主机器的文件系统的一部分,由Docker进行管理(在Linux,存储于/var/lib/docker/volumes/)。非Docker程序不应该去修改这些文件。Docker推荐使用卷进行持久化数据。卷可支持卷驱动(volume drivers),该驱动允许用户将数据存储到远程主机或云服务商(cloud provider)或其它。没有名字的卷叫匿名卷(anonymous volume),有名字的卷叫命名卷(named volume)。匿名卷没有明确的名字,当被初始化时,会被赋予一个随机名字。
卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:A.卷可以在容器之间共享和重用;B.对卷的修改会立马生效;C.对卷的更新,不会影响镜像;D.卷默认会一直存在,即使容器被删除。
卷的使用,类似于Linux下对目录或文件进行mount,镜像中的被指定为挂载点的目录中的文件会复制到卷中(仅卷为空时会复制)。卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的卷。
(2).挂载宿主目录(bind mounts, 绑定挂载):通过将宿主机器的路径挂载到容器里的这种方式,从而数据持久化,因此绑定挂载可将数据存储在宿主机器的文件系统的任何地方。非Docker程序可修改这些文件。绑定挂载是Docker早期就存在的,相比起卷,绑定挂载十分简单明了。在开发Docker应用时,应使用命名卷(named volume)代替绑定挂载,因为用户不能对绑定挂载进行Docker CLI(command line interface, 命令行界面)命令操作。
绑定挂载常用于:A.同步配置文件,如:将宿主主机的DNS配置文件(/etc/resolv.conf)同步至容器中;B.在开发程序时,将源代码或Artifact同步至容器中。这种用法与Vagrant类似。
卷相关操作命令如下:
docker volume create vol1 # 创建一个卷,如卷名为vol1
docker volume ls # 查看所有的卷
docker volume inspect vol1 # 查看指定卷的信息,如卷vol1
# 启动一个挂载卷的容器,如将卷名为"vol1"挂载到容器的/home/fengbingchun目录;新建的容器名为"yyyy"; -P,随机端口映射,容器内部端口随机映射到主机的端口
docker run -it -P --name yyyy --mount source=vol1,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
docker inspect yyyy # 查看容器中卷的具体信息,卷的信息在"Mounts"字段内,"yyyy"为容器名
docker volume rm vol1 # 删除卷,如卷名为"vol1",需要卷"vol1"没有被任何容器使用时才能删除
docker volume prune # 删除所有没有被使用的卷
挂载主机目录相关操作命令如下:
# 挂载一个本地主机的目录到容器中去,新建的容器名为"test"; -P,随机端口映射,容器内部端口随机映射到主机的端口;
# "/home/GitHub"为本地主机目录,本地目录的路径必须是绝对路径;"/home/fengbingchun"为挂载到容器此目录;Docker挂载主机目录的默认权限是读写
docker run -it -P --name test --mount type=bind,source=/home/GitHub,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash # linux
docker run -it -P --name test --mount type=bind,source=e:\GitCode,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash # windows
docker inspect yyyy # 查看容器中挂载主机目录的具体信息,挂载主机目录的配置信息在"Mounts"字段内,"yyyy"为容器名
相关文章:

CFRunLoopRef 的内部逻辑(向 ibireme学习)
据苹果在文档里的说明,RunLoop 内部的逻辑大致如下:/// 用DefaultMode启动 void CFRunLoopRun(void) {CFRunLoopRunSpecific(CFRunLoopGetCurrent(), kCFRunLoopDefaultMode, 1.0e10, false); }/// 用指定的Mode启动,允许设置RunLoop超时时间 int CFRunL…
倒计时 3 天!「2019 嵌入式智能国际大会」全日程大公开!
立即抢购:https://t.csdnimg.cn/otBk还有3天,大伙期待的「2019嵌入式智能国际大会」正式开幕了!2019年12月6日-7日,我们在深圳市人才研修院见!大会以“万物互联泛在智能”为主题,邀请30位海内外顶级专家作为…

Fckeditor PHP/ASP File Upload Vul
目录 1. 漏洞描述 2. 漏洞触发条件 3. 漏洞影响范围 4. 漏洞代码分析 5. 防御方法 6. 攻防思考 1. 漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行…

iOS App上架流程(2016详细版),真心很详细。
一、前言:作为一名iOSer,把开发出来的App上传到App Store是必要的。下面就来详细讲解一下具体流程步骤。二、准备:一个已付费的开发者账号(账号类型分为个人(Individual)、公司(Company…
飞机的“黑色十分钟”能被人工智能消灭吗?
【导读】近年来,“AI的应用和落地”逐渐成了具化的关键词,它和很多事物很多行业结合在一起,形成了奇妙的“化学反应”。例如,在日常生活中,AI可以推送我们喜欢的新闻或视频,可以在拍照的时候识别场景提升照…

Jenkins简介及在Windows上的简单使用示例
Jenkins是一款开源CI(Continuous Integration,持续集成)&CD(Continuous Delivery,持续交付)软件,用于自动化各种任务,包括构建、测试和部署软件,源码在https://github.com/jenkinsci/jenkins ,License为…

IOS开发之数据sqlite使用
一、引入工具包引入工具包libsqlite3.dylib,该工具包为C语言工具包。 二、代码操作数据库1、创建并且链接数据库 - (void) _connectDB{//1>获取沙盒路径作为数据库创建时候的初始化路径NSString * pathNSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDom…

通过Dockerfile构建Docker镜像
Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及行首"#"进行注释的格式. 使用Dockerfile构建Docker镜像时注…
华为腾讯百度众安微众360大咖齐聚,2019中国区块链开发者大会首批议程曝光!...
作者 | Aholiab出品 | 区块链大本营(blockchain_camp)随着区块链被定义为国家战略,区块链技术得到升温。据有关国际研究机构预测,三年后全球区块链市场规模将达到139.6亿美元(约合986.23亿元人民币)&#x…

iOS GCD使用
dispatch_queue_t queue dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ // 追加任务1[self.hud show:YES];for (int i 0; i < 2; i) { [NSThread sleepForTimeInterval:2]; // 模拟耗时操作[self reqHopwork];} })…

01 http协议概念及工作流程
一:HTTP协议 重要性: 无论是以后用webserverice ,还是用rest做大型架构,都离不开对HTTP协议的认识. 甚至可以简化的说: webservice http协议XML Rest HTTP协议 json 各种API,也一般是用httpXML/json来实现的. 往小说:做采集,小偷站,也需要对HTTP协议有所了解, 以…

iOS原生与html交互 使用第三方WebViewJavascriptBridge
HTML页面代码 <!DOCTYPE html><html xmlns:http"http://www.w3.org/1999/xhtml"><head> <meta charset"utf-8"> <title>迎新好礼</title> <meta name"viewport" content"widthdevice-width,initial…

Docker容器中挂载NFS共享目录
之前在https://blog.csdn.net/fengbingchun/article/details/110561129 介绍过使用Dockerfile构建ubuntu 16.04镜像,并在容器中编译执行Messy_Test项目.这里介绍下如何在容器中挂载NFS服务器上的共享目录. Dockerfile内容如下: FROM ubuntu:16.04 LABEL maintaine…
倒计时1天 | 2019 中国大数据技术大会(BDTC)报名通道即将关闭(附参会提醒)...
2019年12月5-7日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的中国大数据技术大会(BDTC 2019)将于北京长城饭店隆重举行。届时,超过百位顶尖技术专家将齐聚于…

Android TextView的一些小知识
2019独角兽企业重金招聘Python工程师标准>>> 1.设置文字行距 android:lineSpacingExtra"8dp" 或者 android:lineSpacingMultiplier"1.5" 2.设置字间距 在API21里可以设置 API 21 android:letterSpacing"0.5f" //字间距 注意&#x…

iOS WKWebView带进度条封装(只用传入url,可改变进度条颜色)
1 NSTimeraddition.h #import <Foundation/Foundation.h> interface NSTimer (addition) /** 暂停时间 */ - (void)w_pauseTime; /** 获取内容所在当前时间 */ - (void)w_webPageTime; /** 当前时间 time 秒后的时间 */ - (void)w_webPageTimeWithTimeInterval:(NSTimeIn…

Ubuntu上配置VS Code调试C++
直接使用GDB在Ubuntu上调试C code,有时不是很方便,这里介绍下在Ubuntu上通过Visual Studio Code调试C code操作步骤,通过CMake编译。 安装所需依赖: (1).在Ubuntu上安装Visual Studio Code最新稳定版本1.51.1; (2).…
因果关系是通向强AI的阶梯or作用被夸大?
整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)一直以来,机器学习和统计学之间的界限就比较模糊,比如诺奖得主托马斯萨金特就曾经说过人工智能其实就是统计学,只不过用了一个很华丽的辞藻。但同时也有人认为࿰…

Android中设置TextView的颜色setTextColor
tv.setTextColor(Color.parseColor("#FFFFFF")); tv.setTextColor(Color.WHITE); tv.setTextColor(Color.rgb(255, 255, 255)); //注意Color是大写C,不是color.holo_orange_dark,这样错误并没效果的 tv.setBackgroundResource(R.drawable.icon_bg_rectan…

iOS 跑马灯封装(带点击事件)
1.WAdvertScrollView.h#import <UIKit/UIKit.h>class WAdvertScrollView;typedef enum : NSUInteger {/// 一行文字滚动样式WAdvertScrollViewStyleNormal,/// 二行文字滚动样式WAdvertScrollViewStyleMore, } WAdvertScrollViewStyle;protocol WAdvertScrollViewDelegat…

日期与unix时间戳之间的转换C++实现
之前在https://blog.csdn.net/fengbingchun/article/details/107023645 中介绍过gmtime和localtime的区别,这里介绍下日期与Unix时间戳之间转换的实现,其中也会用到这两个函数。 Unix时间戳(Unix timestamp):是一种时间表示方式,…
模型训练完才是业务的开始?说说模型监控 | CSDN博文精选
扫码参与CSDN“原力计划”作者 | A字头来源 | 数据札记倌(ID:Data_Groom)“模型训练结束后才是业务真正的开始”简述每次模型训练完成后,并不意味着项目的结束,在训练模型后,我们还需要将其稳定上线,然后部署一套相应的监控体系&a…

后端码农谈前端(CSS篇)第一课:CSS概述
一、从扮演浏览器开始 扮演浏览器是Head First图书中很有意义的一个环节。可作者忘记了告诉我们扮演浏览器的台本。我们从这里开始。 上图是webkit内核渲染html和css的流程图。从该图我们可以知道以下几个关键信息: HTML的解析过程和CSS的解析过程是独立完成的。HTM…
远场语音识别错误率降低30%,百度提基于复数CNN网络的新技术
【12月公开课预告】,入群直接获取报名地址12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台——从方法到落地12月12日晚8点直播:利用容器技术打造AI公司技术中台12月17日晚8点直播主题:可重构计算:能效比、通用性…

深度神经网络中的局部响应归一化LRN简介及实现
Alex、Hinton等人在2012年的NIPS论文《ImageNet Classification with Deep Convolutional Neural Networks》中将LRN应用于深度神经网络中(AlexNet)。论文见:http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf ,截图如下: 公式解释&…

iOS 被拒解析
原因: Your app uses the "prefs:root" non-public URL scheme, which is a private entity. The use of non-public APIs is not permitted on the App Store because it can lead to a poor user experience should these APIs change.Continuing to us…

MSSQL数据库统计所有表的记录数
今天需要筛选出来库中行数不为零的表,于是动手写下了如下存储过程。 CREATE PROCEDURE TableCount AS BEGIN SET NOCOUNT ON DECLARE t1 AS TABLE(id INT IDENTITY,NAME NVARCHAR(50),RowsCount INT) DECLARE indexid AS INT DECLARE maxid AS INT DECLARE count A…

经典网络AlexNet介绍
AlexNet经典网络由Alex Krizhevsky、Hinton等人在2012年提出,发表在NIPS,论文名为《ImageNet Classification with Deep Convolutional Neural Networks》,论文见:http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf …
微软张若非:搜索引擎和广告系统,那些你所不知的AI落地技术
【12月公开课预告】,入群直接获取报名地址12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台——从方法到落地12月12日晚8点直播:利用容器技术打造AI公司技术中台12月17日晚8点直播主题:可重构计算:能效比、通用性…

iOS 之 IQKeyboardManager 解决使用UITableView 界面上移问题
- (void)viewWillAppear:(BOOL)animated {[IQKeyboardManager sharedManager].enable NO;}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];[IQKeyboardManager sharedManager].enable YES; }