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版本都不行啊,真是纠结,于是就想着自己也要会编译交叉工具的方法,然后各种尝试,各种问题啊,最后还是没解决(还有其它事情),步骤我都走熟了, ...
随机推荐
- 检测udp端口
linux 检测端口是否打开:nc -zuv ip 端口 服务器监听端口:nc -l -u ip 端口(可以发送和接受信息) 客户端检测端口:nc -u ip 端口(可以发送和接受信息) 查看监听的t ...
- 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)
完全平方数 HYSBZ - 2440 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些 数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而 这丝毫不影响他对其他 ...
- SSH框架整合报错org.springframework.web.context.ContextLoaderListener
是因为在导入的jar包中缺少了一个 org.springframework.web_3.1.4.release.jar 在网上下载即可 下载地址: http://www.java2s.com/Code ...
- k8s 1.16.3 yaml声明变化
apiVersion: apps/v1 #变化的 kind: Deployment metadata: name: taint labels: app: taint spec: replicas: 3 ...
- [BZOJ 1095] [ZJOI2007]Hide 捉迷藏——线段树+括号序列(强..)
神做法-%dalao,写的超详细 konjac的博客. 如果觉得上面链接的代码不够优秀好看,欢迎回来看本蒟蒻代码- CODE WITH ANNOTATION 代码中−6-6−6表示左括号'[',用−9 ...
- 洛谷-P2292-L语言(字典树)
链接: https://www.luogu.org/problem/P2292 题意: 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是 ...
- python在window下环境搭建
1.Python安装包下载 地址:https://www.python.org/downloads/windows/ 然后找到对应系统版本的安装包 下载完成后,直接运行exe安装.在安装的时候开业勾选 ...
- MVVM(使用Prism框架)开发WPF
[MVVM]目的是为了分离视图(View)和模型(Model)的耦合——解耦 1.View负责前端展示,与ViewModel进行数据和命令的交互.(双向的数据属性传递,单向的命令属性传递View→Vi ...
- 【Java Web】IDEA如何创建及配置Web项目(多图)
正文之前 在学习Java Web时,第一个遇到的问题就是如何创建或配置Web项目了,今天,就用IntelliJ IDEA 来进行Web项目配置: 创建Web项目 配置web项目 正文 创建Web项目 ...
- java常用数据类型转换
在Java开发过程中经常会涉及到数据类型的转换问题,比如数字型转字符型,字符型转日期型,字符串转数组等等,以及其他类型的强制转换等.经常出现,所以有必要总结一下. 1.如何将字串 String 转换成 ...