当前位置: 首页 > news >正文

容器是什么?

概念

容器可以被看作是一种轻量级的虚拟化技术。与传统虚拟化技术相比,容器不需要为每个应用程序提供单独的操作系统,它们共享宿主机的操作系统内核。这使得容器更加轻便和高效。

想象一下,容器就像是一艘艘可以在海洋中独立航行的货轮,它们都遵循一定的标准建造,能够装载不同种类的货物(即应用程序)。这些货轮(容器)可以在任何港口(即操作系统)停靠,而不需要关心港口的具体情况。而传统的虚拟化技术则像是将每件货物都放在一个独立的小岛上,每个小岛都需要一套自己的基础设施,这样就会占用更多的资源和时间。

容器通过使用容器镜像来创建。容器镜像是包含运行应用程序所需的所有内容的静态文件,包括代码、运行库、环境变量和配置文件。这样,无论是在开发、测试还是生产环境中,都可以保证应用程序在这些容器中运行的一致性。

容器技术中最著名的一个工具是Docker,它简化了容器的创建和管理过程。通过Docker等工具,开发者可以轻松地将应用程序及其依赖环境打包成一个容器镜像,然后在任何支持容器的系统上运行这个镜像。

容器不等于Docker

Docker 是容器技术的一种实现和工具,它让容器的管理和使用变得更加便捷和流行。容器技术本身是一种轻量级的虚拟化技术,而 Docker 提供了一种标准化和自动化的方式来创建、部署和运行容器。

容器和 Docker 之间的关系可以通过以下类比来理解:

容器:就像是一系列的标准化集装箱,它们可以用来装载货物(即应用程序及其依赖),并且可以在不同的运输工具(即操作系统和云平台)之间轻松移动。
Docker:则可以看作是一套完整的集装箱运输系统,包括用于装载货物的集装箱(Docker 容器),用于制造集装箱的工厂(Docker 镜像),以及用于管理集装箱运输的物流系统(Docker 引擎和命令行工具)。
Docker 的一些关键组件包括:
Docker 镜像:是一个只读的模板,包含了创建 Docker 容器所需的所有指令和代码。
Docker 容器:是镜像的一个运行实例,它是一个独立的运行环境,可以被启动、停止、删除和迁移。
Docker 引擎:是 Docker 的核心部分,它负责构建、运行和分发 Docker 容器。
尽管 Docker 是目前最流行的容器工具之一,但容器技术并不等同于 Docker。容器技术的历史比 Docker 要悠久,其他容器技术还包括 CoreOS 的 rkt(Rocket)和 OCI(Open Container Initiative)等。Docker 的成功在于它简化了容器的使用,推动了容器技术的普及,并且在云计算和微服务架构中发挥了重要作用。

总结来说,Docker 是容器技术的一种流行实现,它让容器的管理和部署变得更加简单和高效。然而,容器技术更为广泛,包括了 Docker 以及其他遵循类似原则的工具和平台。

集群与容器

Kubernetes 1.20 版本开始,不再推荐使用 Docker 作为默认的容器运行时。这是因为 Kubernetes 采用的是容器运行时接口(Container Runtime Interface,CRI),而 Docker 并没有完全兼容这个接口。

Docker 一直以来都是最流行的容器工具之一,但是它在 Kubernetes 集群中并不是作为容器运行时,而是作为容器引擎来使用。Docker 引擎包括了更多的功能,比如构建镜像、管理镜像和容器等。在 Kubernetes 中,只需要容器运行时的功能,即负责容器的生命周期管理(创建、运行、停止、删除等)。

Kubernetes 社区更倾向于使用符合 CRI 的容器运行时,比如 containerd 和 CRI-O。这些运行时更加轻量级,专注于容器管理,并且与 Kubernetes 的集成更加紧密。containerd 是 Docker 的一个核心组件,它负责管理容器的生命周期,并且已经从 Docker 项目中分离出来,成为一个独立的项目。containerd 直接实现了 CRI,因此它可以无缝地与 Kubernetes 集成。

当 Kubernetes 1.20 版本宣布弃用 Docker 时,它实际上是在说它不再支持 Docker 作为容器运行时,而是推荐使用 containerd 或其他兼容 CRI 的运行时。这意味着在 Kubernetes 集群中,Docker 的角色可能会被 containerd 或其他运行时取代。

总结来说,Kubernetes 转向使用 containerd 或其他 CRI 兼容的运行时,是为了更好地遵循 Kubernetes 的设计原则,提高性能和可靠性,并且确保更好的集成和兼容性。Docker 仍然是一个强大的工具,用于容器镜像的构建和本地开发,但在 Kubernetes 集群中,它的角色可能会逐渐被专门的容器运行时代替。

如何安装Dockers

相关文章:

  • 【linux】(6)文本处理sed
  • 《软件定义安全》之一:SDN和NFV:下一代网络的变革
  • Python Flask实现蓝图Blueprint配置和模块渲染
  • 【Python报错】已解决FileNotFoundError: [Errno 2] No such file or directory: ‘xxx‘
  • Golang Context详解
  • 风能远程管理ARMxy嵌入式系统深度解析
  • 软件游戏steam_api.dll丢失的解决方法,总结5种有效的方法
  • Leetcode 3177. Find the Maximum Length of a Good Subsequence II
  • C# 共享内存
  • Linux操作系统:Zookeeper在虚拟环境下的安装与部署
  • 手撸一个java简易聊天室
  • 【UML用户指南】-13-对高级结构建模-包
  • Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境
  • 快速开始一个go程序(极简-快速入门)
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【React系列】如何构建React应用程序
  • CAP 一致性协议及应用解析
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • java中具有继承关系的类及其对象初始化顺序
  • js
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • linux安装openssl、swoole等扩展的具体步骤
  • PHP的类修饰符与访问修饰符
  • scala基础语法(二)
  • 分布式事物理论与实践
  • 高度不固定时垂直居中
  • 基于组件的设计工作流与界面抽象
  • 简单实现一个textarea自适应高度
  • 利用DataURL技术在网页上显示图片
  • 漂亮刷新控件-iOS
  • 如何编写一个可升级的智能合约
  • 如何利用MongoDB打造TOP榜小程序
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 如何优雅地使用 Sublime Text
  • 收藏好这篇,别再只说“数据劫持”了
  • 项目管理碎碎念系列之一:干系人管理
  • 小李飞刀:SQL题目刷起来!
  • 写代码的正确姿势
  • 阿里云ACE认证之理解CDN技术
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​业务双活的数据切换思路设计(下)
  • #include
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $L^p$ 调和函数恒为零
  • (2)MFC+openGL单文档框架glFrame
  • (4)Elastix图像配准:3D图像
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931