1.Docker是什么
Docker是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
2.Docker包含的基本概念
- 镜像(Image):是一个只读的模板,一个独立的文件系统,包括运行容器所需的全部数据,可以用来创建新的容器。
- 容器(Container):容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个镜像的控制中心,主要用来保存镜像。
- 客户端(Client):安装了Docker的系统就相当于一个客户端,可以在该系统上使用docker的命令与 Docker 的守护进程通信。
- 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
3.Docker的优点
- 快速,一致地交付应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期,非常适合持续集成和持续交付的工作流程。 - 响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。 - 在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,可以用更少的资源做更多的事情。
4.Docker与虚拟机(VM)的区别
Docker与VM是两种不同的虚拟化技术,用于在同一台物理服务器上运行多个应用程序,不过他们的工作原理以及资源利用方面有很大的区别。Docker使用半虚拟化的实现方式,相当于是在物理操作系统创建多个进程,每个进程只包含了物理操作系统的一些库文件和应用程序所需要得依赖包。而虚拟机使用的是全虚拟化的实现方式,相当于是在物理操作系统上再创建多个独立的操作系统。两者的主要区别对于如下:
- 启动时间:虚拟机启动时间较长,因为虚拟机需要加载整个操作系统镜像,而Docker容器只需要加载应用程序和依赖库,启动时间较快。
- 资源隔离性:虚拟机提供了完整的操作系统和硬件资源,可以完全隔离不同虚拟机之间的资源。而Docker容器共享操作系统内核,只有在需要的时候才会分配资源,因此Docker容器的隔离性不如虚拟机。
- 资源利用率:Docker容器可以共享宿主机的硬件资源,而虚拟机需要为每个虚拟机分配单独的资源,因此Docker容器的资源利用率较高。
- 应用程序的可移植性:Docker容器可以轻松地移植到不同的宿主机上,而虚拟机需要重新配置和安装操作系统才能在新的宿主机上运行。
- 应用程序的隔离性:Docker容器提供了进程级别的隔离,而虚拟机提供了操作系统级别的隔离。
两者的性能对比如下:
对比项 | Docker | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生 | 有所损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级别 |
封装程度 | 共享主机内核 | 完整的操作系统 |
操作系统 | Linux | 几乎支持所有操作系统 |
5.Docker的常用使用场景
- 简化配置
Docker能让你将运行环境和配置放在代码中然后部署,同一个Docker的配置可以在不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。 - 代码流水线管理
代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。 - 提升开发效率
Docker可以在一台内存不是很大的服务器上轻易的让几十个服务在Docker中跑起来。能够很好实现一台服务部署多个服务,从而避免了不同服务间调用间的网络连接问题。 - 隔离应用
为了节约服务其成本,将多个服务通过Docker部署到同一台服务器上,或者是需要将一个整体的大型应用拆分成松耦合的单个服务进行部署。 - 整合服务器
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker可以比虚拟机提供更好的服务器整合解决方案。 - 调试能力
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。 - 多租户环境
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,避免关键应用的重写,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。 - 快速部署
Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级。