docker - docker 是使应用程序跨平台的解决方案吗?

标签 docker containers

我通过阅读一些博客和介绍 Material 开始使用 docker。

我的理解是 docker 可以将单个应用程序包装到一个标准化的容器中。该容器提供了一个沙箱,以及应用程序运行所需的所有必要资源,并且其中的应用程序始终存在于该容器中。这意味着我可以将容器运送到任何地方(不同类型的操作系统甚至云平台)并且它应该仍然可以正确运行。

如果我的理解是正确的,那么这是否意味着微软可以将他们的办公套装包装到一个容器中,我可以在 mac os 或 linux 上安装和运行它?还有其他一些不错的 Mac 应用也可以移植到 windows 和 linux 上?

最佳答案

Docker 是 LXC 之上的用户友好层,LXC 是一组 Linux 内核功能,允许对文件系统配置、网络资源、进程表和其他内核介导的资源进行命名空间,这些资源在历史上是全局的。 (与 kvm 或 VMware 相比,它更接近 FreeBSD jails)。

这些特性是 Linux 特有的,在 Docker 容器中运行的应用程序仍然直接与主机的 Linux 内核交互(尽管它只能访问暴露于它所参与的命名空间的资源子集)。同样,操作码直接在硬件上运行,没有对虚拟化进行仿真,因此也没有抽象出硬件差异

Docker 因此不是一个跨操作系统(或跨架构)的可移植层,它不会成功地隐藏依赖于特定内核版本的应用程序的实现细节,更不用说完全不同的操作系统了完全一致。


2017 年初更新

Docker 现在可以在 Mac 上运行,它捆绑了一个轻量级的虚拟化堆栈,与 Linux 上的 kvm 非常相似。当以这种方式运行时,它实际上同时进行虚拟化和容器化——前者运行(单个)Linux 内核,后者运行该内核中的一系列独立容器。

这仍然意味着它仅限于运行 native Linux 应用程序,并且它仍然不为桌面应用程序提供显示层(需要另外使用 X11、VNC 或其他类似的东西)。然而,通过捆绑虚拟化工具,现代 Docker 现在成为一种可移植性解决方案(跨平台,而不是架构)。

关于docker - docker 是使应用程序跨平台的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30632386/

相关文章:

containers - RDF 容器和集合之间的区别?

docker - 如何使用 VSCode 的 Java 调试器调试在 Docker 容器内运行的 Java 应用程序

docker - 为什么允许此 docker 镜像通过防火墙?

python - 在另一个容器内使用Docker容器的数据

linux - Kubernetes:无法安装仪表板

docker - 运行 kubernetes autoscaler

linux - docker如何映射主机分区?

docker - 恢复预配置的Docker镜像的方法

sql-server - Debezium 如何使用 Kafka Connect 正确注册 SqlServer 连接器 - 连接被拒绝

vagrant - Vagrant 与 Docker 中的隔离