点击并运行带有Web界面的docker映像(或VM)?

我有能力向用户提供应用程序,但是它需要安装很多程序和组件,这代表了我愿意避免的一些开销和解释。 我想到的一个方法将是相当不错的,只需提供一个VM或Docker镜像。 在这个想法中,交付成果将是一个图像,理想的用户只需双击泊坞窗图像,并popup一个Web界面,显示一个方便的前端。 (在这种情况下,我想象它会运行Jupyter来允许与我正在开发的Python脚本进行交互。)

不过,Docker的工作方式我还是有点困惑。 而不是能够发送双击图像,似乎你必须运行docker pull ..它下载…一堆东西..并安装它们..在某处。 那么你必须运行一个命令, docker run ...

是否有一个更简单,更多的面向Docker或类似的虚拟机解决scheme的文件界面? 为什么要用这种奇怪的方式来pipe理事情呢?

(我更喜欢Docker,因为它现在有非常好的Windows和Mac的支持,而且它的图像比我所了解的VM镜像要小很多)。

编辑:“奇怪的方式”,我的意思是,更清楚的是,我只是下载一些文件my-docker-thing.image并运行它像my-docker-thing.image run my-docker-thing.image docker run my-docker-thing.image 。 相反,单个docker pull好像是在/var/lib/docker ..*ImageBlob*一堆名为something的文件快速填充我的硬盘..*ImageBlob*和我不知道它实际上在做什么。 我假定这些文件包含可以组成一个图像的“碎片”,但有没有办法在一个文件中表示这个?

是的,您可以将Docker映像导入和导出为简单的TAR文件。 要将现有图像导出为tar文件,请使用以下docker save命令:

 docker save your_image > your_image.tar 

以这种方式创build的TAR文件是自包含的,您可以以任何方式分发它。 在另一个主机上(已经安装了Docker引擎),你可以使用docker load命令导入TAR文件(然后用docker run启动它):

 docker load < your_image.tar docker run your_image 

一些背景说明(因为您已经问过Docker为什么要使用图像):

层文件系统允许Docker在磁盘空间和容器创build时间方面非常有效地处理图像和容器。 例如,你可能有多个本地图像都build立在一个通用的基础图像上(例如, ubuntu:16.04图像)。 图层文件系统将识别这一点,并在进行docker pull时只下载一次基础图像。

使用导出的图像文件,您放弃了这一优势,因为保存为文件的图像将始终包含图像所构build的所有文件系统层。 考虑一个例子,在这个例子中,你正在使用一个200MB的基本映像和10MB的自定义应用程序数据(后者在发布你的应用程序的新版本时经常变化)。 使用docker savedocker load总是会导致一个新的210MB大小的tarball,你需要分发每个版本的应用程序。 使用docker pushdocker pull与一个集中的registry一起使用,您只需要将10MB的已更改图像层传输到registry中即可。

为了让Docker容器运行,你需要一个Docker引擎。 如果您的客户想要在主机上运行容器,则需要安装Docker。

快速举例:你们其中的一个组件是Nginx:

 docker pull ngnix:latest docker run --name webInterface --host web -it ngnix:latest 

通过上述操作,您可以创build一个容器,并在准备就绪时安装到客户机器上。

如果你想在特定的环境下使用docker,那么我build议安装一个卷,然后在docker(编译或者其他的东西)上做这个工作,然后把结果放到挂载的卷中,这样你就不会污染你的系统并保证每次同样的结果