【转载】VPS、ECS、Docker和k8s

图片及内容均来源于小林coding公众号:面试官:Docker 和 k8s 之间是什么关系?

物理服务器

一台看得见摸得着的机器,其实就是云厂商页面里提到的物理服务器物理机。不同厂商叫法不同,有的厂商叫它独立服务器

vps 和 ecs

VPS(Virtual Private Server,虚拟专用服务器)。云厂商一般会将一台物理服务器分割成多个虚拟机。它跟我们在 windows 用 VMwareVirtualBox 建的虚拟机其实是一回事。每个虚拟机都拥有独立的操作系统、资源(比如 CPU、内存、存储空间)和公网 IP 地址。然后对外出售。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306003703869.png

缺点:不支持用户自主升降级,它的资源是预先分配的,不易动态调整。

ECS(Elastic Compute Service,弹性计算服务)。用户可以根据需要随时调整 CPU、内存、磁盘和带宽,主打一个弹性
assets/【转载】VPS、ECS、Docker和k8s/image-20250306003754684.png

Docker容器

只把软件和系统依赖库加配置打包。然后将这部分系统文件挂到 ecs 的操作系统下,利用一个叫 Namespace 的能力让它看起来就像是一个独立操作系统一样。再利用一个叫 Cgroup 的能力限制它能使用的计算资源。这就省掉了一层笨重的操作系统,同时还让软件轻松跑在各类操作系统上。这就是我们常说的 Docker 容器技术

Namespace: 让docker容器看起来就像是一个独立操作系统一样。
Cgroup: 限制容器能使用的计算资源。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306003954240.png
总的来说就是,物理服务器上跑 ecs,ecs 跑 Docker 容器。多个 Docker 容器共享一个 ecs 实例 操作系统内核。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004004244.png

Docker详解

不同软件依赖不同,在软件与操作系统中间添加一层,即Docker
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004128644.png
程序是跑在操作系统上的,而操作系统上又装了各种不同版本的依赖库和配置,这些被程序所依赖的信息,我们统称为"环境"。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004146688.png

Docker 是一款可以将程序和环境打包并运行的工具软件。

基础镜像: 选中一个基础操作系统和语言后,我们将它们对应的文件系统,依赖库,配置等放一起打包成一个类似压缩包的文件,这就是所谓的基础镜像(Base Image)。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004231564.png

Dockerfile

我们可以将要做的事情以命令行的形式一行行列出来。就像一份 todo list。意思是要求在基础镜像的基础上按着 todo list 挨个执行命令。

像这样一份列清楚了,从操作系统到应用服务启动,需要做哪些事情的清单文件(todo list),就是所谓的 Dockerfile

容器镜像
注意 Dockerfile 只是描述了要做哪些事情,并没有真正开始做。当我们用命令行执行 docker build 的时候,Docker 软件就会按着 Dockerfile 的说明,一行行构建环境+应用程序。最终将这个环境+程序,打包成一个类似"压缩包"的东西,我们叫它容器镜像(container image)。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004404660.png

Registry

弄一个镜像仓库,通过 docker push 将镜像推到仓库,有需要的时候再通过 docker pull 将镜像拉到机器上。这个负责管理镜像仓库推拉能力的服务,就叫 Docker Registry
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004442176.png
容器
我们可以跑到目的服务器上,执行 docker pull 拿到容器镜像。然后执行 docker run 命令,将这个类似"压缩包"的容器镜像给"解压缩",获得一个独立的环境和应用程序并运行起来。这样一个独立的环境和应用程序,就是所谓的容器(container)。我们可以在一个操作系统上同时跑多个容器。且这些容器之间都是互相独立,互相隔离的。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004510310.png

Docker 和虚拟机

这个容器是不是很像我们用 vmware 或 kvm 整出来的传统虚拟机?但不同的是,传统虚拟机自带一个完整操作系统,而容器本身不带完整操作系统,容器的基础镜像实际上只包含了操作系统的核心依赖库和配置文件等必要组件。它利用一个叫 Namespace 的能力让它看起来就像是一个独立操作系统一样。再利用一个叫 Cgroup 的能力限制它能使用的计算资源。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306004535258.png所以说,容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核

Docker的架构原理

C/S架构

assets/【转载】VPS、ECS、Docker和k8s/image-20250306004551166.png
docker-cli解析输入的cmd命令->docker server将任务分发到Engine层-> Engine层负责创建Job-> job实际执行各种工作。

assets/【转载】VPS、ECS、Docker和k8s/image-20250306004606081.png不同的 Docker 命令会执行不同类型的 Job 任务。

docker build

如果你执行的是 docker build 命令,Job 则会根据 Dockerfile 指令,像包洋葱皮似的一层层构建容器镜像文件。

docker pull/push

如果你执行的是 docker pull 或 push 之类的镜像推拉操作,Job 则会跟外部的 Docker Registry 交互,将镜像上传或下载。

docker run
如果你执行的是 docker run 命令,Job 就会基于镜像文件调用 containerd 组件,驱使 runC 组件创建和运行容器。

assets/【转载】VPS、ECS、Docker和k8s/image-20250306004839878.png

Docker Compose

部署多个容器,通过以后个yaml文件规定部署的容器有哪些部署顺序是怎么样的,以及这些容器占用的 cpu 和内存等信息。

然后,通过一行Docker-compose up命令,开始解析 YAML 文件,将容器们一键按顺序部署,就完成一整套服务的部署。这其实就是 Docker Compose 干的事情
assets/【转载】VPS、ECS、Docker和k8s/image-20250306005102697.png
Docker Swarm

将一套docker服务部署到多台服务器上

Docker 解决的是一个容器的部署。Docker Compose 解决的是多个容器组成的一整套服务的部署。那 Docker Swarm 就更高维度了,它解决的其实是这一整套服务在多台服务器上的集群部署问题。比如在 A 服务器坏了,就将服务在 B 服务器上重新部署一套,实现迁移,还能根据需要对服务做扩缩容。
assets/【转载】VPS、ECS、Docker和k8s/image-20250306005149082.png
还记得之前的文章里提到的 k8s 吗?它会在多台 Node 服务器上调度 Pod,进行部署和扩缩容。

图片

k8s的node内部

每个 Pod 内部可以含有多个 container,每个 container 本质上就是一个服务进程。

图片

pod内部

是不是感觉k8s跟 Docker Swarm 做的事情很像?没错,其实 Docker Swarm 是 k8s 的竞品,既然是竞品,那它们做的事情其实区别就不大了。现在回过头来看 Docker 容器和 k8s 之间的关系,思路就清晰了。Docker 部署的容器,其实就是 k8s 调度的 Pod 里的 container,它们都叫容器,其实是一回事。只不过 k8s 除了支持 Docker 的容器外,还支持别人家的容器。Docker Compose 基于多个 container 创建的一整套服务,其实就是 k8s 里的 pod。而 Docker Swarm 做的事情和 k8s 一样,本质上就是在调度 pod。回过头来看下 k8s 的官方定义,叫容器编排引擎,将它理解为,以 API 程的方式管理安各个容器的引擎,是不是就特别精辟。

图片

容器编排引擎的含义

现在,我们再回过头来看下 Docker 的图标,是一个个集装箱,放在一艘船上,这一个个集装箱指的就是互相隔离的容器,而 k8s 的图标,则是一个轮船上的方向盘,意思是 k8s 控制着轮船的航向,其实指的就是调度容器。这波联想就非常形象了。

图片

总结

  • Docker 本质上就是一个将程序和环境打包并运行的工具软件,而 Docker 容器本质上只是个自带独立运行环境的特殊进程,底层用的其实是宿主机的操作系统内核

  • • Docker 软件 通过 Dockerfile 描述环境和应用程序的依赖关系, docker build 构建镜像, docker pull/push 跟 Docker Registry 交互实现存储和分发镜像,docker run 命令基于镜像启动容器,基于容器技术运行程序和它对应的环境,从而解决环境依赖导致的各种问题。

  • • Docker 解决的是一个容器的部署问题,Docker Compose 解决的是多个容器组成的一套服务的部署问题,Docker Swarm 解决的是多个容器组成的一套服务在多台服务器上的部署问题,k8s 则是 Docker Swarm 的竞品,在更高维度上兼容了 Docker 容器,实现了容器编排调度。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【云原生】VPS、ECS、Docker和k8s

图片及内容均来源于小林coding公众号:面试官:Docker 和 k8s 之间是什么关系? 物理服务器 一台看得见摸得着的机器,其实就是云厂商页面里提到的物理服务器或物理机。不同厂商叫法不同,有的厂商叫它独立服务器。 vps 和 ecs VPS(Virtual Private Server,虚拟专用服务器)。…

FastAPI 查询参数完全指南:从基础到高级用法

title: FastAPI 查询参数完全指南:从基础到高级用法 🚀 date: 2025/3/6 updated: 2025/3/6 author: cmdragon excerpt: 探讨 FastAPI 查询参数的核心机制,涵盖从必需与可选参数、默认值到多参数处理的全方位知识。通过详细的代码示例、课后测验和常见错误解决方案,通过类…

[HNCTF 2022 WEEK3]ssssti

[HNCTF 2022 WEEK3]ssssti 首先打开题目这边翻译一下,server-side template injection是服务器模版注入,立马能反应过来是ssti(一般是flask框架) 不管了,直接丢fenjing里面一把梭哈开始扫描了1,不得不感慨fenjing的waf绕过能力是真强一些常见的危险payload也自动帮你试完了…

[安洵杯 2020]Normal SSTI

[安洵杯 2020]Normal SSTI好题目,直接把参数给我了都不用找了打开fenjing直接一把梭哈

[BJDCTF2020]Easy MD5

[BJDCTF2020]Easy MD5一个输入框,无论输入什么都没有回显,使用yakit抓包看看根据返回的数据包可以得知其sql查询语句,我们需要尝试绕过查询语句来获得线索,md5()函数中$pass参数为输入的参数,而true代表一种模式,将字符串md5哈希后转化为二进制类型 MD5语法 标准格式 md5…

【多线程】volatile关键字详解

volatile的作用volatile主要用于解决可见性和有序性的问题,但不保证原子性可见性:线程在操作变量时,会将主存中的变量拷贝一份到本地存储;修改有再找时机写回主存(不可控),这样多线程并发时会导致其他线程看到的数据和当前线程不一致 使用volatile关键字修饰变量,可使得每…

WiFiGrab教程2:一键抓包5G并使用字典破解全流程

本文使用WiFiGrab抓取5G无线网络的握手包,实验对象为自己的路由器,并结合EWSA进行字典攻击,演示暴力破解的原理和全流程操作。WiFiGrab抓包5G 本文使用WiFiGrab抓取5G无线网络的握手包,实验对象为自己的路由器,并结合EWSA进行字典攻击,演示暴力破解的原理和全流程操作。软…

phylip 中利用NJ法构建进化树

001、测试文件vcf文件(base) [b20223040323@admin2 02_NJ_tree]$ ls outcome.vcf 002、格式转换;输入文件为vcf文件run_pipeline.pl -Xms1G -Xmx5G -importGuess outcome.vcf -ExportPlugin -saveAs sequences.phy -format Phylip_Inter ## 格式转换 003、

vue的深度学习

vue的深度学习 本次学习了vue脚手架的知识,使用的是选项api,初步分析 对于脚手架目录进行简单分析 src:用于存放源码,我们一般写代码的地方,其中的app.vue是根组件,components中存放其他组件,其他组件可以加到根组件下方 <template><div class="fullName"&g…

代码随想录算法训练营day23 | 39. 组合总和、40.组合总和II、131.分割回文串

组合总和点击查看代码 class Solution { public:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int &target, int sum, int startIndex) {//由于for循环条件已经提前做了递归终止判断,故这里不用…

2023-3-5-ai试用

今天使用了ai来做简单的项目,这是我发给ai的话语这是相应的结构图,按照ai的回答做出,相应的依赖我们能够实现登录以及相应的查询,不过也有一些数据取不到,有一些bug,其他功能代码ai没有给出,需要我们进一步索要,不过也能看出ai是可以用于做项目了

车辆运维管理行业洞察与竞品分析

1. 前言 车辆运维管理是指对车辆进行日常维护、故障处理、性能监测、成本控制等一系列活动的管理。随着物联网、大数据、人工智能等技术的发展,车辆运维管理软件和解决方案的市场竞争日益激烈。 2. 确定目标通过产品差异化定位,找到竞争者的差异,打造自己的优势,抢占市场份…