Docker 的 2020,实 "鼠" 不易!
元旦你们出去嗨,栈长在家撸文章,惨惨惨…
没错, Docker 的 2020 年也过的不是很顺利,可以说是流年不利、命运多舛,一年发生两件大事,太折腾!
相信大家也已经看到很多相关的报道了,但同时也有很多人被铺天盖地的信息所误解、所迷惑,很多人不清楚事实的真相,咱技术群里还有人说不要学了之类的,带着很多偏见和误解,比如:
- Docker 真的被禁止使用了?
- Docker 真的被 K8S 弃用了?
- Docker 到底还能不能用?
- Docker 到底还要不要继续学?
- ……
今天栈长就来总结下 Docker 的 2020,带大家来揭开这些谜团。
Docker 简介:
Docker 是现在最主流的开源容器,Docker 的核心思想是:"Build once, Run anywhere",即:一次构建,处处运行,也基本成为了现在容器的代名词。
我们可以将 Docker 理解为一个轻量级的沙盒,Docker 容器完全使用沙盒机制,每个容器内都有其独立运行的环境和组件,容器之间是相互隔离互不影响的,也可以进行容器间的通信。
更多请参考:年轻人的第一个 Docker 应用!
Docker 真的被禁用了?
关于 Docker 被禁的消息,其实最早在 2017 年就被禁止在 7 个国家使用了,去年的 8 月,一则 Docker 被禁的消息又袭转了朋友圈和各大技术平台,因为其主要针对的是 "实体清单" 上的公司,而许多中国公司又在实体清单上面。
来看下最新的 Docker 服务条款:
最新的条款生效日期是 2020/12/14:
依旧写着禁止 Docker 在米国政府 "实体清单" 上的企业、个人使用,Docker 虽然是一个开源容器,但其本身也是一家米国公司,所以必须得遵守米国在出口方面的法律限制。
所以,如果你所在的公司不在那个实体清单上面,那完全不用惊慌!!
那公司在这个清单上面该怎么办呢?
看 1.1 的描述,这个条款针对的是 Docker 相关网站上提供的服务,那禁用的也是 Docker 网站提供的商业服务(比如 Docker Hub、Docker EE 等),开源的版本并不受影响,然而真正用商业服务和付费版的公司又有几个呢?不得而知!反正我们不用~
一句话再总结下:
禁止 Docker 在米国政府 "实体清单" 上的企业、个人使用在其网站上提供的商业服务
所以不用 Docker 的商业服务不就没事了,一般的公司完全不用担心,再不行在开源版本上拉个分支自己干或者换一个容器不就完事了。
推荐阅读:Docker 被禁?还有千千万万个 Docker 站起来!
Docker 被 K8S 弃用?
去年 12 月,又有一波关于 "K8S 弃用 Docker" 的消息开始刷屏……
Kubernetes 简介:
kubernetes,简称:K8s,是 Google 开源的一个容器编排引擎,它支持自动化部署,以及大规模、可伸缩应用容器化管理。Kubernetes 中可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置负载均衡策略实现这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员进行复杂的手工配置和处理。
参考来源:百度百科
为什么 K8S 弃用 Docker?
没错,来看 Kubernates 1.2.0 的变更日志:
如图所示,在弃用部分第一条就是:
现在 Docker 在 Kubelet 中的支持已经被弃用,并且会在未来的版本中彻底移除,因为 Kubelet 使用了一个名叫 "dockershim" 的模块,它实现了 Docker 对 CRI 的支持,但它在 Kubernetes 社区已经出现了一些维护性的问题。我们建议你评估并迁移容器运行时,也就是成熟的 CRI 完整实现(兼容 v1alpha1 和 v1),现在已经是可用状态。
总而言之就是维护问题,建议迁移到新的容器运行时。
Docker 和 k8s 有什么关系?
首先需要搞清楚 Docker 在现有 Kubernetes 架构中的作用,来看下 Kubernetes 的架构图:
在 Kubernetes 架构中,每个 Kubernetes 节点都与控制面板进行通信,Docker(或者其他容器运行时)仅用于在实际主机中运行应用程序,各个节点上的 kubelet 通过获取元数据,并执行 CRI(Container Runtime Interface,即容器运行时 API 接口)以在该节点上进行容器的创建/删除操作。
Kubernetes 只能与CRI 进行通信,而不能直接用 Docker API 进行通信,Docker 又并不支持 Kubernetes 提供的 CRI,所以之前使用 Kubernetes 就只能通过 "dockershim" 提供的桥接服务来转换 Docker API 和 CRI,但由于维护性问题,Kubernetes 最终还是弃用了 dockershim 这一桥接服务。
Docker 被弃用后怎么办?
其实也不用慌,CRI 运行时有两种实现方案:
- containerd
- CRI-O
containerd 就是从 Docker 分出去的开源项目,并且提供的 CRI 功能也是完全由 Docker 提供的,Docker 自身也用到了 containerd,而 CRI-O 主要由 Red Hat 开发,并不依赖 Docker,所以,从 Docker 迁移到 containerd 是最好的选择。
总结
Docker 确实被禁用了,但影响的只是实体清单上的公司的 Docker 提供的商业服务,开源版本不受影响,和我们普通开发也没关系。
Docker 也确实被 k8s 弃用了,但还有其他的选择,比如:containerd,就是完全兼容 Docker 的,可以继续使用 Docker 进行开发,所以对于普通开发用户来说是不受任何影响的,但对于 k8s 管理员来说就需要考虑迁移到新的容器运行时,毕竟在未来不久的版本中 k8s 会彻底移除对 Docker 的支持。
总之, Docker 仍是目前最优秀的开源容器,放心大胆用吧!
所以,不要再被误导了,我们普通开发人员完全不用考虑禁不禁、弃用不弃用的事,该学学,该用用,吃嘛嘛香,何乐而不为呢?
但话又说回来,Docker 是家米国公司,未来开源版会不会也受影响呢?
我只能说应该不会,如果开源的都被禁,那我们常用的 Java、Linux、Spring 等开源技术都不能用了?不太可能!很多人的担心、惊慌也并不无道理,唯有开发自己的核心技术才会不用受制于人!
最后, Docker 被禁损失的是 Docker 公司和米国自己的利益,简直是搬起石头砸自己的脚,另外,Docker 也不是必须的,不用 Docker 也还有很多其他的选择,Docker 没火之前不也过的好好的,所以完全不用惊慌。
至于 Docker 的后续发展,请持续关注Java技术栈微信公众号,栈长将第一时间跟进最新动态。你也可以在后台回复:动态,获取栈长整理的更多往期热门好玩的技术资讯。
参考:
- https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation
- https://dev.to/inductor/wait-docker-is-deprecated-in-kubernetes-now-what-do-i-do-e4m
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。
近期热文推荐:
1.Java 15 正式发布, 14 个新特性,刷新你的认知!!
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.我用 Java 8 写了一段逻辑,同事直呼看不懂,你试试看。。
觉得不错,别忘了随手点赞+转发哦!
Docker 的 2020,实 "鼠" 不易!的更多相关文章
- Docker总结2020
1. docker ps docker exec -it php7 /bin/bash 设置文件权限: chmod -R sign_tp5/ 重启nginx命令: nginx -s reload ...
- Amazing 2020
Amazing 2020 Intro 2020 转眼即逝,2020 是比较艰辛的一年,因为疫情原因,很多人的工作以及生活都多多少少受到了一些影响. 引用网上盛传的一句话--2020 实"鼠& ...
- 盘点 Java 开发 2020 年发生的几件大事,你必须得知道!
2021 年了,在过去的一年 Java 软件开发行业都发生了哪些重大事件呢? 这篇栈长带大家回顾一下,其实在元旦的<滚蛋吧,2020>也略有介绍,这篇就更加详细的总结一下. 1.Java ...
- Docker容器技术
Docker介绍 什么是容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件. 容器镜像包含了应用的所有依赖项,因而在从开发到测试再到生产 ...
- Docker 基本核心原理
Docker内核知识 namespace资源隔离 namespace的6项隔离 NameSpace 系统调用参数 隔离内容 UTS CLONE_NEWUTS 主机名与域名 IPC CLONE_NEWI ...
- docker基本元素和底层实现
docker是轻量级的操作系统虚拟化解决方案 优点 1.基于操作系统层面 2.启动速度快(秒级) 3.资源利用率高 4.性能高.易管理 docker有3大基本要素 分别是 1.镜像:只读模板,用来创建 ...
- 如何在windows 7 上使用docker
在window7上面本来是支持使用docker的, 但是我们可以通过安装docker toolbox来实现在windows7上使用docker. 参考网址: https://docs.docker.c ...
- Docker入门-常用命令
Docker镜像操作 Docker运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker会从镜像仓库下载该镜像. 获取镜像 从Docker镜像仓库获取镜像的命令是docker pull. ...
- win10安装docker,VSCode管理docker
背景 docker:随着技术的不断迭代,开发环境的配置与部署越来越重要.Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linu ...
随机推荐
- Python函数中的位置参数
函数的参数在调用时传递数据时,默认是按参数的位置顺序传值,即形参的顺序与实参的顺序逐一对应,这种参数的使用模式称为位置参数.位置参数是最常用的一种参数使用形式. 使用位置参数传递实参的情况下,要求有缺 ...
- IT人的5G网络架构视点:从网络架构演进的前世今生详解5G各NF网络功能体
一.引言 以前从来没关注电信无线上网网络的具体架构(也即PS域架构),现在开始学5G接触这些东西时,理解起来很痛苦,资料也少,于是一方面到处找人咨询,一方面到处查资料,最后发现应该从3G.4G时代的架 ...
- PyQt(Python+Qt)学习随笔:QTableWidgetItem的位置相关方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidgetItem项在QTableWidget中的位置包括三个属性来决定,就是表格部件 ...
- PyQt(Python+Qt)学习随笔:键盘焦点和逻辑焦点(Logic Focus与Keyboard Focus )
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Qt中的焦点有键盘焦点和逻辑焦点(Logic Focus与Keyboard Focus )的区分,键 ...
- PyQt(Python+Qt)学习随笔:Qt Designer组件属性编辑界面中对话窗QDialog的modal属性
modal属性表示窗口执行show()操作时是以模态窗口还是非模态窗口形式展示,缺省为False,设置该值与QWidget.windowModality的值设置为 Qt.ApplicationModa ...
- Android基础02
初识安卓的另一个重要的组件---广播. 1.广播的分类 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播 接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言.这 ...
- scrapy爬取微信小程序社区教程(crawlspider)
爬取的目标网站是: http://www.wxapp-union.com/portal.php?mod=list&catid=2&page=1 目的是爬取每一个教程的标题,作者,时间和 ...
- pandas LabelEncoder 测试集出现了训练集中未出现过的值怎么解决(y contains previously unseen labels 解决方法)
for i in categorical_ix: le = joblib.load(f"./LabelEncoder/{i}_LabelEncoder.model") #由于tes ...
- 题解-洛谷P6788 「EZEC-3」四月樱花
题面 洛谷P6788 「EZEC-3」四月樱花 给定 \(n,p\),求: \[ans=\left(\prod_{x=1}^n\prod_{y|x}\frac{y^{d(y)}}{\prod_{z|y ...
- 笔记-Cats Transport<已写题解>
笔记-Cats Transport Cats Transport 令 \(D_i=\sum_{j=1}^id_i\),\(T_i=t_i-D_{h_i}\). 为 \(T_i\) 从小到大排序,令 \ ...