Docker简介
1、什么是docker
1.1、docker 起源
开源项目
诞生2013年初
GO语言开发实现
遵从了Apache2.0协议
项目代码在GitHub维护
1.2、docker目标
docker项目目标是实现轻量级的操作解约方案。
linux容器(LXC)等技术,在LXC的基础上进行了封装,让用户不需要关心docker的管理,使得操作更为简单。
1.3 、docker三大理念
构建:不仅仅是代码构建,也可以是环境
运输:运输,可以把构建环境放到任何地方。
运行:可以在任何环境运行
一次创建,处处运行
可以做一些整体的交付(不一定是代码 交付,可以是运行环境和代码放到一起构建,可以提供运行环境和代码)
环境不变可以不用docker,看业务使用,不同业务会有不同的契合度。
通俗点解释:
就像docker的log一样,鲸鱼(操作系统)和集装箱(存放各种服务应用),我们需要把各种各样的货物放到鲸鱼身,你得为每件货物考虑,怎么安放(应用程序所需要的环境),考虑货物与货物之间是否合适(应用程序依赖环境是否冲突)。
现在我们只要把货物放入到集装箱里,就可以安全的存放,稳定,方便。
引自:https://www.zhihu.com/question/28300645
1.4docker组成部分
C/S架构
Docker Client
Docker server
注:docker服务端挂掉所有的客户端也会挂掉
1.5、docker 组件
镜像(Image):和虚拟机镜像作用完全一样,但是组成部分不同。
容器(Container):从镜像创建的一个实例,相互之间隔离的,不会像虚拟机那样隔离的彻底。可以理解为简化版的linux环境。
仓库(Repository):镜像仓库,镜像做好可以放进去,所有服务器只要可以连接到仓库,都可以直接下载,相当与yum仓库。docker自己也有一个docker hub。
1.6、docker虚拟化的不同之处
注:hypervisor
Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。
Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
2、为什么使用docker
docker项目的发起人和Docker.Inc的CTO 认为,docker在正确的地点、时间顺应了正确的趋势即高效地构建应用,现在开发者需要能方便地创建运行在云平台的应用,也就是说应用必须能够脱离底层机器,而且同时是任何时间任何地点可获取的。因此开发者需要创建一种分布式应用程序的方式,这也是docker所能够提供的。
docker通过容器来打包应用,这样我们就可以在新的机器上启动这个容器就可以了,这无疑节约了大量的时间,并且大大降低了部署过程中的错误。并且可以支持把代码和容器打包,这样我们就可以直接启动容器做相应的测试,上线。真正做到了一次搭建,处处运行。
2.1、docker在哪几方面具有较大优势
更快的交付和部署
对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成后,运维人员开一直接使用这个容器来部署代码。
docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。
Docker很轻很快!容器启动时间是 秒级,大量地节约开发、测试、部署的时间。
更高效虚拟化
docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
更轻松的迁移和扩展
Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另一个。
更简单的管理
使用docker,只需要小小的修改就可以替代大量更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理
2.2、docker与虚拟机的对比
虚拟机需要运行hypervisor,docker都跑在docker引擎里面,docker不是虚拟机,没有操作系统直接运行应用。
docker无法像虚拟机一样提供完全的资源隔离,甚至好多地方都没有隔离,比如用户空间,一直再填坑,体验新功能需要内核支持。
类别 | Docker | Openstacke/KVM |
部署难度 | 非常简单 | 组件多部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统几乎一致 | VN会占用一些资源 |
镜像体积 | 镜像是MB级别的 | 虚拟机镜像是GB级别的 |
管理效率 | 管理简单 | 组件相互依赖,管理复杂 |
隔离性 | 隔离性高 | 彻底隔离 |
可管理性 | 单进程,不建议启动SSH | 完整的系统管理 |
网络连接 | 比较弱 | 借助Neutron可以灵活组件各类网络架构 |
需要注意:
docker里面只能启动一个单进程,还是在前台,如果挂了docker就直接退出。
docker容器就是一个进程,挂了也就挂了,按照docker理念不需要打开ssh,不需要连接上。 容器挂了再重新启动一个。
docker 管理简单 管理简单以为操作的简单,没有办法想怎么管怎么管,在复杂的环境管理简单就不是优势了。
单进程 可以写一个脚本里面写多个进程解决,但是这有不符合docker理念,只要启动一个就好了。套件可以跑,php+nginx 可以 但是直接跑lnmp就不符合docker的理念了。
2.3、docker改变了什么
2.3.1、官方说明
主要应用场景,把代码和运行环境放到一起,这样就不需要什么代码部署,直接启动容器就是一个服务。不许要环境部署和代码上线
开发谢代码--测试--运维上线 docker 可以避免
docker管理这个流水线,开发保存镜像,测试run起来测试,测试结束,运维run起来跑,(虚拟机太大也可以实现),一次构建到处运行
快速配置开发环境
2.3.2、赵班长总结:
面向产品 :产品交付
面向开发: 简化配置环境
面向测试: 多版本测试
面向运维: 环境一致性
面向架构: 自动化扩容(微服务)
本文主要借鉴赵班长课件
https://www.unixhot.com/