一个 Docker 容器的便携性如何?
Posted
技术标签:
【中文标题】一个 Docker 容器的便携性如何?【英文标题】:How much a Docker container is portable? 【发布时间】:2020-08-03 11:14:28 【问题描述】:我在网上搜索这个问题的答案:一个 Docker 容器可以移植到什么程度?
我知道 OCI 是 Docker 建立的一种标准化方式,我也知道您不能简单地将 Linux 容器迁移到 Microsoft Windows 平台,反之亦然。我的具体问题是,我可以在具有不同内核版本的不同主机上重新启动我的容器吗?还是使用不同的 Docker 版本?
用例:我正在寻找一个有助于实时迁移状态完整容器、管理工作负载、减少停机时间并提高高可用性的平台。这样的系统在多大程度上受限于Linux内核版本、docker版本等底层系统? 谢谢你
【问题讨论】:
【参考方案1】:在大多数情况下,运行在不同主机上的Docker容器应该以相同的方式运行,不考虑内核版本..只要内核满足最低要求。
Docker 不会改变在 Docker 容器内运行的软件的要求。这意味着.. 如果里面的软件在旧内核上会出现问题,那么在 Docker 上运行它......在旧内核上可能也会出现问题。 (查看这个问题的答案,他们解释了很多:How does Docker handle different kernel versions?)
关于 Docker 版本,Docker 文档中有一个页面解释了重大更改,您可以在此处找到: https://docs.docker.com/engine/breaking_changes/
Docker 镜像没有指定构建它的 Docker 版本。如果用于构建和推送的版本与另一个尝试拉取和运行镜像的版本之间没有重大更改,它应该可以工作。
另外,如果你正在寻找一个使用 Docker 并提供高可用性和有状态的容器化应用程序的平台.. 有很多选择,我建议你看看 Kubernetes (https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/)
通常,此类高可用性平台由许多标准化节点(相同的内核、相同的 lib 和 Docker 版本、相同数量的可用 RAM 和 CPU 等)组成,以便以统一的方式跨节点分发容器化应用程序.. 并且还提供易于维护(可能使用 Ansible 和类似工具)
【讨论】:
感谢您的详尽回答!假设您的手机支持 Docker 并在 Docker 容器中运行其所有应用程序(尽管目前还不可能)。然后您的手机可以将您的一些应用程序实时迁移到附近的计算源(可以是您的笔记本电脑或其他任何东西)以节省电池或提高性能。虽然,这是一种错觉,需要太多的改变,但我想知道如果所有的要求都满足了,这种错觉有多大可能。多少受平台限制。【参考方案2】:Docker 容器使用主机系统的内核。所以你只能在 docker 内运行与宿主系统内核兼容的程序。如果你在 Docker 容器中的程序需要一个特殊的系统调用,而主机在没有它的情况下被编译,你就迷路了。
Windows 版本的 Docker 可以使用虚拟机运行 Linux 映像,参见。 https://docs.microsoft.com/de-de/virtualization/windowscontainers/deploy-containers/linux-containers
【讨论】:
以上是关于一个 Docker 容器的便携性如何?的主要内容,如果未能解决你的问题,请参考以下文章
Docker-关于docker容器之间的连通性及容器与宿主机之间的连通性