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

目录

🎯学习小目标:

关于容器

传统物理机🖥️

虚拟机💻

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

容器技术🥃

Docker---容器化平台

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

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

[Docker 的使用场景](#Docker 的使用场景)

[Kubernetes 的使用场景](#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 为什么要用"舵手"来命名呢?大家可以看一下这张图:

这是一艘载着一堆集装箱的轮船,轮船在大海上运着集装箱奔波,把集装箱送到它们该去的地方。我们之前其实介绍过一个概念叫做 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 支持多云、混合云和混合部署等场景,因此可以应用于云原生应用程序的开发和部署。

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

相关推荐
gs801409 分钟前
用CRD定义未来:解锁机器学习平台的无限可能
kubernetes·crd·operator·kubeflow·机器学习平台·分布式训练任务
shelby_loo2 小时前
在 Ubuntu 下通过 Docker 部署 MySQL 服务器
服务器·ubuntu·docker
云妙算4 小时前
手把手带你使用Karpenter减少K8s集群资源浪费
后端·kubernetes
寰宇软件5 小时前
Docker: 教程07 - ( 如何对 Docker 进行降级和升级)
docker·容器·eureka
小参宿6 小时前
高效绘图不再受限!本地搭建Excalidraw与随时随地高效绘制流程图教程
运维·服务器·windows·docker·centos·流程图
调包人7 小时前
k8s dashboard离线部署步骤
docker·容器·kubernetes
Rhys..8 小时前
本地导入封装的模块 在docker内报错ImportError
运维·docker·容器
dsd23338 小时前
Docker 专栏 —— Dockerfile 指令详解
运维·docker·容器
有来技术9 小时前
Windows 系统下 Docker 和 Docker Compose 安装配置:一键部署有来开源项目本地环境
docker
剑客无名9 小时前
在K8S上部署OceanBase的最佳实践
容器·kubernetes·oceanbase