前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >"Docker 引擎:在容器化时代的驱动力"

"Docker 引擎:在容器化时代的驱动力"

原创
作者头像
Java学术趴
发布2023-06-29 18:50:27
1780
发布2023-06-29 18:50:27
举报
文章被收录于专栏:Java全栈·Java全栈·

👨‍🎓作者:Java学术趴 🏦仓库:GithubGitee ✏️博客:CSDN掘金InfoQ云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。

第一章 Docker概述

1.1 Docker简介

  • Docker是一个开源的应用容器引擎,其可以让开发者将应用及应用运行的环境打包到一个轻量级、可移植的镜像中,然后发布到任何流行的Linux、Windows机器上。
  • 官方地址:Docker

1.2 Docker的用途

  • 提供统一的运行环境 : Docker可以提供统一的开发、测试、线上应用的运行环境。Docker = jar/war + 环境
  • 便捷的应用迁移 :Docker确保了统一的运行环境,使得应用的迁移更加便捷。
  • 超快的启动时间 :Docker容器应用,由于直接运行在宿主机系统上,无需启动操作系统,因此可以做到秒级、甚至微秒级的启动。
  • 更轻松的维护和扩展 :Docker公司及各个开源项目团队一起维护了一大批高质量的官方镜像,既可以在生产环境中直接使用,又可以作为基础进一步定制,大大降低了应用服务的镜像制作成本。

1.3 容器和虚拟机的区别

1.3.1 Docker特性差异

Docker容器的本质就是通过容器虚拟技术虚拟出的一台主机,就像虚拟机一样。可以将应用及其运行环境部署在这台虚拟的主机上运行。但容器与虚拟机又有着本质的不同。

  • 虚拟机虚拟化整个硬件环境,包括操作系统,而Docker容器只虚拟化应用程序的运行环境和资源。
  • 虚拟机需要占用更多的资源,包括CPU、内存和磁盘空间,而Docker容器非常轻量级,启动和停止非常快,占用的资源也很少。
  • 虚拟机可以运行不同的操作系统,而Docker容器只能运行相同的操作系统内核。
  • 虚拟机的隔离性更强,应用程序之间相互隔离,而Docker容器的隔离性相对较弱,容器之间可以共享一些资源。
1.3.2 Docker性能差异

Docker容器和虚拟机的性能差异主要取决于应用程序的特性和实际的应用场景。一般来说,相对于虚拟机,Docker容器具有更高的性能和更低的资源消耗,因为Docker容器不需要虚拟化整个操作系统和硬件环境。

  • 启动时间:Docker容器比虚拟机更快地启动,因为Docker容器只需要启动容器进程,并加载容器的文件系统,而虚拟机需要启动整个虚拟硬件环境,包括操作系统和应用程序。
  • 资源消耗:Docker容器占用的资源比虚拟机更少,因为Docker容器共享宿主机的操作系统内核和部分系统资源。
  • 隔离性:虚拟机具有更强的隔离性,因为每个虚拟机都是一个独立的系统,应用程序之间相互隔离。而Docker容器的隔离性相对较弱,容器之间可以共享一些资源。
  • 网络性能:Docker容器在网络性能方面具有优势,因为Docker容器共享宿主机的网络栈,可以实现更快的网络通信。而虚拟机需要通过虚拟网络适配器进行通信,网络性能相对较低。

1.4 Docker系统架构

  • Docker Daemon : Dockerd,Docker守护进程,其监听着Docker API请求并管理Docker对象。例如:镜像、容器、网络等。守护进程还可以与其他守护进程通信以管理Docker服务。
  • 镜像Image :Docker镜像是用于创建 Docker 容器的模板。就像面向对象变成中的类。
  • 容器Container : Docker容器是镜像运行时的实体。就像面向对象编程中类的实例。一个类可以创建出N个实例,那么一个镜像同样也可以创建出N多个容器。每个处于运行状态的容器中都包含着一个或多个相关的应用,其它的运行不会干扰到其他容器,他们之间是相互隔离的。
  • 仓库Registry :Docker镜像仓库用来保存相关的一组镜像,这组镜像具有相同的镜像名称,都与镜像仓库名相同。仓库根据其中的镜像是否可以被公开共享,分为公开库和私有库。
  • 标签Tag :通过Tag标签即可唯一定位一个镜像。即镜像标签其实就是镜像仓库中用于区分各个镜像的一种标识,同一个仓库中的镜像具有不同的标签。
  • 镜像中心 Registry :Docker镜像中心中存放着很多由官方、其他机构或个人创建的Docker仓库,Docker用户可以直接从这些仓库中pull需要的镜像,也可以将自己制作的镜像push到Docker镜像中心。

第二章 Docker引擎

2.1 Docker引擎架构

  • Docker引擎是用来运行和管理容器的核心软件,其现代架构主要由四部分主要组件组成:Docker client,Dockerd、Containerd与Runc。
2.1.1 Docker client
  • Docker客户端,Docker引擎提供的CLI工具,用于用户向Docker提交命令请求。
2.1.2 Dockerd
  • Dockerd,即 Docker Daemon,守护进程。在现代 Dockerd 中主要包含:镜像构建、镜像管理、REST API、核心网络及编排等。其通过 gRPC与Containerd进行通信。
2.1.3 Containerd
  • Containerd,即Container Daemon,该项目的主要功能是管理容器的生命周期。不过,其本身并不会去创建容器,而是调用Runc来完成容器的创建。
  • 这个组件完成了容器了启动、关机、重启等一系列操作,就是不包含创建容器操作,创建容器操作由Runc完成。
2.1.4 Runc
  • Runc,Run Container,是OCI容器运行时规范的实现,Runc项目的目标之一就是与OCI规范保持一致。所以,Runc所在的层也称为OCI层。这使得Docker Daemon中不用再包含任何容器运行时的代码了,简化了Docker Daemon。
  • Runc只有创建容器的作用,其他的全部不负责。其本质是一个独立的容器运行时CLI工具。其在fork出一个容器子进程后会启动该容器进程。再容器进程启动完毕后,Runc会自动退出。
  • 最后真正在运行的容器,并不是Runc,而是由Runc的一个子进程fork出的一个容器在运行。
2.1.5 shim
  • shim(垫片)是实现“Daemonless Containerd(无Docker Deamon容器)”不可缺失的工具,使用容器与Docker Daem解耦,使得Docker Daemon的维护与升级不会影响到运行中的容器。
  • 每次创建容器时,Containerd同时会fork出Runc进程与Shim进程。当Runc自动退出之前,会先将新容器进程的父进程指定为相应的Shim进程。作为容器的父进程。
  • 保持所有STDIN和STDOUT流的开启状态,从而使得当Docker Daemon重启时,容器不会因为Pipe的关闭而终止。
  • 将容器的退出状态反馈给Docker Daemon。

2.2 Docker引擎分类

  • Docker分为两个版本:大版本和小版本
2.2.1 大版本
  • Moby、社区版Docker-CE和企业版Docker-EE。
2.2.2 小版本
  • 从v1.13.1之后,Docker的发布计划发生了变更,每个大版本都出现了两个小版本Edge月版和Stable季版。不过,现在的官网中一般只能看到Stable版本。

以上项目的源代码,点击星球进行免费获取 星球 (Github地址)如果没有Github的小伙伴儿。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一章 Docker概述
    • 1.1 Docker简介
      • 1.2 Docker的用途
        • 1.3 容器和虚拟机的区别
          • 1.3.1 Docker特性差异
          • 1.3.2 Docker性能差异
        • 1.4 Docker系统架构
        • 第二章 Docker引擎
          • 2.1 Docker引擎架构
            • 2.1.1 Docker client
            • 2.1.2 Dockerd
            • 2.1.3 Containerd
            • 2.1.4 Runc
            • 2.1.5 shim
          • 2.2 Docker引擎分类
            • 2.2.1 大版本
            • 2.2.2 小版本
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档