快速理解Docker - 容器级虚拟化解决方案_彩色蚂蚁的博客-CSDN博客


本站和网页 https://blog.csdn.net/colorant/article/details/20608157 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

快速理解Docker - 容器级虚拟化解决方案_彩色蚂蚁的博客-CSDN博客
快速理解Docker - 容器级虚拟化解决方案
彩色蚂蚁
于 2014-03-06 09:52:01 发布
232695
收藏
13
分类专栏:
00.Cloud
文章标签:
虚拟机
Docker
VM
Container
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/colorant/article/details/20608157
版权
00.Cloud
专栏收录该内容
66 篇文章
12 订阅
订阅专栏
作者:刘旭晖 Raymond 转载请注明出处
Email:colorant at 163.com
BLOG:http://blog.csdn.net/colorant/
是什么
简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案
拿现实世界中货物的运输作类比, 为了解决各种型号规格尺寸的货物在各种运输工具上进行运输的问题,我们发明了集装箱
Docker的初衷也就是将各种应用程序和他们所依赖的运行环境打包成标准的container/image,进而发布到不同的平台上运行
从理论上说这一概念并不新鲜, 各种虚拟机Image也起着类似的作用
Docker container和普通的虚拟机Image相比, 最大的区别是它并不包含操作系统内核.
普通虚拟机将整个操作系统运行在虚拟的硬件平台上, 进而提供完整的运行环境供应用程序运行, 而Docker则直接在宿主平台上加载运行应用程序. 本质上他在底层使用LXC启动一个Linux Container,通过cgroup等机制对不同的container内运行的应用程序进行隔离,权限管理和quota分配等
每个container拥有自己独立的各种命名空间(亦即资源)包括:
 PID 进程, MNT 文件系统, NET 网络, IPC , UTS 主机名 等
 与LXC有什么不同
基本上你可以认为目前的Docker是LXC的一个高级封装,提供了各种辅助工具和标准接口方便你使用LXC,你可以依靠LXC和各种脚本实现与docker类似的功能,就像你不使用APT/yum等工具也可以自己搞定软件包安装一样,你使用他们的关键原因是方便易用!
实际使用中,你一般不用关心底层LXC的细节,同时也不排将来docker实现基于非LXC方案的可能性
在LXC的基础上, Docker额外提供的Feature包括:标准统一的打包部署运行方案, 历史版本控制, Image的重用,Image共享发布等等
Container构建方案
除了LXC,Docker的核心思想就体现在它的运行容器构建方案上
为了最大化重用Image,加快运行速度,减少内存和磁盘footprint, Docker container运行时所构造的运行环境,实际上是由具有依赖关系的多个Layer组成的。例如一个apache的运行环境可能是在基础的rootfs image的基础上,叠加了包含例如Emacs等各种工具的image,再叠加包含apache及其相关依赖library的image,这些image由AUFS文件系统加载合并到统一路径中,以只读的方式存在,最后再叠加加载一层可写的空白的Layer用作记录对当前运行环境所作的修改。
有了层级化的Image做基础,理想中,不同的APP就可以既可能的共用底层文件系统,相关依赖工具等,同一个APP的不同实例也可以实现共用绝大多数数据,进而以copy on write的形式维护自己的那一份修改过的数据等
历史和生态环境
Docker项目从启动到现在不过一年多时间,发展势头还是很迅猛的
2013.01 做为dotcloud内部项目开始启动
2013.03.27 正式作为public项目发布
2014.1 被BLACK DUCK 评选为2013年10大开源新项目“TOP 10 OPEN SOURCE ROOKIE OF THE YEAR”
目前的状态 ( 2014.3 )
Docker 0.8.1
10000+ github stars(top 50)
350+ contributors
1500+ fork
具体应用方面,可以看到百度至少在2013年10月份就已经成功使用Docker支持其BAE平台的Paas服务
安装运行和使用
Docker虽然是号称build once, runeverywhere。但是实际上还是受其引擎依赖关系的限制的,目前的版本具体来说对系统要求:
Linux Kernel 3.8+ LXC support 64bit OS AUFS
以上要求,以ubuntu为例,需要12.04 配合 3.8kernel升级, 或者 ubuntu 13.04+
在ubuntu12.04上,基本安装步骤如下
sudoapt-get update sudo apt-get install linux-image-generic-lts-raringlinux-headers-generic-lts-raring
sudoapt-key adv --keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9
sudosh -c "echo deb http://get.docker.io/ubuntudocker main\ > /etc/apt/sources.list.d/docker.list"
sudoapt-get update
sudoapt-get install lxc-docker
如果你在安装之前想要先体验一下docker的基本操作命令等的话, 可以尝试一下这个在线的live教程 https://www.docker.io/gettingstarted/#h_tutorial
常用命令
分类列一下常用的CLI命令
仓库相关
search/ pull / push / login etc.
例:docker pull ubuntu 从仓库下载ubuntuimage
Images 操作相关
images/ rmi / build / export  / import / save /load etc.
例:docker images -t 以树形结构列出当前本地Image
运行相关
run / start / stop / restart / attach /kill etc.
docker run -i -t ubuntu /bin/bash  启动ubuntu image,并交互式的运行shell
杂项
Docker diff  / commit
Dockerinfo / ps / inspect / port / logs / top / history etc.
具体docker命令的使用参见 http://docs.docker.io/en/latest/reference/commandline/
常见问题
使用Non root 用户
目前版本的docker由于使用Socket进行通讯,因此需要root用户权限 sudo xxx,或者将需要使用Dockerclient的用户加入docker用户组
sudogpasswd -a ${USER} docker
网络相关问题
当你在网关背后需要通过代理连接docker的index数据库时,可以手动加上http_proxy环境变量来启动dockerdaemon
HTTP_PROXY=http://proxy_server:port docker -d &
更好的做法是修改/etc/default/docker ( on ubuntu ), 添加 exporthttp_proxy=proxy_server:port
同样,docker container 如果无法自动正确的从host环境中获得DNS的配置,则需要手动指定DNS服务器地址,这可以通过 docker -run --dns=xxx 来实现,也可以修改/etc/default/docker 添加例如 DOCKER_OPTS="-dns 8.8.8.8"
特权模式
在正常情况下 在container内部你没有权限操作device设备,而当前版本中,container内部部分文件例如/etc/hosts;/etc/hostname; /etc/resolve.conf等文件是动态通过mount动态以只读的形式加载上来的,理论上说你应该找到合适的方法去保证这些自动生成并加载的文件的正确性 (例如 通过--dns 设置 resolve.conf ),但是如果由于特殊原因你需要手动修改,那么你可以通过特权模式启动 docker client : docker run --privileged ,然后你可以卸载这些文件,自己再创建新的版本
过多的层级依赖关系
以Layer的方式实现APP和相关library的cheap reuse和fast update是Docker的关键所在,不过受目前AUFS文件系统的限制,默认Layer的层级最多只能达到127(曾经只有42),在实际使用中有多种情况可能导致你的container的层级关系快速增长到这个极限值,撇开这么多layer叠加以后AUFS的效率不谈,更多情况下是你无法再更新构建你的image了
使用Dockerfile构建Image时,每条指令都会给最终的Image增加一层layer依赖关系. 以修改,提交,再修改再提交的方式不停的调整,更新你的Image 从仓库中下载的别人的Image已经包含众多的层级依赖关系,而你需要进一步更新以创建你自己的版本
前两者在一定程度上还是你自己可能把控的,最后一种情况就没办法了。这个问题最终必将影响Docker的实际可用性,目前的解决方案包括:
使用Dockerfile时,尽可能合并多个操作:例如使用 "&&" 或 ";" 合并运行多个shell命令;将多个shell命令写成脚本,在dockerfile中添加并运行这个脚本 通过Export再Import Image,丢弃所有历史信息和依赖关系,创建一个全新的image
将来可能的解决方案包括:
在Dockerfile中添加对多步操作的合并提交的支持 外部的image Flat工具的支持,目标是能够保留历史信息等 非AUFS的其它Storage解决方案
Future development
虽然Docker目前默认使用LXC和AUFS,但是Docker的核心思想本身,并不强制绑定这两者,0.8版本已经可以使用BTRFS,而整个Docker框架也改成了插件式的架构,便于添加替换各个功能模块
例如更多的Storage方案的支持,规避AUFS当前的问题,除了LXC以外更多的虚拟化方案等
彩色蚂蚁
关注
关注
39
点赞
13
收藏
打赏
13
评论
快速理解Docker - 容器级虚拟化解决方案
简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案
复制链接
扫一扫
专栏目录
Windows Server 2016 活动目录管理
09-08
<p>安装和配置 Windows Server 2016 Active Directory Domain Service 课程,通过这一个课程的介绍,我们就能够理解 Active Directory Domain Service 服务基本的应用场景,基本的组件和架构,并且在 Windows Server 2016 的系统当中,完成 Active Directory Domain Service 先决条件的准备,完成 Active Directory Domain Service 的部署,完成多台服务器的部署,实现多主机的架构和数据的复制同步,然后就可以在 Active Directory Domain Service 中,完成用户以及计算机对象的创建,配置和管理,并且理解组策略基本的应用场景,基本的组件和架构,工作原理,通过组策略的方式,完成域当中计算机的配置和管理</p>
<p>最后我们将为大家去介绍,Windows Server 2016 的系统当中,Active Directory Domain Service 中,FSMO 角色的特点和管理,并且完成 Active Directory Domain Service 的数据备份和还原操作</p>
<p> </p>
docker 总结
包泽旭
03-19
33
docker 容器
1.什么是容器
容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出。隔离的环境拥有自己的系统文件,ip地址,主机名等
kvm虚拟机,linux,系统文件
程序:代码,命令 进程:正在运行的程序
2:容器和虚拟化的区别
linux容器技术,容器虚拟化和kvm虚拟化的区别 kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动...
评论 13
您还未登录,请先
登录
后发表或查看评论
Docker的简单理解
tanglinjie的CSDN博客
08-11
2121
在TensorFlow安装中涉及了Docker安装,特记录于下。
Docker和虚拟机类似都是一种虚拟化技术,只是相比而言Docker比虚拟机能加的轻量级,更快,更容易移植。有一些博主把它理解为集装箱思想,也就是不同种类商品放在不同集装箱里面,但是一艘货船可以放装了不同商品的集装箱,这个就是docker的思想。不同应用程序需要不同环境,把程序和它所需环境整体看作一个容器,放在docker中运行,...
CDN详细介绍
最新发布
You’re a wanderer just like me
10-24
215
Content Delivery Network
虚拟化与Docker
MisshqZzz的博客
10-31
1205
虚拟化的核心是对资源进行抽象,目标往往是为了在同一个主机上运行多个系统或应用,从而提高系统资源的利用率,同时带来降低成本,方便管理和容错容灾等好处。
从大类上分,虚拟化技术可以分为基于硬件的虚拟化和基于软件的虚拟化,基于软件的虚拟化,从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟化技术即属于这个范畴)。其中,前者一般指的是一些模拟设备或Wine这样的软件,后者又可以细分为完全虚
《docker技术集群与应用》2套期末考试卷ab卷带答案习题试卷模拟卷.pdf
12-08
Docker技术集群与应用期末测试试卷 说明本试卷由选择题和简答题两部分组成满分100分 一选择题 说明共30题每题2分共计60分 针对以下题目请选择最符合题目要求的答案针对每一道题目所有答案都选对则该题 得分所选答案错误或不能选出所有答案则该题不得分 1. 下列关于 Docker 的说法正确的是 A. Docker 采用经多次小变更积攒到一起一次提交进镜像的方式 B. Docker 容器可以脱
docker和虚拟化
dfid73216的博客
08-21
163
一:docker与虚拟化
1,虚拟化(virtualization)技术是一个通用的概念,不同领域有不同理解。在计算领域,一般指的是计算虚拟化(Computing virtualization)。维基百科定义为:虚拟化是一种资源管理技术,是将计算机的各种实体资源。如服务器、网络、内存和存储等,打破实体结构上不可切割的障碍,用一种抽象的方式转换后呈现出来。
2,虚拟化的核心是对资源的抽...
Docker虚拟化实战学习——基础篇
fsx2550553488的博客
05-26
3191
Docker虚拟化实战和企业案例演练深入剖析虚拟化技术概念和应用场景虚拟化,一是项技术~~,是一种资源解决方案。虚拟化技术是将物理资源转变为逻辑上可以管理的资源,以打破物理结构之间的壁垒,使计算元件运行在虚拟的基础上,而不是真实的物理资源上。通过虚拟化技术,可以将物理资源转变为逻辑资源(虚拟机),应用程序服务运行在虚拟资源上,而不是真实的物理机上。VMware workstation 属于个人版虚...
docker入门
PresleyR的博客
02-27
114
什么是docker
Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。
Docker 使用 Google 公司推出的 Go 语言 进行开发实现。
docker是linux容器的一种封...
虚拟化与Docker介绍
光明小学王小雨的博客
04-09
243
一、虚拟化
虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
Linux上面的两个重要的虚拟化解决方案:
Citrix的Xen,可以同时执行Type1和Type2型的hypervisor,Amazon的EC2就是采用Xen来进行服...
Docker虚拟化技术详解(二)
janth的专栏
02-14
212
引言
在前面的章节中介绍了docker的基本概念以及docker在传统虚拟机上的优缺点,这章节简绍docker的使用场景和使用docker的意义
一、docker的生态系统
docker生态系统如下图所示:
docker生态系统图
d...
docker选择题答案_docker试题
weixin_42509833的博客
12-31
2647
1、什么是容器?(3分)容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。2、容器虚拟化和传统虚拟化的区别是什么?(4分)容器虚拟化:启动一般是秒级;仅仅kernel所支持的os,系统支持量单机支持上千个容器,磁盘的使用一般为MB性能接近原生传统虚拟化:启动一般是分钟级,支持linux,windows,mac操作系统,系统支持量一般为几十个磁盘使用一般为...
Snabbdom作业
guxuehua的博客
10-12
176
1、下面关于虚拟 DOM 的说法正确的是:A
A. 使用虚拟 DOM 不需要手动操作 DOM,可以极大的提高程序的性能。
B. 使用虚拟 DOM 不需要手动操作 DOM,可以极大的提高开发效率。
C. 虚拟 DOM 可以维护程序的状态,通过对比两次状态的差异更新真实 DOM。
D. 虚拟 DOM 本质上是 JavaScript 对象,可以跨平台,例如服务器渲染、Weex 开发等。
2、下面关于 Snabbdom 库的描述错误的是:D
A. Snabbdom 库是
关于html语义化 以下哪个说法是正确呢,HTMLCSS面试题及答案.docx
weixin_33363265的博客
05-30
225
编程语言——HTML/CSS1、input属于窗体元素,层级显示比flash、其它元素都高。请判断这句话的正确与否。A.T B.F2、根据栅格系统的标准用法,错误的是A.B.C.D.3、列表分为两类,一是无序列表,一是有序列表,以下哪个是无序列表?A. B. C. D.4、关于下列类的说法错误的是?A.show用来显示一个区块 B.hi...
云计算理论多选题
qq_53472743的博客
10-12
2517
二、多选题(每小题的备选答案中不止1个答案符合题目要求)
1.在华为 FusionCompute 中,以下对虚拟机 HA 描述正确的是( )
A. 虚拟机 HA 功能可以在故障发生时,迅速恢复业务
B. 系统检测到虚拟机蓝屏且配置处理策略为 HA 时,系统会选择其他正常的计算节点重建虚拟机
C. 在集群中启用 HA 功能后,主机发生故障后,虚拟机可以在其他主机上重建
D. 集群中只要预留了资源,故障发生时,具有 HA 属性的虚拟机就能在其他计算节点重建成功
2.下面对项目需求阶段表述正确的是(.
华为内部面试题库---(14)
weixin_30352191的博客
05-20
98
1、 关于虚拟地址空间的说法错误的是()A. 进程地址空间是用多少分配多少,4G仅仅是最大限额B. 进程的地址空间并不一定对应实际的物理页C. 不同进程的不同虚拟地址可以映射到相同的物理页D. 不同进程的相同虚拟地址不能映射到相同的物理页解答:D2、 关于mmap设备的说法,错误的是()A. 映射一个设备,意味着使用户空间的一段地址关联到设备内存上B....
容器化技术(docker)和虚拟化技术
weixin_50344914的博客
03-07
825
docker
docker相关
Docker是一个基于go语言开发,用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
将项目本身以及环境打包(镜像),直接下载镜像,直接运行
核心思想:隔离
docker容器技术也是一种虚拟机技术
相对于虚拟机技
20200423——docker 虚拟化简介
寄蜉蝣于天地,渺沧海之一粟。
04-23
251
博客主旨
什么是虚拟化
dokcer介绍
docker版本以及安装
docker架构
docker镜像操作
docker容器操作
什么是虚拟化
概念
在计算机中,虚拟化技术是一种资源管理技术,是将计算机的实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来。打破实体间的不可切割的障碍,使用户可比原本的组态更好的方式来应用这些资源
在实际上的生产环境,虚拟化技术主要用来解决高性能的物理硬...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
彩色蚂蚁
CSDN认证博客专家
CSDN认证企业博客
码龄16年
暂无认证
120
原创
1万+
周排名
44万+
总排名
180万+
访问
等级
1万+
积分
1937
粉丝
374
获赞
243
评论
1034
收藏
私信
关注
热门文章
快速理解Docker - 容器级虚拟化解决方案
232693
Memcached 及 Redis 架构分析和比较
108613
如何写好项目规划和方案设计文档
84261
快速理解Kafka分布式消息队列框架
74668
大数据平台-元数据管理系统解析
51981
分类专栏
00.Cloud
66篇
云计算论文阅读笔记
19篇
10.Linux内核模块分析
1篇
T10.旅行
2篇
15.驱动编程
7篇
20.内核杂项
21.内核ARM体系结构相关
30.调试工具和方法论
9篇
35.调试记录和分析
6篇
40.系统集成相关
7篇
50.输入法
1篇
60.应用开发
3篇
65.QT框架基础
7篇
70.Tips
1篇
80.读书笔记
3篇
90.其它
7篇
最新评论
Ray - 面向增强学习场景的分布式计算框架
weixin_44256363:
博主写的真好,受教了
驱动调试常见问题_Camera
伏特加里泡枸杞:
你这是王者荣耀开黑群吧?!
分布式一致性协议Raft,以及难搞的Paxos
你觉得为时已晚的时候就是最早的时候:
不咋好懂啊
如何写好项目规划和方案设计文档
m0_67365353:
这篇文章真的是太赞了!超实用教程
大数据平台基础架构指南
弹指神通:
已购
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
写一篇靠谱的方案设计文档-之实践问题清单
如何写好项目规划和方案设计文档
大数据平台基础架构指南
2022年1篇
2018年4篇
2017年17篇
2016年5篇
2015年2篇
2014年11篇
2013年15篇
2012年16篇
2010年8篇
2009年5篇
2008年21篇
2007年15篇
目录
目录
分类专栏
00.Cloud
66篇
云计算论文阅读笔记
19篇
10.Linux内核模块分析
1篇
T10.旅行
2篇
15.驱动编程
7篇
20.内核杂项
21.内核ARM体系结构相关
30.调试工具和方法论
9篇
35.调试记录和分析
6篇
40.系统集成相关
7篇
50.输入法
1篇
60.应用开发
3篇
65.QT框架基础
7篇
70.Tips
1篇
80.读书笔记
3篇
90.其它
7篇
目录
评论 13
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
彩色蚂蚁
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值