什么是 docker.io 与 docker-ce 和 docker-ee (现在称为“ Mirantis Kubernetes Engine”)的关系?

以前,安装 docker 我会使用

apt-get install docker.io

但是,我最近注意到了安装 docker 的文档,它使用 docker-ce。我试图找出这两者之间的区别,但一无所获。Docker.io 和 docker-ce 是什么关系?

92873 次浏览

旧版本的 Docker 二进制文件被称为 Docker 或 Docker-engine 或 Docker-io

Docker-io 包仍然是 Debian/Ubuntu 在其 官方回购协议上提供的 docker 版本所使用的名称。

Docker-ce 是由 Docker.com直接提供的经过认证的版本,也可以是 从源头开始建造

在 Debian/Ubuntu 平台上使用 docker-io 名称的主要原因是为了避免与 docker 系统托盘二进制文件发生名称冲突。

Http://manpages.ubuntu.com/manpages/precise/man1/docker.1.html

Docker 有一个企业版(EE)和一个免费社区版(CE)

在安装 Docker Community Edition (Docker-ce from Docker.com)之前,您可能需要删除旧的二进制文件。

森托斯/RHL:

Https://docs.docker.com/engine/installation/linux/docker-ce/centos/

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

Ubuntu/Debian:

Https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/

$ sudo apt-get remove docker docker-engine docker.io containerd runc

Ubuntu 的试运行比较:

$ sudo apt-get install docker.io --dry-run
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
bridge-utils cgroupfs-mount containerd pigz runc ubuntu-fan
Suggested packages:
ifupdown aufs-tools debootstrap docker-doc rinse zfs-fuse | zfsutils
The following NEW packages will be installed:
bridge-utils cgroupfs-mount containerd docker.io pigz runc ubuntu-fan
0 upgraded, 7 newly installed, 0 to remove and 70 not upgraded.
Inst pigz (2.4-1 Ubuntu:18.04/bionic [amd64])
Inst bridge-utils (1.5-15ubuntu1 Ubuntu:18.04/bionic [amd64])
Inst cgroupfs-mount (1.4 Ubuntu:18.04/bionic [all])
Inst runc (1.0.0~rc7+git20190403.029124da-0ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst containerd (1.2.6-0ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst docker.io (18.09.7-0ubuntu1~18.04.4 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Inst ubuntu-fan (0.12.10 Ubuntu:18.04/bionic [all])
Conf pigz (2.4-1 Ubuntu:18.04/bionic [amd64])
Conf bridge-utils (1.5-15ubuntu1 Ubuntu:18.04/bionic [amd64])
Conf cgroupfs-mount (1.4 Ubuntu:18.04/bionic [all])
Conf runc (1.0.0~rc7+git20190403.029124da-0ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Conf containerd (1.2.6-0ubuntu1~18.04.2 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Conf docker.io (18.09.7-0ubuntu1~18.04.4 Ubuntu:18.04/bionic-updates, Ubuntu:18.04/bionic-security [amd64])
Conf ubuntu-fan (0.12.10 Ubuntu:18.04/bionic [all])


$ sudo apt-get install docker-ce --dry-run
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
aufs-tools cgroupfs-mount containerd.io docker-ce-cli libltdl7 pigz
The following NEW packages will be installed:
aufs-tools cgroupfs-mount containerd.io docker-ce docker-ce-cli libltdl7 pigz
0 upgraded, 7 newly installed, 0 to remove and 70 not upgraded.
Inst pigz (2.4-1 Ubuntu:18.04/bionic [amd64])
Inst aufs-tools (1:4.9+20170918-1ubuntu1 Ubuntu:18.04/bionic [amd64])
Inst cgroupfs-mount (1.4 Ubuntu:18.04/bionic [all])
Inst containerd.io (1.2.10-3 Docker CE:bionic [amd64])
Inst docker-ce-cli (5:19.03.5~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Inst docker-ce (5:19.03.5~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Inst libltdl7 (2.4.6-2 Ubuntu:18.04/bionic [amd64])
Conf pigz (2.4-1 Ubuntu:18.04/bionic [amd64])
Conf aufs-tools (1:4.9+20170918-1ubuntu1 Ubuntu:18.04/bionic [amd64])
Conf cgroupfs-mount (1.4 Ubuntu:18.04/bionic [all])
Conf containerd.io (1.2.10-3 Docker CE:bionic [amd64])
Conf docker-ce-cli (5:19.03.5~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf docker-ce (5:19.03.5~3-0~ubuntu-bionic Docker CE:bionic [amd64])
Conf libltdl7 (2.4.6-2 Ubuntu:18.04/bionic [amd64])

对接二进制程序将是最新的版本,包括 docker-ce-cli。

小心码头

公认的答案并不复杂。

docker-ce由 docker.com 提供, docker.io由 Debian 提供。

从表面上看,这意味着您可以立即安装 docker.io,而对于 docker-ce,您必须事先从 docker.com 附加一个外部存储库。

然而,更重要的是,尽管这两个软件包都提供了适当发布的 Docker 版本,但它们都有一个 非常不同的内部结构:

  • docker.io采用 Debian (或 Ubuntu)的方式: 每个外部依赖项都是一个单独的包可以而且将独立更新。
  • Abc0采用了 Golang 的方式: 所有的依赖项都被拉到 < em > source 树中在构建之前,整个事情在构建之后形成一个单一的包。所以您总是同时更新 docker 及其所有依赖项。

后一种方法的问题在于,它违背了 Debian/Ubuntu 正在尝试做的很多事情。

如果每个人都像 docker-ce那样做..。

你的系统上会有174个版本的许多库,这不仅消耗了大量的内存,而且基本上不可能决定你是否拥有7.6.5版本的库 XYZ 和其中的某个 太可怕了安全漏洞。
更不用说关闭这个漏洞(或者您拥有的所有109个实例)了。

更糟糕的是,174个版本中有一个可能是三年前的5.4.3版本,它有另一个非常不同的安全漏洞,这个漏洞已经被世界遗忘很久了,但是它仍然存在于你的系统中。

一些评论:

  • 许多网页称 docker.io“过时”。那是因为它已经有一年没有维护了。截至2019年8月,情况已不再是这样。
  • 我今天学习了所有这些 给你,现在将从使用 docker-ce切换到使用 docker.io——可能再也不会回去了。
  • Debian/Ubuntu 封装系统如此复杂是有原因的,一个很好的原因。

编辑: 正如 BobHy 在评论中指出的,docker-ce的方法 还有一个优点: 不太可能出现兼容性问题 你必须权衡你的风险。

码头企业现在是 米兰提斯 · 库伯内特斯引擎:

其他的答案都是在 Docker 把他们的企业资产卖给了 Mirantis之前写的,而且这次收购带来了很大的变化..。

如果你现在访问链接“ 企业版 ”-https://docs.docker.com/ee/-你会发现 oogatz。这是因为“ < strong > Docker Enterprise ”现在是“ 米兰提斯库伯内特斯引擎

蜂群的未来:

随着 Kubernetes 和米兰蒂斯收购多克的企业资产,群体的未来充满了疑问。然而,群体集装箱编排的未来似乎更加确定了,因为它是 Mirantis Kubernetes Engine v3.5的一个标题功能,根据 博客文章的说明:

顾客们已经发表了意见,他们中的许多人对此非常满意 使用 Swarm 而不是 Kubernetes 进行容器编配 记住,我们很兴奋地宣布只有群集模式: 一个新的 米兰提斯库伯内特斯 engine configuration 选项 平台专用于群体编排和 Docker 容器

因此,出于企业规划的目的,看起来 群体在库伯内特的世界里有一个未来。

但这还不是 Mirantis 的全部变化。

Docker CE 由第三方开发(主要) :

从202012年9月1日起,强大 > Docker CE将成为 产品 < strong > TWO 单独的 Github 项目:

因此,从20.10版向前发展,白鲸计划现在将做开发 强大 > Docker CE的繁重工作,而米兰提斯追求货币化 米兰提斯 · 库伯内特斯引擎。不要抱怨: 米兰提斯毕竟是一个企业,他们必须盈利,没有意外。

然而,强大 > Docker CEdocker-cli部分仍在由 Docker 开发中。显然,docker-cli的比特很有趣,他们一直保持内部的比特..。

结论:

在 IBM 收购了红帽公司(Red Hat)、 < strong > CentOS 被淘汰之后,我猜想依赖 Docker 集装箱化的组织也会对收购米兰提斯公司(Mirantis)后 强大 > Docker CE的未来感到担忧。看来白鲸计划 可以接管是米兰提斯拉他们的(5)开发商。但它最终将导致 Docker 的分岔,并使开发走上不同的道路。

红帽雇佣了 CentOs 项目的员工(你不知道吗?) ,所以他们总是受惠于遵循 RH 给他们的方向。我不知道 Docker 是否雇佣或以其他方式支付剩下的22/27 Moby 开发者。考虑到米兰提斯公司面临的商业压力使得多克公司成为一个有利可图的收购公司这使得在当前环境下的商业规划决策具有挑战性,未来多克公司的景观可能会有进一步的实质性变化。

Docker 我

这是由 Linux 发行版提供的。他们正在编译上游 docker 引擎本身,并添加一些特定于发行版的代码,主要是启动脚本。之所以选择这个名称,是因为 docker已经被一个不相关的项目占用。此外,Debian 目前还有一些其他的相关软件包:

  • Docker-doc: 单独打包的文档。
  • Rootesskit: 用于在没有 root 用户的情况下运行 docker 引擎。
  • Docker-compose: 这是一个很好的东西,因为 Docker Inc 打包了 compose,但随着用 Go 编写并直接包含在 Docker CLI 中的 compose 版本2的出现,这种情况正在发生变化。
  • Docker-Registry: 注册表服务器的独立打包,不过它的用例并不清楚,因为几乎每个人都将其作为来自 registry:2映像的容器运行。
  • 凭证帮助程序: 有几个包可用于这些服务,如果您为注册中心向云供应商进行身份验证,那么它们可能非常有用。

Docker-ce

这是社区版,也就是 Docker 公司发布的 OSS 版本。这就是大多数人在 Linux 上安装 docker 时想到的。此外,码头回购协议目前包括以下内容:

  • Docker-ce-cli: 您只能在没有引擎的情况下安装命令行,并使用它远程访问其他主机上的 docker 引擎。
  • Docker-ce- 无根-额外功能: 在最近发布的 docker 版本中,已经做了很多工作来启用无根支持,因此您可以以用户的身份而不是 root 用户的身份运行引擎。
  • Docker-scanner-plugin: 这是一个可以用于图像的漏洞扫描器。

有关安装 docker-ce的说明可以从 Docker 的网站获得。

Docker-ee

这是企业版多克公司的一部分卖给了 Mirantis。在这个版本中有一些额外的功能(自从分离之后我就没有密切关注过) ,但是安装这个版本的主要两个原因是供应商支持(付费) ,并将其作为其他商业产品的基础,比如 UCP 和 DTR,这些产品是在 Swarm/Kubernetes 和注册服务器之上的用户界面。除非你一直在和 Mirantis 销售合作,并且有许可证密钥,否则我不认为有任何理由安装这个版本。

在 docker.io 和 docker-ce 之间选择

主要的决定是是从您的 Linux 发行版安装 Docker 的 OSS 版本,还是直接从 Docker Inc. 安装。需要考虑以下几点:

  • 关于 https://docs.docker.com的文档将集中于 docker-ce。
  • 对 Docker 公司问题的支持将希望您已经安装了他们的版本。如果您是一个包装产品的开发人员,那么您只想支持自己的包装,那么这才是公平的。
  • 在 docker.io 之前,docker-ce 将提供补丁和新版本,这对于时间敏感的安全问题可能很重要。
  • 安装 docker-ce 需要向 sources.list 添加另一个存储库,这是另一个可信任的供应商,以及另一个用每个补丁更新的包列表。
  • 如果您只想要 CLI,那么您可以访问远程机器上的 docker (例如 DOCKER_HOST=ssh://you@example.com docker ps) ,那么您需要使用 docker-ce-cli包。

对我来说,如果您正在为运行容器设置一个专用机器,那么使用 docker-ce。如果您只是偶尔运行一个容器,那么不要遵循 Docker Inc. 在上游所做的操作,而是使用该机器完成许多其他任务,使用 docker.io可以简化您的工作流程。