【Docker】容器技术之星 Docker,为你而来 (一)

摘要:Docker是基于Go语言实现的云开源项目,是全球领先的软件容器平台。Docker的理念是Build, Manage and Secure Your Apps Anywhere. Your Way,它可以做到一次封装,多处运行Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。本篇文章从基本相关概念延伸出发,介绍了传统虚拟机技术和容器虚拟化技术,通过自身在实际工作的痛点出发,介绍了Docker是什么,面向开发、运维及企业在实际中Docker的用途,也详细描述了Docker的一些优势。后续的文章中也会陆续发布自己在学习Docker过程中的一些思考和感悟。

基础概念

传统虚拟机技术

虚拟机(virtual machine)是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使得应用程序,操作系统和硬件三者的逻辑不变。

虚拟机的缺点:资源占用多 、冗余步骤多 、启动慢。

容器虚拟化技术

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一的运行。

比较容器虚拟化技术和传统虚拟机技术,有如下不同之处:

  • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上再运行所需应用进程。

  • 而容器内的应用进程直接运行在宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

开发自运维(DevOps)

根据维基百科对DevOps的解释,DevOpsDevelopmentOperations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量的容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

DevOps依然可以做到‘一次构建,随处运行’。它能解决:

  • 更快速的应用交付和部署
  • 更便捷的升级和扩缩容
  • 更简单的系统运维
  • 更高效的计算资源利用

Docker 痛点

作为一名技术管理者,你一定有过如下深刻的体会。

在我们整个项目上线的过程中,必须具备的环境为以下四个环境:开发环境,测试环境,预发环境,生产环境。

每当新入职一名开发人员时,都需要搭建本地的开发环境,由于每个人使用的电脑系统不一致,虚拟机不一致,Linux系统也不一致,为了与开发环境保持一致,你需要搭建一遍相同环境,折腾半天甚至一天过去了。

一名人员入职还可以接受,时间长了,几十名开发人员入职估计你自己都不会接受如此重复的劳动。

开发人员开发完项目,提交到测试环境一切运行正常。发布到预生产环境时候,发现一堆的问题,开发测试好不容易解决终于提交线上,此时你发现少安装软件或者软件版本不一致等各种原因导致线上环境出现问题。我相信,作为一名领导,你让开发、测试、运维背锅实在是不太合情,也不合理。

测试人员经常为配置不同的测试环境浪费大量的时间,还是不能保证和开发环境完全保持一致,开发人员虽然很认真负责地告诉测试人员如何配置测试环境,但还是经常性地遗漏一些配置。

使用Docker,不需要做任何配置,就能保证开发和测试环境完全一致,测试人员只需要关注测试本身就可以了。

运维人员大部分时间都浪费在装软件、修改配置上,重复单调,经常半夜还要起来做紧急扩容、故障机服务迁移。不管是生产环境还是开发环境,只要运维人员部署一次,就可以在不同的硬件和操作系统平台下,在不同的环境自由迁移。

通过Dockerfiel管理Docker镜像,即使系统多次易手、交接文档不全,运维人员也可以快速了解系统是如何搭建的。

Docker是什么

Docker官网的介绍是这样的:

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications....

是不是看了上面这个解释,好像并没有看出来点什么。

如何通俗解释Docker是什么?有个著名的隐喻:集装箱。但是它却起了个“码头工人”(docker的英文翻译)的名字。

在集装箱之前,货物运输没有统一的标准方式进行搬运,于是铁路、公路、海洋等各种运输之间,需要大量的人力作为货物中转,效率极低,而且成本很高。集装箱出现之后,世界上绝大多数的货物运输都可以放到这个神奇的箱子里,然后在公路、铁路、海洋等所有运输场景下,这个箱子都可以不用变化形态直接可以承运,而且中间的中转工作,都可以通过大型机械搞定,效率大大提升。

这个箱子最神奇的地方就是两个字:标准。

提到Docker你就必须想到集装箱,就像logo中,那只鲸鱼的背上背的那些集装箱。

一句话,Docker解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

Docker 的理念

Build, Manage and Secure Your Apps Anywhere. Your Way
Build,Ship and Run Any APP,Anywhere

Docker 用途

开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用 Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 LinuxWindows Server 应用发布新功能。

面向开发人员

Docker 能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。

开发人员使用了 Docker,就不必安装和配置复杂的数据库,也无需在不兼容语言工具链版本之间切换时担心。应用容器化之后,其复杂性就被转移到能够轻松构建、共享和运行的容器中。当有新同事安排到新的代码库时,无需再费时费力地安装软件和解释设置过程。

Dockerfile 文件形式发布的代码使用起来非常简单:首先安装 Docker和编辑器,然后拉取作为 Docker镜像打包在一起的依赖资源,短短数分钟,就能够构建和调试应用了。

面向系统管理员

Docker 简化了软件交付。既能顺利地开发和部署漏洞补丁与新功能,还能够实时扩展应用。

Docker是开发人员和 IT 运维团队的秘密武器。有了 Docker,他们能够自动并安全地构建、交付、测试和部署应用,顺利地进行移植。无需再阅读令人烦恼的Wiki、自述文件、运行手册、便利贴等等陈旧冗余的信息。

使用Docker 的团队确信他们的镜像在开发、预演和生产环境中都能一样工作。新功能和修订都能迅速地悄然部署到客户环境。

面向企业

Docker是现代应用平台的核心,是开发人员与 IT 运维、LinuxWindows 之间的纽带。Docker 既适用于云,也可以在本地部署;既支持传统架构,也支持微服务架构。使用 Docker可以构建、连接、保护和调度容器,从开发到生产全程进行管理。Docker 以最优成本确保应用敏捷、支持云且安全,伴随企业踏上数字转型的征程。

Docker 的优势

作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。

第一,更高效的利用系统资源。

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

第二,更快速的启动时间。

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

第三,一致的运行环境。

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」 这类问题。

第四,持续交付和部署。

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

使用 Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。

而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。

第五,更轻松的迁移。

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。

因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

第六,更轻松的维护和扩展。
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。

简单总结使用Docker 具有以下优势:

  • 轻量,秒级的快速启动速度
  • 简单,易用,活跃的社区
  • 标准统一的打包/部署/运行方案
  • 镜像支持增量分发,易于部署
  • 易于构建,良好的REST API,也很适合自动化测试和持续集成
  • 性能,尤其是内存和IO的开销

此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

以上,容器技术之星Docker,为你而来。

参考文章

Docker-从入门到实践

Docker-中文官网

Docker-官网

相关推荐

微信扫一扫,分享到朋友圈

【Docker】容器技术之星 Docker,为你而来 (一)
返回顶部

显示

忘记密码?

显示

显示

获取验证码

Close