关于docker你可能不知道的事

举报
Mr.Z事顺意 发表于 2023/02/24 15:46:43 2023/02/24
【摘要】 docker出现的背景随着云原生、容器化、微服务、k8s 等技术的发展,容器 Docker 也火了一把,同时也逐渐被软件开发者在实践中进行运用。个人在目前接手的项目、参与的项目或技术交流中,发现 Docker 已经非常普及。对于大多数开发者来说,Docker 之所以被广泛使用,最主要的原因可能就是方便,它提供了一套标准化的解决方案,极大地提升了部署、发布、运维的效率。因此,如果你的项目中目前...

docker出现的背景

随着云原生、容器化、微服务、k8s 等技术的发展,容器 Docker 也火了一把,同时也逐渐被软件开发者在实践中进行运用。个人在目前接手的项目、参与的项目或技术交流中,发现 Docker 已经非常普及。

对于大多数开发者来说,Docker 之所以被广泛使用,最主要的原因可能就是方便,它提供了一套标准化的解决方案,极大地提升了部署、发布、运维的效率。因此,如果你的项目中目前还没有使用 Docker,或者想深入了解一下 Docker,这篇文章值得你一读。
Docker 是什么?

在聊 Docker 是什么之前,我们先来回顾一下传统的产品开发上线涉及到的难点。一款产品从开发到上线,经历了开发环境、测试环境、生产环境等不同的操作系统、运行环境和应用配置等环境。在项目管理中,还涉及到不同版本以及不同版本之间兼容性等问题。

这些问题对开发人员和运维人员都是极大的考验,同时对各方的协作也有一定的要求。不然就会出现”代码在我这里运行的好好的啊“,这种尴尬的局面。而 Docker 的出现就是提供了一套用来解决此类问题的标准解决方案。

Docker

Docker 的口号是”一次创建或配置,可以在任意地方正常运行“。如口号所说,Docker 的出现对于开发和运维人员是一大福音,基于 Docker 可以方便地搞定标准化的发布流程,再也不用纠结不同环境导致的问题了。

其实,Docker 的使用可以理解为:软件是带环境安装的,也就是说,安装的时候把原始环境一模一样的复制过来一份。这样也就消除了不同机器运行结果不同的问题。

那么,Docker 是什么呢?Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从 Apache2.0 协议开源。它可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker 可用于开发应用、交付应用、运行应用等场景。

容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。Docker 允许用户将基础设施中的应用单独分割出来,形成更小的部分容器,从而提高软件交付速度。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版)和 EE(Enterprise Edition: 企业版),通常使用社区版就可以满足大多数业务场景。
Docker 容器与虚拟机的区别

Docker 容器与虚拟机很相似,但它们之间又有着很大的区别。

虚拟机是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。创建虚拟机时,会将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存,每个虚拟机都有独立的硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

虚拟机会消耗大量系统资源和开销,尤其是当多个虚拟机在同一物理服务器上运行时,每个虚拟机都有自己的子操作系统,大量精力以及资源被用于虚拟化的部署和运行上。

容器类似于虚拟机,只是容器不是完整的操作系统,容器通常只包含必要的操作系统包和应用程序,这就是它们轻量级的原因。


Docker 与虚拟机

可以出,传统的虚拟机是在宿主机之上,又添加了一个新的操作系统,这就导致了虚拟机的臃肿,不适合迁移。而 Docker 是直接寄存在宿主机上,完全就会避免大部分虚拟机带来的困扰。

Docker 是一个黑盒的进程,区别于传统的进程,Docker 可以独立出一个自己的空间,不会使得在 Docker 中的行为以及变量溢出到宿主机上。

容器与虚拟机的各项区别:



Docker 的 6 大优势

对比传统的运维发布方式,Docker 有以下 6 大优势:

1、更高效地利用系统资源

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

2、更快的启动时间

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

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

4、持续交付和部署对开发和运维(DevOps)来说,最希望的就是一次创建或配置,可以在任意地方正常运行,使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。

5、更轻松迁移 Docker 确保了执行环境的一致性,使得应用的迁移更加容易,Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户不用担心运行环境的变化导致应用无法正常运行的情况。

6、更轻松的维护和拓展

Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

比较了 Docker 和传统虚拟化方式的不同之处:

    传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用 进程;
    而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。 因此容器要比传统虚拟机更为轻便。
    每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

    开发/运维(DevOps)

更快速的应用交付和部署:

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

更便捷的升级和扩缩容:

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

更简单的系统运维:

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的 BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

更高效的计算资源利用:

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor [管理程序] 支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。