容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档

news2024/10/7 2:28:13

一、Docker

docker是一种开源的应用容器引擎,可以将应用程序和依赖打包成一个可移植的镜像,然后发布到任何支持docker的平台上,也可以实现虚拟化。docker的核心概念有三个:镜像(image)、容器(container)和仓库(repository)。镜像是一个特殊的文件系统,包含了运行容器所需的程序、库、资源、配置等文件。容器是镜像的一个实例,是一个运行时的概念,可以启动、停止、删除等。仓库是存放镜像的地方,可以是公开的或私有的,可以从仓库中拉取或推送镜像。

  1. 镜像(Image): 镜像是Docker中的基本构建块,它是一个轻量级、独立的可执行软件包,其中包含运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和配置文件等。镜像是只读的,意味着一旦构建完成,其内容不可更改。开发者可以使用Dockerfile来定义镜像的构建规则,然后通过Docker命令将镜像构建出来。镜像可以用于创建Docker容器。
  2. 容器(Container): 容器是基于镜像创建的运行实例。它是一个隔离的运行环境,可以在其中运行应用程序。容器包含了镜像的副本,但它可以在镜像的基础上进行读写操作,因此容器是可变的。容器在运行时与宿主机操作系统隔离,但与宿主机共享内核。这使得容器能够快速启动、轻量级、可移植,同时提供了高度的隔离性和安全性。
  3. 仓库(Repository): 仓库是用于存储Docker镜像的地方,它类似于代码库。仓库可以分为两种类型:公共仓库和私有仓库。公共仓库如Docker Hub,是供公众使用的,开发者可以将自己构建的镜像推送到公共仓库,也可以从公共仓库拉取其他开发者共享的镜像。私有仓库通常是企业内部使用的,用于存储私有镜像,保护公司的知识产权和应用程序代码。开发者可以通过Docker命令将镜像推送到私有仓库,并从私有仓库拉取镜像到自己的环境中使用。

1、什么是容器?

简而言之,容器是计算机上的沙盒进程,与主机上的所有其他进程隔离。这种隔离利用内核命名空间和cgroups, 在 Linux 中已经存在很长时间的功能。Docker一直致力于使这些功能变得平易近人且易于使用。总而言之,容器:

  • 是图像的可运行实例。您可以使用 DockerAPI 或 CLI 创建、启动、停止、移动或删除容器。
  • 可以在本地计算机、虚拟机上运行或部署到云中。
  • 是可移植的(可以在任何操作系统上运行)。
  • 与其他容器隔离,并运行自己的软件、二进制文件和配置。

2、Docker架构

Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护进程,它负责构建、运行和 分发您的 Docker 容器。Docker 客户端和守护程序可以在同一系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护 进程。Docker 客户端和守护程序使用 REST API 通过 UNIX 进行通信 套接字或网络接口。另一个 Docker 客户端是 Docker Compose, 这使您可以处理由一组容器组成的应用程序。

3、Docker成就

  1. 开发者数量:Docker社区吸引了大约18万以上的活跃开发者。这些开发者在Docker的发展和改进中发挥着重要的作用。
  2. 应用数量:Docker容器技术为开发者提供了灵活、轻量级的部署方案,因此已经有大约7万个以上的应用程序使用了Docker容器。
  3. 镜像下载量:Docker Hub是最流行的Docker镜像仓库之一,作为Docker社区共享和存储镜像的平台,它每月的镜像下载量已超过13亿次。这反映了Docker在开发者和用户中的广泛应用程度。

二、K8S

k8s是一种开源的容器集群管理系统,可以实现容器集群的自动化部署、扩展、维护等功能。k8s的核心概念有四个:节点(node)、pod、服务(service)和控制器(controller)。节点是运行容器的主机,可以是物理机或虚拟机。pod是k8s中最小的调度单位,包含了一个或多个紧密相关的容器,共享网络和存储空间。服务是一种抽象层,定义了一组pod的访问方式,通常通过负载均衡来实现。控制器是一种管理pod和服务的机制,可以实现自动化地创建、更新、删除等操作。

Kubernetes提供了一组丰富的功能,包括:

  1. 自动化部署:Kubernetes可以自动部署容器化应用程序,根据定义的配置文件在集群中创建和运行容器。
  2. 负载均衡:Kubernetes支持自动进行服务的负载均衡,确保应用程序可以高效地处理流量。
  3. 自动扩展:Kubernetes可以根据资源使用情况自动扩展应用程序,以满足流量的增加需求。
  4. 自愈能力:Kubernetes具有自愈能力,可以自动检测并替换不健康的容器,确保应用程序的高可用性。
  5. 存储编排:Kubernetes可以管理存储系统,并为应用程序提供持久化存储的解决方案。
  6. 配置和密钥管理:Kubernetes支持管理应用程序的配置和密钥,确保安全性和灵活性。
  7. 水平扩展:Kubernetes可以根据应用程序的需求动态地调整副本数量,实现水平扩展。

1、容器技术演变

传统部署时代:

早期,各个组织是在物理服务器上运行应用程序。 由于无法限制在物理服务器中运行的应用程序资源使用,因此会导致资源分配问题。 例如,如果在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。

虚拟化部署时代:

因此,虚拟化技术被引入了。虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机(VM)。 虚拟化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过虚拟化,你可以将一组物理资源呈现为可丢弃的虚拟机集群。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代:

容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操作系统(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

2、为什么需要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产环境中, 你需要管理运行着应用程序的容器,并确保服务不会下线。 例如,如果一个容器发生故障,则你需要启动另一个容器。 如果此行为交由给系统处理,是不是会更容易一些?

这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary (金丝雀) 部署。

Kubernetes 为你提供:

  • 服务发现和负载均衡Kubernetes 可以使用 DNS 名称或自己的 IP 地址来暴露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚你可以使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。
  • 自动完成装箱计算你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
  • 自我修复Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。
  • 密钥与配置管理Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

三、Docker vs K8s

dockerk8s
容器引擎容器编排器
管理单个主机上的容器管理跨多个主机的容器集群
只支持docker镜像支持多种类型的容器镜像
使用dockerfile定义镜像使用yaml或json文件定义资源对象

容器引擎 vs. 容器编排器:

    • Docker是一个容器引擎,负责在单个主机上创建、运行和管理容器。它允许开发者将应用程序和其依赖项打包为一个轻量级、可移植的容器,从而实现应用程序的快速部署和运行。
    • Kubernetes是一个容器编排器,用于管理跨多个主机的容器集群。它的主要目标是自动化容器化应用程序的部署、扩展和运维,帮助开发者处理复杂的应用程序部署和管理任务。

支持的镜像类型:

    • Docker主要支持Docker镜像。Docker镜像是由Dockerfile定义的,其中包含了应用程序和其依赖项的打包信息。
    • Kubernetes不限制使用特定类型的容器镜像,它可以支持多种类型的容器镜像,包括Docker镜像、containerd镜像等。这使得Kubernetes可以与不同的容器运行时集成。

镜像定义方式:

    • Docker使用Dockerfile来定义镜像的构建规则,Dockerfile中包含了构建镜像所需的步骤和依赖项。
    • Kubernetes使用YAML或JSON文件来定义资源对象,其中包括Pod、Service、Deployment等。资源对象中通常包含容器镜像的信息,用于定义容器的运行方式和配置。

四、Docker Swarm vs K8s

k8s和Docker Swarm都是流行的容器编排工具,但它们有不同的特点和优势。

● k8s是一个独立于docker的项目,由Google创建并由云原生计算基金会(CNCF)管理。它支持多种容器运行时,如docker、rkt、containerd等。Docker Swarm是docker公司的容器编排系统,使用标准的docker API接口,与docker深度绑定。

● k8s提供了更多的功能和灵活性,如服务发现、健康检查、自动伸缩、更新升级、资源管理等。它还支持应用模板配置、标签选择器、服务要求等,可以实现复杂的调度策略。docker swarm相对简单直接,主要侧重于容器的部署和扩展。

● k8s有一个更大更活跃的社区,有很多开源项目和企业支持。它已经成为容器编排领域的事实标准。docker swarm相对较小较新,社区活跃度不高。

● k8s的学习曲线比较陡峭,需要掌握很多概念和命令。它的安装和配置也比较复杂。docker swarm使用简单方便,容易集成到现有系统。它的安装和配置也比较简单。

五、K8s弃用Docker?

k8s官方对于去掉docker的原因有以下几点解释:

  • k8s去掉的其实是dockershim,这是一个在kubelet和docker之间的适配器,用来将docker的接口转换为k8s所需的CRI(容器运行时接口)。这样做是为了简化k8s的架构,提高性能和安全性,以及支持更多的容器运行时。
  • k8s并没有完全弃用docker,而是弃用了docker作为容器运行时的支持。这意味着k8s将不再使用docker来创建和运行容器,而是使用其他符合CRI标准的运行时,如containerd或CRI-O123。这样做的原因是docker不符合CRI标准,而且需要一个叫做dockershim的中间层来适配k8s的API。
  • k8s去掉docker并不意味着docker就没有用了,或者你不能或者不应该用docker作为开发工具。docker仍然是构建容器镜像的非常有用的工具,而且它生成的镜像是符合OCI(开放容器倡议)标准的。这意味着任何用docker构建的镜像都可以在k8s中与其他容器运行时正常工作。所以你不需要担心你的docker镜像会失效或者不兼容。


如果文章对你有帮助,欢迎关注+点赞!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/775665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT中QTimer的循环时间与槽函数执行时间以及在事件循环中触发,不同时间的结果分析

目录 当循环时间小于槽函数时间时: 当循环间隔时间大于槽函数时间时: 当存在两个定时器器,其中一个还是间隔100ms,另一个间隔1000ms: 当两个定时器的循环周期大于槽函数执行时间时 当在主程序中添加一个for循环…

怎么把视频转为gif动态图,3个方法轻松转换!

如何将视频转换为GIF动态图呢?相信许多人在日常聊天中喜欢使用各种有趣的表情包。每当互联网上出现一些有趣的热门视频时,我们也往往会看到许多相关的GIF表情包。那么我们应该如何将自己的视频或者一些有趣的视频制作成GIF动态图呢?下面我就为…

从C语言到C++_27(AVL树)概念+插入接口实现(四种旋转)

目录 1. AVL树的概念 2. AVL树结点和树的定义 3. AVL树的插入(未包含旋转) 4. AVL树的旋转 4.1 右右_左单旋 4.2 左左_右单旋 4.3 左右双旋 4.4 右左双旋 5. AVL树的验证 6. AVL树的删除(了解)和性能 7. AVL树插入验证完整代码 8. AVL树笔试…

下载pdm遇到的坑:Could not find a version that satisfies the requirement pdm

pip install pdm遇到的问题: Could not find a version that satisfies the requirement pdm (from versions: ) No matching distribution found for pdm检查了版本后发现,python版本在3.6,pdm不支持该版本 换成python3.7版本,则…

【力扣算法14】之 15. 三数之和 python

文章目录 问题描述示例1示例2示例 3提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果 完结 问题描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] num…

python编程语言之数据类型进阶操作

数值常用操作 python常用关于数值,数学常用的模块:math(数学),random(随机),numpy(科学计算),pandas(数据读写,数据分析&…

Yalmip入门教程(3)-约束条件的定义

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译:https://yalmip.github.io/tutorials/ 之前的博客简单介绍了约束条件的定义方法,接下来将对其进行详细介绍。 首先简单复习一下: 1.定义约束条件可以使用矩阵拼接…

如何通过nvm管理多个nodejs版本

随着前端项目的越来越多,不同项目使用的nodejs版本可能不一样,导致在切换不同项目时需要更换不同的nodejs版本,非常麻烦。本次推荐使用nvm进行多个nodejs版本的统一管理。 1、nvm的下载 nvm全称Node Version Manager,即Node版本管…

科技政策 | 2023年广东省省级企业技术中心(第22批)认定开始啦!

原创 | 文 BFT机器人 原文链接: http://gdii.gd.gov.cn/zwgk/tzgg1011/content/post_4218083.html 各企业请注意,2023年广东省省级企业技术中心(第22批)认定已经开始了,广东省工业和信息化厅接收资料截止时间为2023年…

【Java基础教程】Java学习路线攻略导图——史诗级别的细粒度归纳,持续更新中 ~

Java学习路线攻略导图 上篇 前言1、入门介绍篇2、程序基础概念篇3、包及访问权限篇4、异常处理篇5、特别篇6、面向对象篇7、新特性篇8、常用类库篇 前言 🍺🍺 各位读者朋友大家好!得益于各位朋友的支持和关注,我的专栏《Java基础…

Python实战项目——物流行业数据分析(二)

今天我们对物流行业数据进行简单分析,数据来源:某企业销售的6种商品所对应的送货及用户反馈数据 解决问题: 1、配送服务是否存在问题 2、是否存在尚有潜力的销售区域 3、商品是否存在质量问题 分析过程: 依旧先进行数据处理 一…

vue Duplicate keys detected: ‘‘. This may cause an update error. found in

错误原因: 在使用v-for的时候,都要必须加上一个唯一的key值,key的值写成一样的了。所以就导致了警告。尽量不要使用index下标作为key值 换成后台数据返回的id或者i*随机数作为key值就好

linux中快速定位软件安装位置

linux中快速定位软件安装位置步骤如下: 根据进程的名字定位进程ID ps -ef | grep redis通过进程id查找软件安装位置 ll -l /proc/100788/cwd原理说明: linux中进程启动后,会在/proc/目录下新建进程工作目录; 目录规范为:/proc/…

寻找下一个生成式 AI 独角兽,亚马逊云科技创业加速器火热招募中!

生成式AI让人工智能技术又一次破圈,带来了机器学习被大规模采用的历史转折点。它正在掀起新一轮的科技革命,为人类带来前所未有的颠覆性的影响,而诸多创业者也应势而上,寻求创新机遇。生成式AI可以创造全新的客户体验、提高企业内…

将数字孪生系统接入 CesiumJS,能为智慧城市项目带来怎样的改变?

数字孪生系统接入 CesiumJS 的契机,正是智慧城市项目的需要。因为许多智慧城市项目中包含了大量地形、倾斜摄影、DOM、DEM 等 GIS 数据,那么为了能够在数字孪生系统中导入这些 GIS 数据,同时让这些数据在以可视化形式表现出来后,还…

C++-17. 电话号码的字母组合

题目来源:力扣 题目描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输…

【MySQL】数据不存在则插入

系列文章 C#底层库–MySQLBuilder脚本构建类(select、insert、update、in、带条件的SQL自动生成) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129179216 C#底层库–MySQL数据库操作辅助类(推荐阅读&#xff0…

全面认识二极管,一篇文章就够了

电子设计基础元器件 二极管,小小二极管,大大用途。 ... 矜辰所致目录 前言一、二极管基础知识1.1 什么是二极管1.2 二极管的组成1.3 二极管的原理 二、二极管特性2.1 伏安特性曲线图2.2 温度的影响2.3 关于击穿 三、 二极管的参数正向连续电流和平均整…

银行金融风险管理面试问题汇总(附答案)

最近有些学员在咨询换工作的事,包括一些金融上市公司的高管。我收集了一些金融风险管理面试问题相关资料,希望能帮助大家。记得收藏此文章,以防之后找不到文章。 风险经理识别和分析潜在的公司风险,并找到减少或避免风险的方法。…

pve (群辉、软路由、win/linux)折腾日记

目录 生命不息,折腾不止名词解释硬件参数装机PVE安装下载pveultraISO 把镜像写入u盘rufus把镜像写入U盘bios设置U盘启动安装pve系统 ssh连接pvepve的使用安装pvetools安装ubuntu-server系统ubuntu更换国内源ubuntu安装docker更改docker国内源docker环境下安装青龙 安…