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版本都不行啊,真是纠结,于是就想着自己也要会编译交叉工具的方法,然后各种尝试,各种问题啊,最后还是没解决(还有其它事情),步骤我都走熟了, ...
随机推荐
- 二、Nginx多站点配置(参考宝塔的)分析
一.基于宝塔配置文件分析(站的配置文件) 新增的站点配置即添加server并包含在nginx内 查找文件: 文件内容: 二.伪静态 伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文 ...
- 使用 Eclipse 构建的时候会出现 run as 中没有 maven package 选项
注:该方法来自我学习时别人分享的出现问题的解决方法,并没有亲自测试,仅供参考 是因为建的是普通 java 工程,需要把它转换成 maven project. 1.右键工程--maven--Disabl ...
- 洛谷 P2939 [USACO09FEB]改造路Revamping Trails
题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...
- js页面重定向跳转代码总结(待续)
情形一:东八区,浏览器中文跳转 <script type="text/javascript"> var sLang = (navigator.language ? na ...
- DNS如何工作
上一篇文章(什么是DNS)中,我们解释了 DNS 所涉及到的一些术语,接下来我们来看看 DNS 这个系统是如何工作的? 从高层次上看,这个系统非常简单,但是当你关注细节时,它又非常复杂.总的来说,它是 ...
- 更改centos的网卡名
Centos6更改网卡名的方法: 1.修改皮配置文件/etc/udev/rules.d/70-persistent-net.rules # This file was automatically ge ...
- Java-DatabaseConnectionPool工具类
package org.zxjava.test; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.s ...
- HDU 5335 Walk Out BFS 比较坑
H - H Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 使用matplotlib绘制常用图表(3)-其他图表绘制
一.绘制三点图 """ 三月份最高气温 a = [12,15,18,6,7,5,6,8,9,10,15,10,4,5,11,10,5,6,12,15,10,5,14,10 ...
- AtCoder AGC031D A Sequence of Permutations (群论、置换快速幂)
题目链接 https://atcoder.jp/contests/agc031/tasks/agc031_d 题解 这居然真的是个找规律神题... 首先要明白置换的一些基本定义,置换\(p\)和\(q ...