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

What is docker.io in relation to docker-ce and docker-ee (now called "Mirantis Kubernetes Engine")?

以前,要安装 docker 我会使用

apt-get install docker.io

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

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

docker-io 软件包仍然是 Debian/Ubuntu 在其 official repos 上提供的 docker 版本使用的名称.

docker-cedocker.com and can also be built from source.

直接提供的认证版本

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

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

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

在安装 Docker 社区版(docker-ce 来自 docker.com)之前,您可能需要删除旧的二进制文件。

Centos/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

Dry-运行 比较 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 binaries 将趋向于最新版本并包括 docker-ce-cli。

警惕docker-ce

接受的答案不够复杂。

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

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

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

  • docker.io 以 Debian(或 Ubuntu)的方式做到这一点:每个外部依赖项都是一个单独的包,可以并且将独立更新。
  • docker-ce 以 Golang 方式进行:在构建和整个过程之前,所有依赖项都被拉入 source tree事后形成一个单一的包裹。所以你总是一次更新 docker 及其所有依赖项。

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

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

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

更糟糕的是,174 个版本中的一个很可能是三年前 XYZ 的 5.4.3 版本,它有另一个非常不同但同样巨大的安全漏洞,世界早已忘记但它仍然会愉快地存在于您的系统中。

一些备注:

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

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

Docker Enterprise 现在是 Mirantis Kubernetes Engine:

其他答案写在Docker sold their enterprise assets to Mirantis之前。那次收购带来了巨大的变化......

如果您现在访问link“企业版”- https://docs.docker.com/ee/ - you'll find oogatz. That's because "Docker Enterprise" is now "Mirantis Kubernetes Engine

Swarm 的未来:

随着 Kubernetes 的采用和 Mirantis 购买 Docker 的企业资产,swarm 的未来受到质疑.然而,swarm 容器编排的未来现在似乎更加确定,因为根据这个blog post 其中指出:

"...customers have spoken — and many of them are completely satisfied using Swarm instead of Kubernetes for container orchestration. With that in mind, we’re excited to announce Swarm-only mode: a new Mirantis Kubernetes Engine configuration option that dedicates the platform exclusively to Swarm orchestration and Docker containers."

因此,出于企业规划的目的,swarm 似乎在 Kubernetes 世界中拥有未来。

但这并不是 Mirantis 的所有变化...

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

随着 v20.10 版本 于 20201209 生效,Docker CE 现在是 product of TWO separate Github Projects:

因此从 v20.10 开始,The Moby Project 现在将完成开发 Docker CE[=82 的繁重工作=] 而 Mirantis 追求货币化 Mirantis Kubernetes Engine。不要抱怨:Mirantis 毕竟是一家企业,他们必须盈利;没有惊喜。

Docker CEdocker-cli 部分仍然由 Docker 开发.显然 docker-cli 位很有趣,他们将其保留在内部...

结论:

在 IBM 收购了 Red Hat 并且 CentOS 被淘汰后,我想依赖 [=116 的组织也有类似的担忧=] 关于 Docker CE post Mirantis 收购的未来的容器化。看起来 Moby 项目 可以 接管 Mirantis 以拉动他们的 (5) 开发人员。但它最终会导致 Docker 的分叉,并且发展会走不同的道路。

Red Hat 雇用了 ​​CentOs 项目人员(你不知道?),所以他们总是有责任遵循 RH 给他们的指示。我不知道 Docker 是否雇用或以其他方式支付剩余的 22/27 Moby 开发人员。考虑到 Mirantis 面临的商业压力需要 Docker 进行有利可图的收购,因此 Docker 格局未来可能会有进一步的 material 变化,这使得在当前格局下规划商业决策具有挑战性。 .

docker.io

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

  • docker-doc:单独打包的文档。
  • rootlesskit:对于 运行 在没有 root 用户的情况下启用 docker 引擎。
  • docker-compose:这是一个很好的选择,因为 Docker Inc 正在打包 compose,但是随着 compose 的第 2 版,它正在发生变化,它是用 Go 编写的并直接包含在docker命令行界面。
  • docker-registry:注册表服务器的独立包装,尽管用例尚不清楚,因为几乎每个人 运行 都将其作为 registry:2 图像中的容器。
  • credential helpers:有几个用于这些的包,如果您向云供应商验证您的注册表,它们会很有用。

docker-ce

这是社区版,又名 Docker Inc. 的 OSS 版本。这是大多数人在 Linux 上安装 docker 时的想法。此外,docker 存储库目前提供以下内容:

  • docker-ce-cli: 可以只安装命令行不带引擎,用于远程访问其他主机上的docker引擎
  • docker-ce-rootless-extras:在 docker 的最新版本中启用无根支持已经付出了很多努力,因此您可以 运行 作为您的用户的引擎而不是作为 root。
  • docker-scan-plugin:这是一个可用于图像的漏洞扫描器。

docker-ce 的安装说明可从 Docker's website 获得。

docker-ee

这是企业版,是 Docker Inc. 的一部分,已出售给 Mirantis。有(自拆分以来我没有密切关注它)一些额外的功能编译到这个版本中,但是安装这个版本的两个主要原因是供应商支持(付费)和将它用作其他商业产品的基础,如UCP 和 DTR,它们是 Swarm/Kubernetes 之上的 UI 和注册服务器。除非您一直从事 Mirantis 销售并拥有许可证密钥,否则我认为没有任何理由安装此版本。

在 docker.io 和 docker-ce

之间选择

主要决定是从您的 Linux 发行版还是直接从 Docker 公司安装 docker 的 OSS 版本。需要考虑的几点:

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

对我来说,如果您要为 运行ning 容器设置专用机器,请选择 docker-ce。如果您只是 运行 偶尔使用容器,请不要跟随 Docker Inc. 上游所做的事情,而是将机器用于许多其他任务,使用 docker.io 可以简化您的工作流程.