当前位置: 首页 > news >正文

docker基础

Docker容器关键技术

1 DockerDaemon

技术人员一般会将Docker的技术堆栈分成好几层,用来进一步阐明Docker技术本身。相对于整个技术堆栈而言,Docker容器OS层的关键技术显得尤为重要。要了解Docker,首先看看Docker总架构图,如图5-4所示。

由图可知,用户可以从DockerClient建立与DockerDaemon的通信连接,发送容器的管理请求,这些请求最终被DockerServer接受,而请求处理则交给Engine处理。而在与系统调用方面,Docker则是通过更底层的工具LibContainer与内核交互。Libcontainer是真正的容器引擎,是容器管理的解决方案,涉及大量的Linux内核方面的特性,如namespace、cgroups、apparmor等。LibContainer很好地抽象了这些特性,提供接口给Dockerdaemon。

用户执行启动容器的命令后,一个DockerContainer实例就运行起来了,这个实例拥有隔离的运行环境、网络空间以及配置好的受限资源。DockerDaemon是一个常驻在后台的系统进程,实际上就是驱动整个Docker功能的核心引擎。简单地说,DockerDaemon实现的功能就是接收客户端发来的请求,并实现请求所要求的功能,同时针对请求返回相应的结果。在功能的实现上,因为涉及容器、镜像、存储等多方面的内容,实现复杂,涉及多个模块的交互。

 

2 Docker容器

Container(容器)是整个Docker技术堆栈的核心内容,相对传统虚拟化,这项基础技术在性能上给Docker带来了极大优势。DockerDaemon通过LibContainer对容器运行实例实现了生命周期的管理,配置信息的设置、查询、监控以及通信等丰富的功能。概念上来说,容器诠释了Docker提倡的集装箱的概念:存放任何货物,通过货轮运输到各个不同的码头。而运输、装载、卸载集装箱的码头都不用关心集装箱中的货物是什么,这种标准的应用封装形式真正意义上打破了原有云计算世界中虚拟机镜像格式的束缚,极大地方便开发人员的工作。Docker容器作为一个集装箱,可以安装指定的软件和库,以及任意环境配置。当开发和运维人员在部署和管理应用的时候,可以直接把应用容器运行起来,不用关心容器里是什么。容器技术不是一个新的技术,但是通过Docker的神奇封装,与集装箱概念联系起来,开创了云计算领域的新的时代,并迅速推广到全世界。

 

3 Docker镜像

运行中的容器实例,提供了一个完整的、隔离状态的运行环境,与之相对应的DockerImage技术,则是整个运行环境的静态体现。相比较传统虚拟机繁杂、多样的镜像格式而言,Docker的镜像要轻量化很多,并且简单很多。从技术层面俯视,这就是一个可以定制的RootFS。Docker公司在镜像上的另外一个创新就是分层复用。其在一些实际场景中非常有用,大部分的镜像需要相同的OS发行版环境,而许多文件的内容都是一致的,因此复用这些基础文件将会减少很多制作镜像时候的工作。DockerImage做到了这点,采用UnionFS的特性,通过一个基础版本的分层机制,不断开发新的版本堆叠在上面即可,减少磁盘和内存的开销。开发人员通常会使用Dockerfile来创建DockerImage,这是一个定制镜像内容的配置文件,同时也能在内容上体现层级关系的建立关系。可以使用dockercommit这样的命令行方式来手动修改镜像内容并提交生成新的镜像。

 

4 DockerRegistry

有了DockerImage之后,就需要考虑镜像仓库了,DockerRegistry就是这样的功能设定。在Docker的世界中,开发人员可以很容易地从这里下载镜像,Registry通常被部署在互联网服务器或者云端。在DockerImage的传输过程,Registry就是中转站。例如,在公司里,我们可以把一个软件的运行环境制作成为镜像,上传到Registry中,然后就可以很方便地在可以接入到网络的地方从Registry上把镜像下载下来并运行,当然这些操作都是和Docker结合在一起的,使用者甚至不会感知到Registry的存在,简单的命令行就可以显示所有的操作了。Docker公司提供的官方镜像Registry叫做DockerHub,提供了大部分的常用软件和OS发行版的官方镜像,同时也存有无数的个人用户提供的镜像文件。Registry本身也是一个开源项目,任何开发人员可以在下载该项目后,自己部署一个Registry,许多企业都会选择独立部署DockerRegistry并且做二次开发,或者购买更强大的企业版DockerHub。

 

转载于:https://www.cnblogs.com/muzinan110/p/9223729.html

相关文章:

  • jstack
  • linux常用命令与终端快捷键总结
  • 别让程序员停止在35岁,如何让我们走得更远?
  • jQuery获取URL中的参数
  • try{ } catch (e){ }的理解
  • jQuery = 1.11.3 DomXSS漏洞
  • EOS多节点组网:商业场景分析以及节点启动时序
  • maven与sbt修改国内镜像
  • U盘安装Linux CentOS 6.8 系统
  • 5.20界面初步完成
  • spring mvc 文件上传 ajax 异步上传
  • react-native
  • C语言学习(42)
  • 21.拉取删除远程分支
  • Java类只加载一次的情况
  • 【mysql】环境安装、服务启动、密码设置
  • ES2017异步函数现已正式可用
  • golang中接口赋值与方法集
  • JavaScript对象详解
  • JS实现简单的MVC模式开发小游戏
  • JS学习笔记——闭包
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Spring-boot 启动时碰到的错误
  • 将 Measurements 和 Units 应用到物理学
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一起参Ember.js讨论、问答社区。
  • 一天一个设计模式之JS实现——适配器模式
  • 硬币翻转问题,区间操作
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Python 之网络式编程
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • (12)Linux 常见的三种进程状态
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (补)B+树一些思想
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (数据结构)顺序表的定义
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET/C# 使用反射注册事件
  • .NET6实现破解Modbus poll点表配置文件
  • .net对接阿里云CSB服务
  • .sh
  • /proc/stat文件详解(翻译)
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [ 蓝桥杯Web真题 ]-布局切换
  • [.net] 如何在mail的加入正文显示图片
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [BZOJ4554][TJOI2016HEOI2016]游戏(匈牙利)
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [CF]Codeforces Round #551 (Div. 2)