Docker是Docker.lnc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在Github上,基于Go语言并听从Apache2.0协议开源
Docker是经过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。因为Docker经过操做系统层的虚拟化实现隔离,因此Docker容器在运行时,不须要相似虚拟机(VM)额外的操做系统开销,提升资源利用率前端
构建 运输 运行linux
Docker的组成部分docker相似于cs结构
Docker Client
Docker Server
咱们能够将docker启动比喻成Docker server,咱们执行命令的时候至关于Docker client git
[root@docker1 ~]# docker version Client: Version: 18.09.0 API version: 1.39 Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:48:22 2018 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.0 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 4d60db4 Built: Wed Nov 7 00:19:08 2018 OS/Arch: linux/amd64 Experimental: false
提示:目前的版本是若是docker的服务端挂了,运行在docker上的全部容器都会挂掉github
镜像(Image)
容器(Container)
仓库(Repository)
镜像介绍:相似于虚拟机,做用和虚拟机是同样的,惟独是组成部分会有些区别。简单的说若是咱们想启动一个容器就必需要有镜像web
容器介绍: docker是经过容器来运行业务的,就像运行一个kvm虚拟机是同样的。容器其实就是从镜像建立的一个实例。
咱们能够对容器进行增删改查,容器之间也是相互隔离的。和虚拟机最大的区别就是一个是虚拟的一个是隔离的。
缺点:不会像虚拟机那样隔离的那么完全,咱们能够将容器理解为简化版的linux,有进程运行在里面。docker
仓库介绍: 根据docker的三大理念构建 运输 运行,咱们就须要一个仓库来存放镜像
简单的说:咱们将镜像建立完成就须要存放到仓库里面,进行集中式的管理。仓库这点相似于github,docker也有一个dockerhub,他也是一个公共对外的仓库。数据库
简单解释,VMware运行在操做系统上,而docker是直接运行在应用上。因此docker没法提供一个像VMware那样彻底的隔离,甚至到不少地方都没有进行隔离,好比说用户空间。
这里能够解释一下 若是你用的是centos5版本那你就别想安装docker了,若是是centos6的你能够看一眼。由于内核版本比较低,可是若是使用乌班图就能够,由于乌班图的内核更新的比较快。
若是公司服务器是centos5和centos6 用docker就须要升级内核,相对比较麻烦.centos
类别 | Docker | openstack/KVM |
---|---|---|
部署难度 | 很是简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统几乎一致 | VM会占用一些资源 |
镜像体积 | 镜像是MB级别 | 虚拟机镜像GB级别 |
管理效率 | 管理简单 | 组件相互依赖,管理复杂 |
隔离性 | 隔离性高 | 完全隔离 |
可管理性 | 单进程、不建议启动SSH | 完整的系统管理 |
网络链接 | 比较弱 | 借助Neutron能够灵活组件各种网络架构 |
提示:在这里能够简单的说一下,有些场景是不适合用到docker。例如我前端web使用docker,此时docker挂掉了,里面不会像数据库那样有数据写入。这时候我重新起一个docker就能够了。因此有的场景是不适合使用docker的安全
这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各类配置不同的平 台(软件、系统),Docker在下降额外开销的状况下提供了一样的功能。它能让你将运行环境和配置放在代码中而后部署,同一个Docker的配置能够在 不一样的环境中使用,这样就下降了硬件要求和应用环境之间耦合度。
2、代码流水线(Code Pipeline)管理bash
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,须要通过不少的中间环境。而每个中间环境都有本身微小的差异,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单很多。
这就带来了一些额外的好处:Docker能提高开发者的开发效率。若是你想看一个详细一点的例子,能够参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。
不一样的开发环境中,咱们都想把两件事作好。一是咱们想让开发环境尽可能贴近生产环境,二是咱们想快速搭建开发环境。
理想状态中,要达到第一个目标,咱们须要将每个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而,咱们却不想每次都须要网络连 接,每次从新编译的时候远程链接上去特别麻烦。这就是Docker作的特别好的地方,开发环境的机器一般内存比较小,以前使用虚拟的时候,咱们常常须要为 开发环境的机器加内存,而如今Docker能够轻易的让几十个服务在Docker中跑起来。
有不少种缘由会让你选择在一个机器上运行不一样的应用,好比以前提到的提升开发效率的场景等
正如经过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker能够整合多个服务器以下降成本。因为没有多个操做系统的内存占用,以及能在多个实例之间共享没有使用的内存,Docker能够比虚拟机提供更好的服务器整合解决方案
Docker提供了不少的工具,这些工具不必定只是针对容器,可是却适用于容器。它们提供了不少的功能,包括能够为容器设置检查点、设置版本和查看两个容器之间的差异,这些特性能够帮助调试Bug。你能够在《Docker拯救世界》的文章中找到这一点的例证。
另一个Docker有意思的使用场景是在多租户的应用中,它能够避免关键应用的重写。咱们一个特别的关于这个场景的 例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码很是复杂,很难处理,从新规划这样一个应用不但消耗时间, 也浪费金钱。
使用Docker,能够为每个租户的应用层的多个实例建立隔离的环境,这不只简单并且成本低廉,固然这一切得益于Docker环境的启动速度和其高效的diff命令。
在虚拟机以前,引入新的硬件资源须要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟,Docker只是建立一个容器进程而无需启动操做系统,这个过程只须要秒级的时间。这正是Google和Facebook都看重的特性。
你能够在数据中心建立销毁资源而无需担忧从新启动带来的开销。一般数据中心的资源利用率只有30%,经过使用Docker并进行有效的资源分配能够提升资源的利用率。
小结: 一句话说明docker的本质就是 低开销(系统文件、内存 共用)的虚拟机
面向产品:产品交付 面向开发:简化环境配置 面向测试:多版本测试 面向运维:环境一致 面向架构:自动化扩容(微服务)