docker是制作应用程序跨平台的解决scheme吗?

通过阅读一些博客和介绍材料,我正在开始与docker工人。

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

如果我的理解是正确的,那么这是否意味着微软可以将他们的办公套装包装到容器中,我可以在Mac OS或Linux上安装和运行它? 和其他一些不错的Mac应用程序也可以运到Windows和Linux?

Docker是LXC之上的一个用户友好的层,一组Linux内核特性允许文件系统configuration,networking资源,进程表和其他历史上全球性的内核中介资源的命名空间。 (这与FreeBSD jails比kvm或VMware更接近)。

这些function对于Linux来说非常特殊,运行在Docker容器中的应用程序仍然直接与主机的Linux内核进行交互(尽pipe它只能访问暴露给参与其中的命名空间的资源的子集)。 类似地,操作码直接在硬件上运行,而没有仿真虚拟化,所以硬件差异也不会被抽象出来

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


2017年初更新

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

这仍然意味着它仅限于运行本地Linux应用程序,而且它还不能为桌面应用程序提供显示层(X11,VNC或其他需要额外使用的其他东西)。 但是,通过捆绑虚拟化工具,现代Docker现在可移植性解决scheme(跨平台,而不是架构)。