Docker与Kubernetes学习

news2024/11/15 5:05:38

基本概述

Docker 是一个流行的容器化平台,允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API,使开发人员能够构建和管理容器化应用程序,包括 Docker Engine、Docker Hub 和 Docker Compose。

Kubernetes 是一个开源容器编排平台,可自动执行容器化应用程序的部署、扩展和管理。 Kubernetes 提供了一组 API 和工具,使开发人员能够跨多个主机和环境大规模部署和管理容器化应用程序。

什么是 Docker

Docker 是一个开源平台,使开发人员能够在容器内自动部署和管理应用程序。它提供了一种将应用程序及其依赖项打包到称为容器的标准化单元中的方法,该单元可以在任何兼容的系统上运行,而无需担心操作系统或底层基础设施的差异。

作为开发人员或 DevOps 工程师,应该了解以下几个重要的 Docker 概念:

1、容器化
Docker 利用容器化技术创建隔离的环境(称为容器)来运行应用程序。容器是轻量级的,封装了运行应用程序所需的应用程序代码、运行时、系统工具、库和依赖项。这使得应用程序能够在不同的环境中一致地运行,确保无论底层系统如何,它们的行为都是相同的。

2、Docker 镜像
Docker 镜像充当创建容器的模板。它是一个只读快照,包含应用程序代码和所有必要的依赖项。 Docker 镜像是使用 Dockerfile 创建的, Dockerfile 是一个文本文件,指定构建镜像的步骤。 Dockerfile 中的每个步骤代表镜像中的一个层,从而实现镜像的高效存储和共享。

3、Docker Engine
Docker Engine 是 Docker 的核心组件,负责构建和运行基于 Docker 镜像的容器。 Docker 引擎包括管理容器的服务器和允许用户与 Docker 交互的命令行界面(CLI)。

4、Docker Registry
Docker 镜像可以存储在 Registry 中,例如 Docker Hub 或私有 Registry 。Registry 是 Docker 镜像的集中存储库,可以轻松地在不同系统之间共享和分发镜像。开发人员可以从 Registry 中提取预构建的镜像,或推送自己的自定义镜像供其他人使用。

5、容器生命周期
为了运行应用程序,Docker 从镜像创建容器。容器是隔离的,有自己的文件系统、进程和网络接口。它们可以根据需要启动、停止、暂停和删除。 Docker 提供了一组命令和 API 来管理容器的生命周期,从而可以轻松扩展、更新和监控。

6、容器编排
虽然 Docker 本身提供了容器管理功能,但它还可以与 Kubernetes 等容器编排平台无缝协作。这些平台支持管理大型容器集群,处理负载平衡、扩展和跨多个主机的自动部署等任务。

Docker 利用容器化技术简化了应用程序的打包、分发和运行过程。它帮助开发人员实现应用程序的一致性、可移植性和可扩展性,使其成为现代软件开发和部署工作流程中的流行选择。
下图显示了 Docker 的关键组件及其工作原理:

在这里插入图片描述

Docker 的关键组件及其工作原理

什么是 Kubernetes?

Docker 和 Kubernetes 就像兄弟一样,经常被一起提及,但它们却有很大不同。 Kubernetes 是一个开源容器编排平台,可自动执行容器化应用程序的部署、扩展和管理。它提供了一个框架,用于跨机器集群运行和协调多个容器,从而更轻松地管理复杂的分布式系统。

以下是每个开发人员或 DevOps 都应该学习和了解的重要 Kubernetes 或 K8 概念:

1、集群架构
Kubernetes 以集群架构运行,由一个主节点和多个工作节点组成。主节点管理集群并协调整体操作,而工作节点负责运行容器。

2、Pod
Kubernetes 中的基本部署单元是 Pod。 Pod 是一个或多个容器的逻辑组,这些容器位于同一位置并共享相同的资源,例如网络命名空间和存储。Pod 内的容器可以使用 localhost 相互通信。 Pod 被视为临时单元,可以轻松创建、更新或终止。

3、Replica 和部署
Replica 定义了在任何给定时间运行的相同 Pod 副本的所需数量,通过自动管理和维护所需数量的 Pod 实例来确保高可用性和可扩展性。部署是一种更高级别的抽象,允许以声明方式管理和更新副本集,从而实现应用程序版本的无缝滚动更新和回滚。

4、服务
Kubernetes 服务提供稳定的网络端点来连接到一组 Pod,支持负载平衡并将 Pod 内的容器公开给其他服务或外部客户端。服务抽象了底层的 Pod 实例,允许应用程序与其他组件进行通信,而无需担心它们的动态特性。

5、标签 Labels 和选择器
Kubernetes 使用标签 Labels 和选择器来实现灵活、动态的对象分组和选择。标签是附加到 Pod、部署、服务和其他 Kubernetes 对象的键值对。选择器用于根据对象的标签过滤和匹配对象,从而可以进行有针对性的操作并对相关资源进行分组。

6、缩放和自动缩放
Kubernetes 允许通过调整 pod 副本 (Replica)的数量来扩展应用程序。 Pod 水平自动扩展 (HPA)是一项根据资源利用率指标(例如 CPU 或内存使用情况)自动扩展 Pod 副本 (Replica) 数量的功能。

7、容器网络
Kubernetes 还管理 Pod 和节点之间的网络。每个 Pod 都有自己的 IP 地址,Pod 内的容器可以使用localhost. Kubernetes 提供了网络插件,可以促进容器网络并实现跨 Pod 和集群的通信。

8、集群管理
Kubernetes 提供广泛的集群管理功能,包括滚动更新、机密管理、配置管理和运行状况监控。它提供了一种声明式方法来定义系统的所需状态,使 Kubernetes 能够持续监控实际状态并将其与所需状态进行协调。

9、 Container 存放
Kubernetes 支持各种存储选项,包括持久卷和存储类。持久卷提供了一种将存储与 Pod 生命周期分离的方法,从而实现跨 Pod 和容器重启的数据持久化和共享。

通过抽象化大规模管理容器的复杂性,Kubernetes 使开发人员能够专注于应用程序逻辑而不是基础设施管理。它提供了一个强大且可扩展的平台,用于部署和管理容器化应用程序,使其成为构建现代云原生系统的流行选择。
下图展示了 K8 或 Kubernetes 的不同组件以及它们如何协同工作:

在这里插入图片描述

K8 或 Kubernetes 的不同组件以及它们如何协同工作

Docker、Kubernetes 之间有什么区别?

以下是 Docker、Kubernetes 之间的主要区别,对它们的不同点进行了比较,主要是这些工具提供的功能和功能,例如容器化和容器管理等。

1、容器引擎
Docker 主要是用于构建、运行和分发容器的容器运行时和引擎。Kubernetes 是一个编排平台,旨在管理跨机器集群的容器化应用程序。

2、容器格式
Docker 使用自己的容器格式,称为 Docker 容器。 Kubernetes 可以使用多种容器格式,但 Docker 容器是最常见的选择。

3、编排
Docker 拥有内置的编排工具 Docker Swarm,它允许管理一组用于运行容器的 Docker 节点。Kubernetes 提供了用于管理容器化应用程序的高级编排功能,包括扩展、负载平衡、自动化部署和自我修复。

4、集群管理
Docker 本身不支持管理容器集群。Kubernetes 是专门为管理容器集群而设计的,并提供扩展、升级、监控和管理容器化应用程序的功能。

5、安全
对于安全性比较,Docker 提供了基本的隔离和安全功能,但其主要重点是运行单个容器。 Kubernetes 提供高级安全功能,例如网络策略、秘密管理和 RBAC。

6、用户界面
相比 UI,Docker 提供了用户友好的 CLI 和基于 Web 的图形界面(Docker Desktop)来管理容器。 Kubernetes 有一个名为 CLI 工具 kubectl 和一个基于 Web 的仪表板(Kubernetes Dashboard),用于管理容器和集群。

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

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

相关文章

MySQL如何实现并发控制?(上)

前言 最开始学习数据库的时候都会被问到一个问题:“数据库系统相比与文件系统最大的优势是什么?”。具体的优势有很多,其中一个很重要的部分是:数据库系统能够进行更好的并发访问控制。 那么,数据库系统到底是怎么进…

yolov5-7转onnx并推理(包括缩放图推理与原始图片推理)

一、yolov5转onnx 先安装onnx, onnxruntime-gpu, ( pip install 就可以) 1. 静态模型: python export.py --weights yolov5s.pt --include onnx2.动态模型: python export.py --weights yolov5s.pt --include onnx --dynamic3.这里谈谈静态与动态的…

在虚幻引擎中实时显示帧率

引擎自带了显示帧率的功能 但是只能在编辑器中显示 , 在游戏发布后就没有了 , 所以我们要自己做一个 创建一个控件蓝图 创建画布和文本 , 修改文本 文本绑定函数 , 点击创建绑定 添加一个名为 FPS 的变量 格式化文本 用大括号把变量包起来 {FPS Int} FPS 然后转到事件图表…

【html】基础(一)

本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:js专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &am…

怎么录制游戏视频?精选5款游戏录屏软件

对于热爱游戏的你来说,记录游戏中的精彩瞬间并分享给朋友或粉丝,无疑是一种享受。然而,在众多录屏软件中,如何选择最适合你的那一款?今天,我们就为大家精选了五款游戏录屏软件,需要的朋友快来选…

【LeetCode:1014. 最佳观光组合 + 思维题】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)

摘要 EfficientFormerV2是一种通过重新思考ViT设计选择和引入细粒度联合搜索策略而开发出的新型移动视觉骨干网络。它结合了卷积和变换器的优势,通过一系列高效的设计改进和搜索方法,实现了在移动设备上既轻又快且保持高性能的目标。这一成果为在资源受…

【Python报错已解决】NameError: name ‘variable‘ is not defined

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

把任务管理器里面的vmware usb arbitrition停了,虚拟机一直识别不到手机设备了

在设备管理器--服务 里面找到VMware usb arbitrition服务,点击“启用”就好了。 参考大佬的文章: 吐血经验!!!解决虚拟机连不上USB!最全!_为什么vmware虚拟机不能连接上usb设备-CSDN博客

C语言 | Leetcode C语言题解之第432题全O(1)的数据结构

题目: 题解: //哈希队列 //哈希检查是否存在 //双编标维护次数顺序 #define MAXSIZE 769/* 选取一个质数即可 */ typedef struct hashNode {char* string; //字符串int count; //次数struct doubleListNode* dList;str…

箭头与数字识别系统源码分享

箭头与数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

JavaScript 安装库npm报错

今天在编写JavaScript代码时,缺少了包express。 const express require(express); const app express();app.get(/, (req, res) > {res.send(Hello, world!); });app.listen(3000, () > {console.log(Server is running on port 3000); });npm install exp…

【C++指南】C++中nullptr的深入解析

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 一、nullptr的引入背景 二、nullptr的特点 1.类型安全 2.明确的空指针表示 3.函数重载支…

从决策树到GBDT、随机森林

何为决策树 决策树(Decision Tree),它是一种以树形数据结构来展示决策规则和分类结果的模型,作为一种归纳学习算法,其重点是将看似无序、杂乱的已知数据,通过某种技术手段将它们转化成可以预测未知数据的树…

3D 模型GLTF、GLB格式文件介绍使用

一、介绍 GLTF(GL Transmission Format)和 GLB(GL Binary)是用于在 Web 和各种应用程序中传输和加载 3D 场景和模型的开放标准格式。它们由 Khronos Group 开发,旨在提供一种高效、可扩展且易于使用的 3D 内容格式。以…

Java项目中Linux跑起来

要让一个web项目跑起来首先需要tomat和jdk的包(Linux版本) 之后可以使用Xftp工具将包传到linux中 可以新建一个java包专门放这些文件 之后将其这些包解压出来 tar -xvf jdk-8u141-linux-x64.tar.gz //换自己的包名使用命令配置自己的环境变量 vim /et…

计算机专业选题推荐-基于python的协同过滤酒店推荐系统

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、协同过滤酒店…

【C++ 11多线程加速计算实操教程】

【C 11多线程加速计算实操教程】 1. 了解线程的基本概念2. 创建线程2.1 启动线程的基本示例:2.2 运行结果 3. 线程加速计算3.1 演示如何使用多个线程计算数组的和:3.2 运行结果3.3 结果分析3.4 拓展学习 4. 互斥量(Mutex)4.1 演示…

Qt中多语言的操作(以QtCreator为例)

1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

vue.js 展示一个树形结构的数据视图,并禁用其中默认选中的节点

功能描述 展示树形结构&#xff1a; 使用 Element UI 的 <el-tree> 组件展示树形结构数据。数据由 content 数组提供&#xff0c;树形结构包含了嵌套的节点及其子节点。 默认选中节点&#xff1a; 使用 defaultCheckedKeys 属性指定默认选中的节点。这些节点在树形结构渲…