1、Docker是什么?
docker是开源的应用容器引擎,我们可以理解为一个轻量级的“虚拟机”,开发者可以打包自己开发的应用或程序到一个可移植的容器中去,然后发布到任何流行的linux机器上,由此可见docker为我们的开发和部署带来了极大的方便和稳定性,我们还有什么理由错误它呢?
2、为什么要用docker?
作为当前一种火爆而新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。具体体现如下:
更高效的利用系统资源
我们可以这样去理解,因为容器不需要进行硬件虚拟化以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高,无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
更快速的启动时间
传统的虚拟机技术启动应用服务时基本上处在分钟级别,因为而我们现在所认识到的Docker容器是直接运行于宿主内核,不需要大动干戈将完整的操作系统,【举个不恰当的例子,手动挡和自动挡汽车,手动挡需要一个完整的操作步骤->踩离合->踩刹车->挂一档->拉手刹->抬离合->抬刹车相当于把内部结构都跑了一遍屁颠地转了一圈,而自动挡就是踩刹车->挂挡->拉手刹->起步 走你,运行速度可见一斑。只是个例子希望学习的小伙伴能理解】就可以做到秒级、甚至不夸张的说毫秒级的启动时间,大大的节约了开发、测试、部署时间。
一致的运行环境
做开发的程序员应该都知道“开发过程中环境一致的重要性”。期很大的程度上是由于开发环境、测试环境以及生产环境的不一致而导致有些“错误”,我们熟称“bug”并没有在开发过程中被捕获发觉,而Docker的镜像提供了除内核外完整的运行时环境,确保了应用环境的一致性,从而极大的避免了,程序员与产品经理之间的“扫雷矛盾”,【FXXX,这不是我写的代码】、【是不是你写的代码,本地没有测试吗?】等等诸如此类的问题。
持续缴费和环境部署
对开发和运维的工程师来说,最最希望的就是一次创建或配置,可以在任意的服务上运行,使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署代码和服务,开发人员就可以通过Dockerfile来进行构建镜像,并结合持续集成系统进行测试,而运维人员则可以直接在生产环境中快速完成部署该镜像,甚至是结合持续部署系统进行自动化部署。
而且使用Dockerfile使镜像构建透明化,不仅仅是开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需要的条件,帮助更好的生成环境中部署该镜像。
更轻松的迁移
由于Docker确保了执行环境的一致性,从而使得我们的应用的迁移变得更加容易。Docker可以在很多平台上运行所需的服务,不管是“物理机“也好”虚拟机“也罢甚至是“公有云“、“私有云“乃至”笔记本“,其运行的结果都是一致的,因此用户可以很轻松的将在一个平台运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
更轻松的维护和扩展
Docker使用的分层存储以及镜像的技术,使得应用重复的部分进行复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也同样变得简单明了。此外Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境中使用,又可以作为基础进一步定制化,大大的降低了应用服务的镜像制作成本。
对比传统虚拟机总结
特性 | 启动 | 硬盘使用 | 性能 | 系统支持量 |
---|---|---|---|---|
虚拟机 | 分钟级 | 一般为 GB | 弱 | 一般几十个 |
容器 | 秒级 | 一般为 MB | 接近原生 | 单机支持上千个容器 |
Docker的主要用途:
- 提供一次性环境,例如:本地测试其他软件、持续集成的时候提供单元测试和构建的环境;
- 提供弹性的与服务,因此Docker容器可以随时开关,最适合动态扩容和缩放不过了;
- 我们一直常说的微服务架构,Docker就是为微服务而生的组建微服务架构,通过多个容器,一台机器可以运行多个服务,因此在本机就可以模拟出微服务架构。
Docker基本概念
Docker三大法器:镜像、容器、仓库。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接pull他人构建好的镜像直接使用
- 镜像:Docker镜像就是一个“只读”的模板,可以用来创建Docker容器。例如:一个镜像可以包含一个完整的Centos操作系统环境,里面仅安装了用户所需要的其他应用程序。
- 容器:从创建镜像并运行其实例,它可以被启动、开始、停止、删除每个容器都是相互独立,相互隔离的、保证安全的平台。对应的虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和运行在上面的应用。
- 仓库:是集中存放镜像的地方有时候会把与注册服务器的概念弄混淆,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像。其仓库分为:公开仓库(public)和私有仓库(private)两种形式。最大的公开仓库是Docker Hub,存放了庞大的镜像供用户下载。