Docker,用任何工具链和任何语言来构建任何应用
在看过Docker的两个Hello World的程序后,我们对Docker有了一个大概的感性的认识,那么Docker是到底是什么呢?Docker是一个面向开发者和系统管理员编译,装载,和运行分布式应用的开放式平台。它包括了Docker引擎,一个可移植的,轻量级的,运行时环境和打包工具,还包括了Docker Hub,一个用于共享应用和自动化工作流的云服务。
Docker和一般的虚拟机有什么不同之处
对一般的虚拟机而言,每个虚拟化的应用包括的不仅仅是这个应用本身(大概数十M)以及应用所必需的bin文件和lib文件,此外还必须有一个虚拟化的操作系统(少则几G,多则十数G)。如下图所示。

图1.一般虚拟机系统的结构(官网截图)
而对于Docker而言,Docker引擎容器仅仅包含了应用本身和它的必须的依赖(文件或者镜像等),它在宿主操作系统中的用户空间(userspace)中以隔离的进程(容器)分别的运行着,只是和其他容器共享了Docker内核。这样,它就能在享有资源的隔离和分配的优势的同时,还保持高可移植性和高效性的优势。

图2.Docker的结构(官网截图)
文件系统
为了进一步透彻地了解Docker的优势所在,我们需要熟悉Docker的层次结构,这里详细了解一下Docker的文件系统。熟悉Linux系统的朋友应该知道,让一个Linux系统运行起来,我们需要两个文件系统:
1.boot文件系统(bootfs)
2.root文件系统(rootfs)
bootfs包括了boot加载器(bootloader)和内核(kernel),用户永远不对bootfs做任何修改,实际上,在boot加载完成以后,整个内核都在内存中了,bootfs会被卸载掉以释放和初始RAM磁盘相关联的内存。
rootfs包括我们熟悉的类Unix系统的标准结构:包括/dev, /proc, /bin, /etc, /lib, /usr, /tmp,以及所有用户需要运行各种应用的配置文件,二进制文件和库文件(像bash, ls等)

图3.Linux的bootfs和rootfs(官网用图)
在不同的Linux发行版中,内核也可能有很大的不同,通常rootfs内核的内容和组织都是我们的软件包依赖当前而不是另一个发行版的主要原因(这里就产生了应用对于不同发行版的Linux的依赖性)。而Docker可以通过同时运行多个发行版来帮助我们解决这个问题。

图4.Docker文件系统(官网用图)
这里我们应该理解了Docker的优势所在了,有了Docker,开发者们可以用任何工具链和任何语言构建任何应用。Docker化的应用完全可移植,可以在任何地方运行。
不仅如此,开发者可以通过Docker Hub上的超过1.3W个应用来快速上手,而且这些应用由Docker来管理和维护更新以及相互之间的依赖关系,让管理员更便于了解开发者编写的应用是怎样工作的。开发者们可以通过Docker自动化他们的开发流程并且能通过公有的或者私有的云库进行团队合作。
Docker能使开发者更快的构建和装载高质量的应用。
对于系统管理员,使用Docker可以为开发提供标准化的环境,质量保证和生产团队。不再是“在我的机器上工作”,通过Docker化应用及其依赖,系统管理员可以忽视操作系统底层的差异。此外,Docker引擎上的部署是以单元来实现的,而通过将这种方式标准化,系统管理员们能在工作负荷量上面获得更多的弹性。无论是私有服务器或者数据中心虚拟机还是公有云,部署的工作量被基础结构技术的束缚程度都更低,而更多地是被商业政策优先引导。除此之外,Docker引擎的轻量级运行时环境实现了在响应指令变化时所需要的快速扩大(scale-up)放缩(scale-down)功能。
Docker能使系统管理员在任何环境设施下部署和运行任何应用,更快,更可靠。
Docker,用任何工具链和任何语言来构建任何应用的更多相关文章
- Go语言中的打包和工具链
包 所有Go语言的程序都会组织成若干组文件,每组文件被称为一个包.这样每个包的代码都可以作为很小的复用单元,被其他项目引用. 包名惯例 给包命名的惯例是使用包所在目录的名字.并不需要所有包的名字都与别 ...
- 从大厂DevOps工具链部署,看现代产品的生命周期管理
目录 1. 认识DevOps 1.1. DevOps工具链 1.2. CI 持续集成(Continuous Integration) 1.3. CD(持续交付 & 持续部署) 1.4. Agi ...
- X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)
故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...
- gcc工具链简述
工具链软件包括BINUTILS.GCC.GLIBC.GDB等. BINUTILS是二进制程序处理工具,包括链接器.汇编器等目标程序处理的工具. GCC(GNU Compiler Collection) ...
- GNU工具链学习笔记
GNU工具链学习笔记 1..so为动态链接库,.a为静态连接库.他们在Linux下按照ELF格式存储.ELF有四种文件类型.可重定位文件(Relocatable file,*.o,*.a),包含代码和 ...
- cmake工具链
命令project() enable_language()try_compile() 变量CMAKE_<LANG>_COMPILERCMAKE_<LANG>_COMPILER_ ...
- DevOps时代,企业数字化转型需要强大的工具链
伴随时代的飞速进步,中国的人口红利带来了互联网业务的快速发展,巨大的流量也带动了技术的不断革新,研发的模式也在不断变化.传统企业纷纷效仿互联网的做法,结合DevOps进行数字化的转型. 通常提到Dev ...
- X86给龙芯笔记本编译本地工具链(未完待续)
我买了一台龙芯2F的笔记本来当玩具. 买回来发现,这台笔记本上没法安装软件,因为既没有软件仓库,也没有GCC. 因此需要构建交叉工具链和构建本地工具链. 下面是我研究如何搞定着一切的笔记. 工具链组件 ...
- 【嵌入式】使用Cross Toolchain构建交叉工具链
Preface 前面编译linux内核的时候,用各种cross版本都不行啊,真是纠结,于是就想着自己也要会编译交叉工具的方法,然后各种尝试,各种问题啊,最后还是没解决(还有其它事情),步骤我都走熟了, ...
随机推荐
- 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法
如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空.2)对于少于100脚的产品,有2种接法: 2.1)OSC_I ...
- kubernetes管理机密信息
一.启动应用安全信息的保护: Secret介绍: 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 ...
- Linux useradd userdel groupadd groupdel gpasswd(组成员管理) id groups
添加用户 useradd [选项] 用户名 -u :指定UID标记号 -d:指定宿主目录,缺省为/home/用户名 -g:指定所属的基本组(组名或GID) -G: 指定所属的附加组(组名或GID) - ...
- mongo批量插入问题(insert_many,bulk_write),spark df转json传入mongo
https://blog.csdn.net/nihaoxiaocui/article/details/95060906 https://xuexiyuan.cn/article/detail/173. ...
- URL编码以及GET和POST提交乱码解决方案 (转)
1. 什么是URL编码. URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服 ...
- jpa @Query()参数设置,:冒号方式、?NO.问号方式、实体类对象参数设置
一.service层事务(update/delete) @Transactional(rollbackFor = Exception.class) 二.@Query()参数设置 ?x 和:XX不能混 ...
- 系统的学习Devops
系统的学习devops 1. 学习一门编程语言 Java python JavaScript 2.了解不同的操作系统概念 线程和并发,套接字,I/O管理,虚拟化,内存存储和文件系统 3.掌握终端生存大 ...
- JVM(二),Java怎样实现一次编译到处运行(平台无关性)
二.Java怎样实现一次编译到处运行(平台无关性) 1.java平台无关性原理 Java源码首先被编译成字节码,再由不同平台的JVM进行解析,JAVA语言在不同的平台上运行时不需要进行重新编译,Jav ...
- LA 6434 The Busiest City dfs
Tree Land Kingdom is a prosperous and lively kingdom. It has N cities which are connected to eachoth ...
- HZOJ 20190727 随(倍增优化dp)
达哥T1 实际上还是挺难的,考试时只qj20pts,还qj失败 因为他专门给出了mod的范围,所以我们考虑把mod加入时间复杂度. $50\%$算法: 考虑最暴力的dp,设$f[i][j]$表示进行$ ...