入门级容器技术解析:Docker和K8s的区别与关系

目录

        🎯学习小目标:

关于容器

传统物理机🖥️

虚拟机💻

为什么使用容器技术呢?🤔

容器技术🥃

Docker—容器化平台

K8s(Kubernetes)—容器编排系统​

Docker和K8s有什么关系和区别?🤔

Docker 的使用场景

Kubernetes 的使用场景


🎯学习小目标

1.了解容器的由来,以及容器的概念。
2.了解Docker是什么及其作用。
3.了解K8s是什么及其作用。

关于容器

我们先来看看很久很久以前,服务器是怎么部署应用的!

  • 传统物理机🖥️

纯物理服务器是指不依赖于虚拟化技术的物理服务器。在这种设置中,服务器的硬件资源(如CPU、内存、存储等)完全用于运行一个单一的操作系统和应用程序。

纯物理服务器的优点包括:

  1. 性能:由于不需要虚拟化开销,纯物理服务器通常提供更高的性能,其是在要求高性能计算或IO密集型应用中。

  2. 管理:管理和配置相对简单,因为只有一个操作系统和应用程序。

  3. 资源利用率:相较于虚拟化环境,资源利用率可能较低,因为无法根据不同的负载动态分配资源。

  4. 稳定性:在某些情况下,物理服务器可以提供更高的稳定性和可靠性,特别是当应用程序对硬件有特定要求时。

纯物理服务器包括以下在实际生活中的应用:

  1. 数据中心和云计算:许多公司使用纯物理服务器构建数据中心,提供云计算服务。这些服务器存储和处理大量数据,保证了高性能和可靠性。

  2. 企业内部应用:许多企业依赖于纯物理服务器来运行关键的内部应用,如财务系统、客户关系管理(CRM)系统和人力资源管理系统(HRMS),以保证数据安全和稳定性。

  3. 高性能计算:在科学研究、工程设计和天气模拟等领域,纯物理服务器常用于高性能计算(HPC),进行复杂的模拟和数据分析。

为了应对传统物理机的缺点,虚拟化技术就诞生了!

  • 虚拟机💻

↑ 这张图就展示了你目前使用电脑的方式 

尽管你在日常使用中不是直接使用虚拟机,但在一定程度上,你的操作系统利用了类似的虚拟化原则来管理资源,以便让你高效地运行多个应用程序。虚拟机技术主要应用在更复杂的场景,如服务器管理、软件开发和测试等。

虚拟化技术包括以下在实际生活中的应用:

  1. 游戏和娱乐:许多在线游戏平台利用虚拟化技术来分配服务器资源,确保游戏流畅运行。

  2. 移动设备:智能手机和平板电脑中的多任务处理功能也依赖于虚拟化技术。

  3. 个人电脑:通过虚拟机(VM)技术,用户可以在同一台物理电脑上运行多个操作系统。

相较于从前,部署成本降低,可充分利用服务器资源,利用虚拟机的模板功能(vmware模板克隆)便利了迁移与拓展。但是虚拟化也具有一定的局限性,每个虚拟机都是一个完整的操作系统,需要分配系统资源,虚拟机多到一定程度时,操作系统本身的资源也就消耗殆尽,必须扩容。

拓展:如果你想更加快捷稳定地使用Linux系统,也可以选择使用Xshell从本地计算机远程连接到远程的VPS进行操作。

为什么使用容器技术呢?🤔

[小情景]:超哥公司的产品运行在内部的虚拟化平台中,如VMware。但是随着不断增加的云端应用公司已经在云平台上运行了多台云主机,增加了对硬件资源的消耗,不断创建的虚拟机也为公司带来了难题。
 

此时,容器技术就排上用场了!

容器技术🥃

容器技术是一种高效的应用程序部署方法,允许开发人员在隔离环境中打包和运行应用程序,这一过程被称为容器化。容器技术的出现解决了传统部署方法中存在的一系列问题,使得软件开发和部署更加一致、高效。

常见的容器技术包括Docker、Kubernetes、LXC(Linux容器)等,它们提供了一套工具和平台,用于创建、管理和编排容器。容器技术已经在软件开发、云计算和大规模部署等领域广泛应用,为应用程序的开发、测试、交付和运维带来了许多便利和优势。

其中, Docker是一个容器化平台,它可以打包应用及其依赖项,使其成为容器。 K8s则用于管理这些容器的部署和编排。

Docker—容器化平台    

Docker最初是DotCloud公司在法国期间发起的一个公司内部项目,后来以Apache2.0授权协议开源,代码在Github上维护。

Docker是基于Google公司推出的Golang语言开发而来,基于Linux内核的&groups、NameSpace,以及Union FS等技术对进程进行封装隔离,属于操作系统层面的虚拟化技术。(Docker的底层原理与作用)

由于隔离的进程独立于宿主机和其他隔离的进程,也被称之为容器

最初的Docker是基于LXC的,后来去除LXC转而使用自行开发的Libcontainer。

Docker被定义为开源的容器引擎,可以方便的对容器进行管理。例如对镜像打包封装,引入Docker Registry对镜像统一管理。

利用Docker可以实现开发,测试,生产环境的部署一致性,极大的减少运维成本。

对于上述的小情景:

容器化(Containerization)是一种将应用程序及其所有依赖项(如库、配置文件和其他服务)打包在一个标准化的单元中(即“容器”)的技术。容器化的目标是实现软件的简单、一致和可移植的部署。

这样做的好处是什么?

虚拟出一台计算机的成本高还是只虚拟出一个隔离的程序运行环境的成本高? 答案很明显是前者。 一台物理机可能同时虚拟出10台虚拟机就已经开始感到乏力了,但同时虚拟出100个虚拟的执行环境却还是能够从容应对,这对于资源的充分利用可是有巨大的好处。

以下是容器化的一些核心概念和益处:

  1. 轻量级和高效:容器共享宿主操作系统的内核,相比传统的虚拟机更轻量,占用资源更少,启动速度更快。

  2. 一致性:容器在开发、测试和生产环境中具有相同的运行时,这减少了“在我电脑上可以运行”的问题。开发人员可以在本地环境中构建容器,并确保它在其他环境中也能正常工作。

  3. 依赖项管理:容器将应用程序及其所有所需的依赖项捆绑在一起,这样可以避免版本冲突和依赖缺失的问题。

  4. 可移植性:容器可以在不同的计算环境中运行,例如个人电脑、数据中心或云平台,使得应用程序可以更加灵活地部署。

  5. 快速部署与扩展:由于容器的轻量特性,应用程序可以快速启动和停止。这使得动态扩展和缩减资源变得更加容易。

  6. 隔离性:每个容器在独立的环境中运行,避免了不同应用程序间的相互影响。

近几年大火的容器技术正是在这样的指导思想下诞生的!

程序开发情形

没有使用Docker时:

使用了Docker之后:

K8s(Kubernetes)—容器编排系统

Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“K8s”,它是通过将 8 个字母“ubernete ”替换为“8”而导致的一个缩写。

Kubernetes 为什么要用“舵手”来命名呢?大家可以看一下这张图:

img

这是一艘载着一堆集装箱的轮船,轮船在大海上运着集装箱奔波,把集装箱送到它们该去的地方。我们之前其实介绍过一个概念叫做 container,container 这个英文单词也有另外的一个意思就是“集装箱”。Kubernetes 也就借着这个寓意,希望成为运送集装箱的一个轮船,来帮助我们管理这些集装箱,也就是管理这些容器。

这个就是为什么会选用 Kubernetes 这个词来代表这个项目的原因。更具体一点地来说:Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。

整体结构图:

Docker和K8s有什么关系和区别?🤔

区别:Kubernetes(K8s)是一个容器编排系统,而Docker是一个用于构建、分发和运行容器的平台。
关系:它们可以协同工作,以实现更高效的应用程序部署和管理。在实际应用中,开发人员可以使用Docker来构建和打包应用程序容器,然后将其部署到Kubernetes集群中。Kubernetes和Docker之间的关系可以理解为一种互补关系,Docker位于Kubernetes的下层,为应用程序提供运行环境,而Kubernetes则位于上层,为容器化应用程序提供编排和管理功能。

Docker 的使用场景

Docker 的使用场景主要包括以下几个方面:

  1. 应用程序的打包和交付:Docker 可以将应用程序和所有依赖项打包到一个容器中,从而实现应用程序的打包和交付。

  2. 应用程序的部署和维护:Docker 可以在不同的环境中提供一致的应用程序运行环境,从而简化了应用程序的部署和维护。

  3. 应用程序的可移植性:Docker 可以在不同的平台上运行,提供了应用程序的可移植性。

  4. 应用程序的隔离和安全性:Docker 可以提供应用程序的隔离和安全性,防止应用程序之间相互干扰。

Kubernetes 的使用场景

Kubernetes 的使用场景主要包括以下几个方面:

  1. 容器化应用程序的部署和管理:Kubernetes 可以用于管理和部署容器化应用程序,提供高可用性、可伸缩性和自我修复能力。

  2. 容器化应用程序的负载均衡:Kubernetes 可以通过集群自动化来实现容器化应用程序的负载均衡。

  3. 容器化应用程序的高可用性:Kubernetes 可以通过集群自动化来实现容器化应用程序的高可用性。

  4. 混合云和多云部署:Kubernetes 支持多云、混合云和混合部署等场景,因此可以应用于云原生应用程序的开发和部署。

>>看个视频,巩固一下😎

在这里插入图片描述

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

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

相关文章

凌鸥电机开发学习记录

文章目录 9、凌鸥库函数软件过流点设定值BUG8、系统初始化7、ADC触发周期设定6、电机参数测量5、有感HALL相序问题4、电机参数问题3、PWM频率设置2、IO口对应问题1、供电问题 9、凌鸥库函数软件过流点设定值BUG 在软件过流点的判断中,是以当前三相电流和经过了内部…

怎样修改el-table主题样式

起因:el-table有主题样式,部分需要单独设置 环境:ideanodejs插件谷歌浏览器 第一步:找到scss文件: 谷歌浏览器打开表格页面,ctrlshifti打开开发者工具,点击后鼠标移动到表格单元格上单击一下…

Flink operator实现自动扩缩容

官网文档位置: 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…

从入门到精通:Ansible Shell 模块的应用与最佳实践

Ansible是一款强大的自动化运维工具,通过其模块化的设计,可以方便地管理和配置远程主机。作为Ansible的一个常用模块,shell 模块使得我们可以在目标主机上执行复杂的命令或脚本。无论是单一的命令,还是复杂的Shell脚本&#xff0c…

Linux应用软件编程--网络通信(传输层:udp协议,tcp协议,应用层:http协议)

网络通信:不同主机,进程间通信,分为广域网和局域网 OSI 七层模型:是一种理论模型 应用层:通信传输的数据内容 http、FTP、TFTP、MQTT 表述层:数据加密,解密操作,压缩&#xff…

鸿蒙的APP真机调试以及发布

目录: 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 (1)在File->Project Structure->Project->Signing Configs中进行登录。(未…

n8n - AI自动化工作流

文章目录 一、关于 n8n关键能力n8n 是什么意思 二、快速上手 一、关于 n8n n8n是一个具有原生AI功能的工作流自动化平台,它为技术团队提供了代码的灵活性和无代码的速度。凭借400多种集成、原生人工智能功能和公平代码许可证,n8n可让您构建强大的自动化…

【Shell脚本】Docker构建Java项目,并自动停止原镜像容器,发布新版本

本文简述 经常使用docker部署SpringBoot 项目,因为自己的服务器小且项目简单,因此没有使用自动化部署。每次将jar包传到服务器后,需要手动构建,然后停止原有容器,并使用新的镜像启动,介于AI时代越来越懒的…

jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例

1. 各个组件如何新建的? 2. "http请求" 组件内容样例: "消息体数据" 源码: {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…

K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令

K8s高可用集群之Kubernetes管理平台、补全命令工具、资源监控工具部署及常用命令 1.Kuboard可视化管理平台2.kubectl命令tab补全工具3.MetricsServer资源监控工具4.Kubernetes常用命令 1.Kuboard可视化管理平台 可以选择安装k8s官网的管理平台;我这里是安装的其他开…

Centos源码安装MariaDB 基于GTID主从部署(一遍过)

MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…

github gitbook写书

github创建新的仓库 在仓库中添加目录 ‘SUMMARY.md # Summary * [简介](README.md)gitbook 新建一个site https://www.gitbook.com/ 注册账号 取名字 一路 next,注意选免费版 最后 gitbook同步到github 你在主页可以看到 刚刚的test网站 点击右上角圈出来…

colnames看似简单,却能优化数据处理流程

引言 在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames 函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文…

2025新春烟花代码(一)HTML5夜景放烟花绽放动画效果

标题预览效果 标题HTML代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34&…

软件项目体系建设文档,项目开发实施运维,审计,安全体系建设,验收交付,售前资料(word原件)

软件系统实施标准化流程设计至关重要&#xff0c;因为它能确保开发、测试、部署及维护等各阶段高效有序进行。标准化流程能减少人为错误&#xff0c;提升代码质量和系统稳定性。同时&#xff0c;它促进了团队成员间的沟通与协作&#xff0c;确保项目按时交付。此外&#xff0c;…

通过shell脚本定时采集数据到HDFS

第一步&#xff1a;创建shell脚本&#xff08;在虚拟机1下的/export/data目录下执行vi uploadHDFS.sh命令&#xff0c;编辑shell脚本文件&#xff0c;具体代码如下&#xff1a;&#xff09; 第二步&#xff1a;执行shell脚本&#xff08;确保Hadoop集群处于启动状态&#xff0c…

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度&#xff1a;android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…

一机多实例:如何在一台机器上高效运行多个 MySQL 服务

前言 在实际开发和测试环境中&#xff0c;我们经常需要运行多个 MySQL 实例来模拟不同的数据库环境。例如&#xff0c;在一台服务器上运行多个数据库服务以节约硬件资源&#xff0c;或者同时运行不同版本的 MySQL 进行功能兼容性测试。MySQL 本身支持通过配置多实例运行&#…

STM32智能小车(循迹、跟随、避障、测速、蓝牙、wifi、4g、语音识别)总结

前言 有需要帮忙代做51和32小车或者其他单片机项目&#xff0c;课程设计&#xff0c;报告&#xff0c;PCB原理图的小伙伴&#xff0c;可以在文章最下方加我V交流咨询&#xff0c;本篇文章的小车所有功能实现的代码还有硬件清单放在资源包里&#xff0c;有需要的自行下载即可&a…

微服务篇-深入了解 Elasticsearch DSL 查询和 RestClient 查询、数据聚合(Bucket 聚合、带条件聚合、Metric 聚合)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 DSL 查询 1.1 叶子查询 1.1.1 全文检索查询 1.1.2 精确查询 1.2 复合查询 1.2.1 bool 查询 1.3 排序 1.4 分页 1.4.1 深度分页 1.5 高亮 1.5.1 实现高亮 2.0 Rest…