Code前端首页关于Code前端联系我们

Docker 概念文章对此解释得最清楚,让我们从软件容器开始...

terry 2年前 (2023-09-25) 阅读数 44 #后端开发

1 让我们从了解容器开始

1.1 什么是容器?

首先我们看一下容器更正式的解释

容器的一句话总结:容器将软件打包成标准化的单元,用于开发、交付和部署。

  • 容器映像是轻量级、可执行的独立软件包,其中包含运行软件所需的一切:代码、运行时、系统工具、系统库和设置。
  • 适用于基于 Linux 和 Windows 的应用程序的容器化软件,可在任何环境中一致运行。
  • 容器使软件独立于外部环境的差异(例如开发和登台环境之间的差异),有助于减少在同一基础设施上运行不同软件的团队之间的时间冲突。

我们看一个比较通俗的容器解释

如果非要通俗地形容容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具一样,衣柜可以放置各种衣服和鞋架。它们适合所有类型的鞋子。我们现在所说的容器可能更多是面向应用的,比如网站、程序,甚至是系统环境。 Docker概念一文说得最清楚,从软件容器开始吧…

1.2 物理机、虚拟机和容器示意图

虚拟机和容器之间的比较稍后会详细介绍。这里我们只是借用网络上的图片来加深对物理机、虚拟机和容器的理解。 。

物理机Docker概念一文说得最清楚,从软件容器开始吧…

虚拟机:Docker概念一文说得最清楚,从软件容器开始吧…

容器:Docker概念一文说得最清楚,从软件容器开始吧…

借助上面三个抽象图,我们可以大致概括一下:容器虚拟的是操作系统而不是硬件。容器共享同一组操作系统资源。虚拟机技术是将一组硬件虚拟化,然后在其上运行整个操作系统。因此,容器的保温水平会稍低一些。


相信通过上面的解释,大家对容器这个陌生却又熟悉的概念有了初步的了解。我们来谈谈 Docker 的一些概念。

2 来说说Docker的一些概念

Docker概念一文说得最清楚,从软件容器开始吧…

2.1 什么是Docker?

说实话,Docker 是什么并不容易说清楚。我分四点来解释一下什么是Docker。

  • Docker 是全球领先的软件容器平台。
  • Docker使用Google推出的Go语言基于cgroup、namespaceLinux内核AUFS类FS开发和实现等等。 技术对进程进行封装和隔离,是操作系统层面的虚拟化技术。 由于隔离进程独立于宿主机和其他隔离进程,因此也称为容器。 Docke 最初是基于 LXC 实现的。
  • Docker 可自动执行重复性任务,例如设置和配置开发环境,使开发人员能够专注于真正重要的事情:创建出色的软件。
  • 用户可以轻松创建和使用容器并将应用程序放置在其中。容器还可以用于版本控制、复制、共享和修改,就像常规代码管理一样。
Docker概念一文说得最清楚,从软件容器开始吧…

2.2 Docker 思想

  • 容器
  • 标准化: ①传输方式 ②存储方式 ③ API 接口
  • 隔离

2.3 Docker 特性容器

  • 轻量级

    在一个运行的 Docker 容器中在计算机上,可以共享本机操作系统的内核;它们可以快速运行并且只需要少量的计算和内存资源。镜像是通过文件系统层构建的,并共享一些共享文件。这可以减少磁盘使用并更快地传输图像。

  • 标准

    Docker 容器基于开放标准,可以在所有主要版本的 Linux、Microsoft Windows 和任何基础设施上运行,包括虚拟机、裸机服务器和云。

  • 安全

    Docker为应用程序提供的隔离不仅限于彼此之间的隔离,还包括与底层基础设施的独立。默认情况下,Docker提供了最强的隔离性,因此如果应用程序出现问题,也只是单个容器的问题,不会影响整个机器。

2.4 为什么使用 Docker

  • Docker 镜像提供了除内核之外的整个运行时环境,保证了应用程序运行时的一致性,不再是“这段代码在我的机器上没问题”。此类问题; - 一致的工作环境
  • 可以达到秒甚至毫秒的启动时间。这极大地节省了开发、测试和部署时间。 ——更快的启动时间
  • 避免使用公共服务器,因为其他用户很容易影响资源。 ——隔离性
  • 擅长处理集中突发的服务器使用压力; ——弹性伸缩、快速扩展
  • 在一个平台上运行的应用程序可以轻松迁移到另一个平台,而不必担心实施环境的变化导致应用程序出现故障。 ——易于迁移
  • 使用Docker,您可以通过定制应用镜像来实现持续集成、持续交付和部署。 ——持续交付和部署

每当我们谈到容器时,我们就不得不将其与虚拟机进行比较。在我看来,谁取代谁并不重要,重要的是两者能够和谐共存。

三个容器VS。虚拟机

简单来说:容器和虚拟机在资源隔离和分配方面有着类似的优势,但功能不同,因为容器虚拟的是操作系统,而不是硬件。因此,集装箱更容易运输且效率更高。

3.1两者对比表

传统的虚拟机技术是虚拟出一套硬件,在上面运行整个操作系统,然后在系统上运行所需的应用进程;虽然容器中的应用程序进程直接在主机内核中运行,但容器没有自己的内核,也没有硬件虚拟化。因此,容器比传统虚拟机更轻。 Docker概念一文说得最清楚,从软件容器开始吧…

3.2 容器和虚拟机 (VM) 总结​​

Docker概念一文说得最清楚,从软件容器开始吧…
  • 容器是一种应用层抽象,用于将代码和依赖资源打包在一起。 多个容器可以在同一台计算机上运行,​​共享操作系统内核,但每个容器都作为用户空间中的独立进程运行。与虚拟机相比,容器占用空间更少(容器镜像的大小通常只有几十兆)并且可以瞬间启动
  • 虚拟机 (VM) 是物理硬件的抽象,用于将单个服务器转变为多个服务器。 虚拟机管理程序允许在一台计算机上运行多个虚拟机。每个虚拟机都包含一个完整的操作系统、一个或多个应用程序、必要的二进制文件和库资源,因此占用大量空间。而且 VM 启动速度非常慢

在Docker官网上,我们知道了Docker的这么多优点,但是没有必要完全否定虚拟机技术,因为它们有不同的使用场景。 虚拟机更擅长完全隔离整个运行环境。例如,云服务提供商经常使用虚拟机技术来隔离不同的用户。而Docker通常用于隔离不同的应用程序,例如前端、后端和数据库。

3.3 容器和虚拟机可以共存

在我看来,谁取代谁并不重要,但它们可以和谐共存。 Docker概念一文说得最清楚,从软件容器开始吧…


Docker中有三个非常重要的基本概念。如果你理解了这三个概念,你就会理解整个 Docker 生命周期。

Docker 的四个基本概念

Docker 包括三个基本概念

  • Image(图像)
  • Container(容器)
  • Repository(存储库)

理解了这三个概念,你就明白了整个Docker的生命周期Docker概念一文说得最清楚,从软件容器开始吧…

4.1图-特殊文件系统

操作系统分为内核和用户空间。对于Linux,内核启动后将安装根文件系统以提供用户空间支持。 Docker的镜像(Image)相当于根文件系统。

Docker镜像是一种特殊的文件系统。除了提供运行容器所需的程序、库、资源、配置和其他文件外,它还包含一些准备运行的配置参数(例如匿名卷、环境变量、用户等)。 镜像不包含任何动态数据,创建后其内容不会改变。

Docker在设计时,充分利用了Union FS技术,将其设计为分层存储架构。镜像实际上是由多层文件系统组成的。

镜像构建完成后,会逐层构建,前一层是下一层的基础。每一层构建完成后,就不会再改变。对下一层的任何更改仅发生在其自己的层上。  例如删除上一级文件的操作,并没有真正删除上一级文件,而只是将当前级别的文件标记为已删除。当最终容器启动时,虽然该文件将不可见,但该文件实际上将始终跟随图像。因此,构建镜像时需要特别小心。每个层应该只包含需要添加到该层的内容。在图层构建完成之前,需要清理任何多余的东西。

分层保存功能还可以轻松重复使用和自定义图像。您甚至可以使用之前构建的图像作为基础图层,然后进一步添加新图层以调整所需内容并创建新图像。

4.2 容器(Container)——镜像执行环境的实体

镜像(Image)和容器(Container)之间的关系就像面向对象编程中的类和实例。图像是静态的定义。 容器是镜像运行时实体。容器可以创建、启动、停止、删除、暂停等

容器的本质是进程,但与直接运行在宿主机上的进程不同,容器进程运行在自己独立的命名空间中。前面提到,镜像使用分层存储,容器也是如此。

容器存储层的生命周期与容器相同。当容器死亡时,容器存储层也会死亡。因此,当容器被删除时,存储在容器存储层中的任何信息都将丢失。

根据 Docker 最佳实践要求容器不得向其存储层写入任何数据并且容器的存储层必须保持无状态。 所有文件写入操作都应使用卷或链接主机目录。对这些位置的读取和写入将绕过存储容器层,直接在主机(或网络存储)上进行。读写,其性能和稳定性更高。数据卷的生命周期与容器无关。如果容器死亡,数据卷不会死亡。因此使用完数据量后,可以随意删除容器并重新启动,不会丢失任何数据。

4.3 存储库 - 存储镜像文件的集中位置

镜像构建完成后,可以轻松在当前主机上运行。但是如果您需要在其他服务器上使用该镜像,则需要一个集中的镜像存储和分发服务。 DockerRegistry就是这样一个服务。

Docker注册中心可以包含多个存储库(repositories);每个存储库可以包含多个标签;每个标签对应一个图像。所以:镜像仓库是Docker用来集中存储镜像文件的地方,类似于我们之前使用的代码仓库。

通常,存储库包含同一软件不同版本的映像,并且标签通常用于每个软件版本。我们可以确定该映像是该软件的哪个版本,格式为 :。如果未指定标签,则最新的将用作默认标签。

这里有DockerRegistry公共服务和DockerRegistry私有服务的概念:

DockerRegistry公共服务是一个Registry服务,对用户开放,允许用户管理镜像。通常,此类公共服务允许用户免费上传和下载公共镜像,并且可以为用户提供管理私有镜像的付费服务。

最常用的公共注册表服务是官方的Docker Hub,它也是默认的注册表,在hub.docker.com/上有大量高质量的官方镜像。在中国访问Docker Hub可能会很慢。国内也有一些云服务商提供类似Docker Hub的公共服务。例如石速云镜像库、网易云镜像服务、DaoCloud镜像市场、阿里云镜像库等。 。 Docker官方提供了Docker注册中心镜像,可以直接作为私有注册中心服务使用。开源的DockerRegistry镜像仅提供了DockerRegistryAPI的服务器端实现,足以支持docker命令,不影响使用。但它不包括图形界面,以及图像维护、用户管理和访问控制等高级功能。


Docker的概念基本讲解完了。最后,我们来谈谈:构建、交付和运行。

最后五个词:Build、Ship 和 Run

如果你搜索 Docker 官方网站,你会发现以下几个词:“Docker - Build、Ship 和 Run Any App,Anywhere”。那么构建、交付和运行到底是做什么的呢? Docker概念一文说得最清楚,从软件容器开始吧…

  • 构建:镜像就像一个容器,包含文件、运行时和其他资源。
  • 船舶(传输镜像):主机与仓库之间的传输。这里的仓库就像是一个超级码头。
  • Run(运行镜像):当前镜像是一个容器,容器正在运行程序。

运行Docker的过程就是去仓库,将镜像拉取到本地,然后使用命令将镜像启动到容器中。因此,Docker常被称为docker或docker,与Docker的中文译名“搬运工”如出一辙。

第六总结

本文主要详细讲解Docker中的一些常用概念,但不包括安装Docker、使用镜像、容器如何工作等内容。希望读者通过阅读书籍和官方文档来掌握这一部分。如果你觉得看官方文档有困难,推荐这本书《Docker技术入门与实战第二版》。

作者:Snailclimb
链接:https://juejin.im/post/5b260ec26fb9a00e8e4b031a
来源:掘金
版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门