下一代容器架构已出,Docker何去何处?看看这里的6问6答!!

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 我们今天讨论的是《下一代容器架构已出,Docker何去何处?》其实就目前来说,下一代容器架构可以约等于≒Podman+Skopeo+Buildah其实这半年来很多自媒体都在鼓吹新的容器架构,吹嘘将要很快的替代Docker。但是很少人讨论新的架构和老的架构的区别,以及目前迁移的可能性等等等等。。。这些都是摆在企业面前去接触新架构的大山。所以,我们今天不做具体的新容器架构实战,我们只回答以下几个问题。Q1什么是Linux容器以及它如何工作?一句话回答:就像港口的集装箱(1)linux容器又名LXC(Linux Container),我们要形象的理解Linux容器的话,我们可以

我们今天讨论的是《下一代容器架构已出,Docker何去何处?》

其实就目前来说,下一代容器架构可以约等于≒Podman+Skopeo+Buildah

其实这半年来很多自媒体都在鼓吹新的容器架构,吹嘘将要很快的替代Docker。但是很少人讨论新的架构和老的架构的区别,以及目前迁移的可能性等等等等。。。这些都是摆在企业面前去接触新架构的大山。所以,我们今天不做具体的新容器架构实战,我们只回答以下几个问题。

Q1

什么是Linux容器以及它如何工作?

一句话回答:就像港口的集装箱
(1)linux容器又名LXC(Linux Container),我们要形象的理解Linux容器的话,我们可以把它想象成集装箱,而操作系统就像港口。集装箱的特色,在于其格式划一,并可以层层重叠。它是一种内核轻量级的操作系统层虚拟化技术。

Q2

什么是OCI、CRI、CNI?

一句话回答:接口抽象化
(1)回答这个问题之前呢?需要先说一下容器发展的历史:一开始是Docker.io公司推出了容器Docker,但其实容器并非只要Docker,这样带来一个问题是很多做容器编排的公司都要去兼容所有的容器类型。于是后来北美的一些大厂就开始讨论联合指定一个统一的规范,以后做容器的公司都要以这个为准,这个标准就是 Open Container Initiative(OCI)。

(2)CRI是OCI标准中的其中一个,“容器运行时标准”,它定义了容器在硬盘上存储的方式,用于描述容器中应用程序的 JSON 文件和如何创建和运行容器。Docker.io贡献了 libcontainer,并且提供了 runc 作为 OCI 运行时规范的默认实现。

(3)CNI则是CNCF旗下的一个项目,由一组用于配置Linux容器的网络接口的规范和库组成,同时还包含了一些插件。CNI仅关心容器创建时的网络分配,和当容器被删除时释放网络资源。

Q3

新容器架构是什么样的?

一句话回答:新时代容器“三兄弟”
就像开头我们说的一样,新容器架构是Podman+Skopeo+Buildah,这里我们一一介绍这些工具:

(1)Podman: Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker CLI 的时候,Docker CLI 会通过 gRPC API 去跟 Docker Engine 说「我要启动一个容器」,然后 Docker Engine 才会通过 OCI Container runtime(默认是 runc)来启动一个容器。这就意味着容器的进程不可能是 Docker CLI 的子进程,而是 Docker Engine 的子进程。Podman 比较简单粗暴,它不使用 Daemon,而是直接通过 OCI runtime(默认也是 runc)来启动容器,所以容器的进程是 podman 的子进程。这比较像 Linux 的 fork/exec 模型,而 Docker 采用的是 C/S(客户端/服务器)模型。

(2)Skopeo:Skopeo是一个工具,允许我们通过推,拉和复制镜像来处理Docker和OC镜像。我们都知道我们可以通过Docker来拉取远程的镜像。但是我们不能在本地直接查看手游交易平台远程镜像的详细信息,必须要先拉到本地才行,而Skopeo就解决了这样一个痛点。而它还有一个优点是是它不需要任何守护进程的协助来完成任务。

(3)Buildah: Buildah用来构建OCI图像。虽然Podman也可以用户构建Docker镜像,但是构建速度超慢,并且默认情况下使用vfs存储驱动程序会耗尽大量磁盘空间。它类似于Dockerfile,但更优秀的地方是它不需要依赖其余的守护进程,它能支持非Dockerfile的构建文件。

所以,新容器架构运行方式就是这样:Buildah构建容器,Podman运行容器,Skopeo传输容器镜像。这些都是由Github容器组织维护的开源工具(github/containers)

Q4

Docker模型和Podman模型的区别?

一句话回答:C/S(客户端/服务器)模型和fork/exec模型
我们主要对比Docker和Podman的模型区别:

(1)Docker主要使用C/S(客户端/服务器)模型

(2)Podman主要使用fork/exec 模型

那我们想想这两个模型的区别:

(1)fork/exec模型知道某个容器进程到底是谁启动的,因为都是它的子进程啊!

(2)如果我们使用Namespace或者Cgroup对Podman 做一些限制,那么所有创建的容器都会被限制,因为都是它的子进程啊!

(3)可以做一些黑科技,进程通信?进程XX,因为都是它的子进程啊!

好吧,其实区别就是在于C/S(客户端/服务器)模型和fork/exec模型的区别,这个知识点大家都是具体查找其他的资料,总之,我们可以做出各种黑科技。

Q5

怎么从老架构迁移到新架构,有哪些风险?

一句话回答:慎入!!!
这部分我们主要讲给那些使用自建容器编排集群的开发者将讲(因为要排除一些开发者直接使用GKE,EKS之类现成的编排平台,就不好改云平台的底层架构),首先,在使用方面,基础平台之上的使用人员可能感受不是很大,毕竟Podman号称高度匹配Docker命令,所以单纯的替换CRI的话可能是对于资源消耗以及容器启动速度都是有明显加成的,这个是优点。但是,换个角度想,我们要是全部都按照新架构替换的话,这里面的风险就很难预测了。举几个例子:Podman在拉取推送镜像时存在同一镜像digests 改变的情况;使用Docker Compose做部署的时候部署文件怎么修改?特定的指令怎么对接?这些问题都是很需要时间和人力去推动的,所以,在新架构还没有推出稳定的版本之前,最好还是不要迁移,当然,如果你是新进场的云试验者,果断上吧!

Q6

未来的趋势会是怎么样的?

一句话回答:新时代容器是可期的!
未来的趋势,依我个人的观点,新容器的架构会慢慢的蚕食Docker代表的旧架构,原因如下:

(1)Docker本身的设计模式的限制,不能很好的做软件集成;

(2)越来越多的CRI组件推出,在性能上以及资源消耗方面都胜过Docker;

(3)Podman等工具设计出来的时候就是本着服务于K8S的目的,所以他们和K8S贴合的无疑会更紧密,虽然这些工具目前有着这些那些的问题,但是谁说Docker刚推出的时候没有问题了,只是我们入场的早晚罢了。2018是K8S的元年,Google等大厂都开始拥抱K8S,所以未来,新时代容器是可期的!

(2)容器通过四个主要组件工作:名称空间(namespaces),控制组(cgroups),映像(images)和用户空间工具例如Docker。Linux系统上的所有进程都从init进程fork派生。Linux容器的一个主要组件是在新的命名空间下创建一个新的init进程。因此,仅凭名称空间(namespaces),我们就有能力生成一个进程树并操纵一些底层系统资源,而不会影响主机系统。那另一个问题,是什么来阻止新产生的容器过度使用主机的资源呢?使用cgroups,我们可以限制CPU使用率,内存,磁盘等等,这样我们就能够保证我们创建的容器在合理使用的范畴内。最后映像(images)和用户空间工具就是帮助我们更便捷的使用LXC。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
20天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
134 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
27天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
196 77
|
9天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
78 35
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
8天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
14天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
80 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
20天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
44 3
实战~如何组织一个多容器项目docker-compose
|
10天前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
14天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
40 4