docker深入学习二
dicker:数据管理
数据管理机制
docker使用union file system来管理数据,docker构建image和container也是采用了同样的技术。
image层次
iamge由多个层次构成,每个层次包含dockerfile的一条指令,除了最后一层外,其他层次都是只读的。
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
其一共生成四个层次:
- FROM 根据ubuntu:18.04生成一个层次
- copy将运行docker命令的目录下的文件复制到容器中的app文件中
- run 使用make命令生成应用程序
- cmd 在容器中运行指定命令
docker层次的管理方式类似于git版本管理,层次的结构类似于一个栈,每个层次只记录与之前的层次的差异。当创建一个container时,会在image层次的基础上再创建一个读写层,对容器的修改操作都记录在读写层上而不会修改底层记录的数据。
container层次
container和image最大的区别在于container比image多了一层读写层用于记录对容器的修改,读写层在容器结束运行后销毁,其所记录的一切结果都不会保留,也不会改变image的数据。
由于container不会修改底层image的数据,所以多个container副本底层可以共享一个image。
copy-on-write策略
copy-on-write用于提高共享和复制文件的效率。
当需要对低层次数据进行读取时,如果不涉及数据修改,那么直接从低层读取现有数据;如果需要修改数据,则将数据拷贝到当前层次进行修改。
当我们将某个image作为base image构建新的image时,新的image不会复制base image的层次,而是共享相同的只读层。
为了存储效率和读写效率,当我们创建一个container时,同样只将要修改的数据复制到读写层中,以此保证容器所占空间最小。
存储驱动
docker支持多种存储驱动,官方推荐的驱动程序是overlay2。
数据存储方式
docker中数据存储有三种方式:记录在读写层、挂载主机文件系统、设置volume。
其中使用读写层记录数据会存在以下问题:
- 数据无法持久化,当容器关闭后,读写层记录的数据就会消失
- 数据不利于共享,其他容器或进程很难获取到容器读写层的数据
- 读写效率低,读写层存储数据需要使用存储驱动,该驱动需要使用linux内核,运行效率低
如上图所示,
volume是将数据主机文件系统中docker所管理的区域,bind mount是将主机文件系统中的任何一部分挂载到container中,tmpfs mount是linux上的一个文件管理系统,他所有的数据都存储在内存中而不会保留在硬盘上,所以掉电后,其里面所有数据都会丢失。
相关链接
https://docs.docker.com/storage/storagedriver/
https://docs.docker.com/storage/storagedriver/select-storage-driver/
https://docs.docker.com/storage/storagedriver/overlayfs-driver$
docker深入学习二的更多相关文章
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World
操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...
- Docker容器学习梳理 - 应用程序容器环境部署
关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...
- docker深入学习
docker深入学习 一.容器的介绍和容器的发展史 为什么要学习容器? 在openstack之后,目前互联网最火热的技术莫过于docker容器了,早在2015年,京东技术备战双11就是使用了10万+D ...
- 在Windows环境中开始Docker的学习和体验
研究docker有一段时间了,当然我主要的使用环境还是在Linux中,确实很方便. 但也有不少朋友希望使用Windows来工作学习,这里介绍一下在Windows中如何快速开始Docker的学习和体验吧 ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
随机推荐
- rbenv mac&&linux 安装简单说明
mac 可以通过brew linux 官方提供了运行脚本 # with curl curl -fsSL https://github.com/rbenv/rbenv-installer/raw/mas ...
- pgloader 学习(八) pg 2 pg 简单demo
pg 数据到pg 数据的迁移,同时支持名称的变更 环境准备 docker-compose文件 内容偏多可以忽略部分 version: "3" services: pgloader- ...
- ShardingSphere初探1 -- 概览
知道这个框架是通过一期QQ课堂 https://shardingsphere.apache.org 官网 https://github.com/apache/incubator-shardingsph ...
- CSS链接伪类:超链接的状态
一.状态: a:link{属性:值;} 链接默认状态 a:visited{属性:值;} 链接访问之后的状态 a:hover{属性:值;} 鼠标放到链接上显示的状态 a:active{属性:值;} 链接 ...
- P2340 奶牛会展 DP 背包
P2340 奶牛会展 DP \(n\)头牛,每头牛有智商\(s[i]\)情商\(f[i]\),问如何从中选择几头牛使得智商情商之和最大 且 情商之和.智商之和非负 \(n\le 400,-10^3\l ...
- 洛谷 P2983 [USACO10FEB]购买巧克力Chocolate Buying 题解
P2983 [USACO10FEB]购买巧克力Chocolate Buying 题目描述 Bessie and the herd love chocolate so Farmer John is bu ...
- c语言博客作业03--循环结构
0.展示PTA总分 1.本章学习总结 1.1学习内容总结 循环语句 for语句: for( 表达式1; 表达式2; 表达式3 ) { // 需要执行的语句; } 其执行过程是:表达式 1 首先执行且只 ...
- GoCN每日新闻(2019-10-02)
GoCN每日新闻(2019-10-02) GoCN每日新闻(2019-10-02) 1. Golang中基于Gin和Casbin的web使用方式 https://dev.to/maxwellhertz ...
- mysql 组合聚集函数
mysql> select * from table1; +----------+------------+-----+---------------------+ | name_new | t ...
- 【BIRT】汉化设计器
点击下面文字即可下载汉化包 birt汉化_plugins.rar 下载完成之后,解压: 将上述文件copy到目录../eclipse/plugins/下即可 文件复制后,重新启动eclipse,则已经 ...