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 ...
随机推荐
- 手机APP测试(测试点、测试流程、功能测试)
1.功能测试 1.1 启动 APP安装完成后,是否可以正常打开,稳定运行 APP的速度是可以让人接受,切换是否流畅 网络异常时,应用是否会崩溃:在请求超时的情况下,如果程序逻辑处理的不好,就有可能发生 ...
- Acwing 393. 雇佣收银员
算法1: 差分约束 + 枚举 O(Tn2028) 由于牵扯到 \([i - 8 + 1, i]\) 这段区间的和的约束,所以用前缀和更好表达一些. 设 \(num[i]\)表示 \(i\) 时刻有多少 ...
- word IF嵌套实现登记学生成绩(合格,良好,优秀)
word IF函数 IF语法 IF(判断条件,条件成立的动作,条件不成立的动作),以逗号(英文)分隔 例:=IF( 0 < 1 , "good" , "bad&qu ...
- Tensorflow学习笔记No.11
图像定位 图像定位是指在图像中将我们需要识别的部分使用定位框进行定位标记,本次主要讲述如何使用tensorflow2.0实现简单的图像定位任务. 我所使用的定位方法是训练神经网络使它输出定位框的四个顶 ...
- 在虚拟机中安装Linux系统CentOS7详细教程!!!超详细!!!!一看就会!!!手把手教学!!!
一.CentOS的下载 CentOS是免费版,推荐在官网上直接下载.https://www.centos.org/download/ DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上, ...
- Linux相关知识基础
目录 前言 第一章 Linux远程连接管理 1. 为什么要远程连接Linux系统 2. 连接前的小知识 2.2.1 IP地址 2.2.2 端口的概念 2.2.3 协议的概念 3. 远程连接Linux的 ...
- 谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
目录 一.binlog 的高速缓存 二.刷盘机制 三.推荐的策略 推荐阅读 问个问题吧!为什么你需要了解binlog的落盘机制呢? 我来回答一下: 上一篇文章提到了生产环境中你可以使用binlog ...
- JavaSE06-面向对象
1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象. 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类是具有相同属性和 ...
- Kubernetes弃用Docker后怎么办?
本文转自Rancher Labs 近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后将弃用Docker作为容器运行时.这一消息在云原生领域激起了不小的水 ...
- Eureka系列(四) 获取服务Server端具体实现
获取服务 Server端流程 我们先看下面这张图片,这张图片简单描述了下我们EurekaClient在调用EurekaServer 提供的获取服务Http接口,Server端实现接口执行的大致流程 ...