Docker原理篇

发表于:2018-4-08 10:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:csdn

#
Docker
分享:
  前提
  dockerlinux系统上的,虽然官网提供了windows和MacOS版本的安装包,但它们都是靠虚拟机或类似的技术支撑的。换句话说,为了方便你的阅读,希望你已经了解些许linux的知识。
  共识
  Docker使用客户端-服务器(client-server)架构模式。Docker客户端会与Docker守护进程进行通信。Docker守护进程会处理复杂繁重的任务,例如建立、运行、发布你的Docker容器。Docker客户端和守护进程可以运行在同一个系统上,当然你也可以使用Docker客户端去连接一个远程的Docker守护进程。Docker客户端和守护进程之间通过socket或者RESTful API进行通信。
  Docker和容器不是一个意思,docker包含实现虚拟化技术的一系列技术,而容器(container)只是其中的一个组件。
  Docker应用场景
  更快交付你的应用程序
  Docker可以为你的开发过程提供完美的帮助。Docker允许开发者在本地包含了应用程序和服务的容器进行开发,之后可以集成到连续的一体化和部署工作流中。
  开发和拓展更加简单
  Docker的以容器为基础的平台允许高度可移植的工作。Docker容器可以在开发者机器上运行,也可以在实体或者虚拟机上运行,也可以在云平台上运行。
  Docker的可移植、轻量特性同样让动态地管理负载更加简单。你可以用Docker快速地增加应用规模或者关闭应用程序和服务。Docker的快速意味着变动几乎是实时的。
  实现更高密度和更多的负载
  Docker轻巧快速,它提供了一个可行的、 符合成本效益的替代基于虚拟机管理程序的虚拟机。这在高密度的环境下尤其有用。例如,构建你自己的云平台或者PaaS,在中小的部署环境下同样可以获取到更多的资源性能。
  目标
  Docker项目的目标是实现轻量级的操作系统虚拟化解决方案,创建软件程序可移植的轻量容器。
  Docker的主要组成
  Docker有两个主要的部件:
  Docker: 开源的容器虚拟化平台。
  Docker Hub: 用于分享、管理Docker容器的Docker SaaS平台。
  底层实现
  Docker 的基础是Linux容器(LXC)等技术。
  在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。
  Docker使用Cgroups来提供容器隔离,而union文件系统用于保存镜像并使容器变得短暂。
  Cgroups:Cgroups是Linux内核功能,它让两件事情变成可能:限制Linux进程组的资源占用(内存、CPU);为进程组制作 PID、UTS、IPC、网络、用户及装载命名空间。
  Docker Cgroups: http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation
  Union文件系统:在union文件系统里,文件系统可以被装载在其他文件系统之上,其结果就是一个分层的积累变化。如下图:
  与虚拟机的关系
  用户操作Docker的容器就像操作一个快速轻量级的虚拟机一样简单。
  但是它们还是有很大的区别的,看下面两幅图:

  官网的说法是:虚拟机上的应用不仅包含了应用本身、必要的依赖(二进制和库包等),还包括整个操作系统;而docker应用不同,共享系统内核,仅仅包含应用本身和依赖。
  Docker的优势:
  Docker的特性
  交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
  文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
  资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源。
  网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
  日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
  Docker结构引擎
  注意上图,显示的是docker主要组件。
  1. Server,就是一个守护进程,它会一直运行在后台;
  2. REST API,说明如何与server交互和指示它执行命令;
  3. Client,是客户书写指令的地方,也俗称shell,看下图:
  Docker运行流程
  正如上图所示,当我们想运行一个容器的时候,docker会:
  拉取镜像,若本地已经存在该镜像,则不用到网上去拉取。
  创建新的容器。
  分配union文件系统并且挂着一个可读写的层,任何修改容器的操作都会被记录在这个读写层上,你可以保存这些修改成新的镜像,也可以选择不保存,那么下次运行改镜像的时候所有修改操作都会被消除。
  分配网络\桥接接口,创建一个允许容器与本地主机通信的网络接口。
  设置ip地址,从池中寻找一个可用的ip地址附加到容器上,换句话说,localhost并不能访问到容器。
  运行你指定的程序。
  捕获并且提供应用输出,包括输入、输出、报错信息。


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号