下一代容器架构已出,Docker何去何处?看看这里的6问6答!!
我猜很多人一看这个标题已经感觉很懵逼了,什么?下一代容器都出来了,我还没学Docker呢!!!
咳咳~~在这里我给大家做一个保证,下一代容器目前也只是各个公司在测试阶段,Github上面也有很多Issue,因此,大家可以放宽心,下一代容器离我们还很远呢。
切入正题:
我们今天讨论的是《下一代容器架构已出,Docker何去何处?》
其实就目前来说,下一代容器架构可以约等于≒Podman+Skopeo+Buildah
其实这半年来很多自媒体都在鼓吹新的容器架构,吹嘘将要很快的替代Docker。但是很少人讨论新的架构和老的架构的区别,以及目前迁移的可能性等等等等。。。这些都是摆在企业面前去接触新架构的大山。所以,我们今天不做具体的新容器架构实战,我们只回答以下几个问题。
下面开始,我要做一波自问自答了
Q1 什么是Linux容器以及它如何工作?
一句话回答:就像港口的集装箱
(1)linux容器又名LXC(Linux Container),我们要形象的理解Linux容器的话,我们可以把它想象成集装箱,而操作系统就像港口。集装箱的特色,在于其格式划一,并可以层层重叠。它是一种内核轻量级的操作系统层虚拟化技术。
(2)容器通过四个主要组件工作:名称空间(namespaces),控制组(cgroups),映像(images)和用户空间工具例如Docker。Linux系统上的所有进程都从init进程fork派生。Linux容器的一个主要组件是在新的命名空间下创建一个新的init进程。因此,仅凭名称空间(namespaces),我们就有能力生成一个进程树并操纵一些底层系统资源,而不会影响主机系统。那另一个问题,是什么来阻止新产生的容器过度使用主机的资源呢?使用cgroups,我们可以限制CPU使用率,内存,磁盘等等,这样我们就能够保证我们创建的容器在合理使用的范畴内。最后映像(images)和用户空间工具就是帮助我们更便捷的使用LXC。
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,所以未来,新时代容器是可期的!
以上就是我关于下一代容器架构的想法,所以大家也该多多少少明白以后的云容器发展趋势了。所以这里的总结呼应上文,虽然下一代容器架构离我们还很远,但是别妄想了,快点抓紧时间学,比别人多了解一点是一点啊!!
号主介绍
- 前两年在二线大厂工作,目前在创业公司搬砖
- 接触方向是爬虫和云原生架构方面
- 有丰富的反爬攻克经验以及云原生二次开发经验
- 其他诸如数据分析、黑客增长也有所涉猎
- 做过百余人的商业分享以及多次开办培训课程
- 目前也是CSDN博客专家和华为云享专家
下一代容器架构已出,Docker何去何处?看看这里的6问6答!!的更多相关文章
- 再见 Docker,是时候拥抱下一代容器工具了
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- centos7下安装docker(19容器架构)
What,Why,How What:什么是容器? 说起容器大家想到的是什么? 集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...
- 第 2 章 容器架构 - 007 - Docker 架构详解
Docker 的核心组件包括: Docker 客户端 - Client Docker 服务器 - Docker daemon Docker 镜像 - Image Registry Docker 容器 ...
- 对已有的docker容器增加新的端口映射
一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 docker run -it -d --name [contain ...
- 架构师分享 Docker 新手入门完全指南
来源:架构师小秘圈 ID:seexmq Docker 最初 dotCloud 公司内部的一个业余项目 Docker 基于 Go 语言 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案 Do ...
- 容器化之路Docker网络核心知识小结,理清楚了吗?
Docker网络是容器化中最难理解的一点也是整个容器化中最容易出问题又难以排查的地方,加上使用Kubernets后大部分人即使是专业运维如果没有扎实的网络知识也很难定位容器网络问题,因此这里就容器网络 ...
- Docker系列01—容器的发展历程---Docker的生态圈
本文收录在容器技术学习系列文章总目录 Docker 和容器技术的发展可谓是日新月异,本文试图以全局的视角来梳理一下 docker 目前的生态圈.既然是概览,所以不会涉及具体的技术细节. Docker ...
- 关于容器、虚拟机以及 Docker 的一个入门教程
Yves yao · 2017-09-05翻译 · 1315阅读 原文链接 huangxiaolu审校 源地址:http://zcfy.cc/article/a-beginner-friendly ...
- 下一代容器技术podman简介
PODMAN主要由红帽发起和推动,是下一代的容器技术,包括如下三个模块:Podman,Skopeo和Buildah这三个工具都是符合OCI计划下的工具(github/containers).主要是由R ...
随机推荐
- NOIP模拟 16
嗯我已经是个不折不扣的大辣鸡了 上次的T3就弃了,这次又弃 颓废到天际 T1 巨贪贪心算法 我就是一个只会背板子的大辣鸡 全裸的贪心看不出来,只会打板子 打板子,加特判,然后一无进展,原题不会,这就是 ...
- 使用Typescript重构axios(三十)——添加axios.getUri方法
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- 2019年10月13日 linux习题 wangqingchao
1. GUN的含义是: GNU's Not UNIX . 2. Linux一般有3个主要部分:内核.命令解释层.实用工具. 3.POSIX是可携式操作系统接口的缩写,重点在规范核心与应用程序之间的接口 ...
- html5 点击播放video的方法
html5 点击播放video的方法<pre> <video videosrc="{$vo.shipinurl}" controls="" x ...
- Vue的指令以及组件化开发
一. 自定义指令 如何: 1. 创建指令 Vue.directive("指令名",{ inserted(elem){//指令所在的元素被加载到DOM树上后自动执行指令 //elem ...
- Java设计模式之模板方法模式(Template)
前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象“来做调整”,针对这种拥有 ...
- Spring注解@Configuration是如何被处理的?
从SpringApplication开始 一般情况下启动SpringBoot都是新建一个类包含main方法,然后使用SpringApplication.run来启动程序: @SpringBootApp ...
- spark安装配置
一.下载解压 二.配置 (假设已经配置了Java.Hadoop) 1.环境变量 2.spark配置 进入spark安装目录,复制文件 编辑spark-env.sh文件,在文件中添加如下信息(括号中路径 ...
- nyoj 40-公约数和公倍数(gcd)
40-公约数和公倍数 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:30 submit:47 题目描述: 小明被一个问题给难住了,现在需要你帮帮忙. ...
- hdu 1880 魔咒词典(双hash)
魔咒词典Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...