【问题标题】:click-and-run docker image (or VM) with web interface?单击并运行带有 Web 界面的 docker 映像(或 VM)?
【发布时间】:2016-08-12 16:26:44
【问题描述】:

我能够向用户交付应用程序,但是它需要安装相当多的程序和组件,这代表了一些我希望避免的开销和解释。我认为非常好的一种方法是简单地提供 VM 或 Docker 映像。在这个想法中,交付物将是一个图像,理想情况下,用户只需双击 docker 图像并弹出一个显示方便前端的 Web 界面。 (在这种情况下,我想象它会运行 Jupyter 以允许与我正在开发的 Python 脚本进行交互。)

但是,我仍然对 Docker 的工作方式感到有些困惑。而不是能够发送可双击的图像,您似乎必须运行docker pull .. 并下载......一堆东西......并将它们安装......某处。然后你必须运行一个命令,docker run ...

是否有更简单、更面向文件的 Docker 接口或类似的 VM 解决方案?为什么它必须以这种奇怪的方式管理事情?

(我更喜欢 Docker,因为它现在有很好的 Windows 和 Mac 支持,据我了解,它的镜像可能比 VM 镜像小很多。)

编辑:通过“奇怪的方式”,我的意思是,对我来说更清楚的是,我只需下载某种文件 my-docker-thing.image 并使用类似 docker run my-docker-thing.image 运行它。相反,一个docker pull 似乎正在用一堆名为..*ImageBlob* 的文件快速填满我的硬盘驱动器/var/lib/docker,我不知道它实际上在做什么。我假设这些文件包含可以组合成图像的“片段”,但是有没有办法在单个文件中表示它?

【问题讨论】:

    标签: python docker virtual-machine software-distribution


    【解决方案1】:

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

    docker save your_image > your_image.tar
    

    以这种方式创建的 TAR 文件是独立的,您可以以任何您喜欢的方式分发它。在另一台主机(已安装 Docker 引擎)上,您可以使用 docker load 命令导入 TAR 文件(然后使用 docker run 启动它):

    docker load < your_image.tar
    docker run your_image
    

    一些背景说明(因为您曾问过为什么 Docker 以这种方式处理图像):

    层文件系统允许 Docker 在磁盘空间和容器创建时间方面非常有效地处理图像和容器。例如,您可能有多个本地镜像,它们都构建在一个公共基础镜像上(例如,ubuntu:16.04 镜像)。层文件系统会识别这一点,并且只在执行docker pull 时下载基础图像一次

    使用导出的图像文件,您将放弃这一优势,因为保存为文件的图像将始终包含构建该图像的所有文件系统层。考虑一个示例,您正在使用 200MB 的基本映像和 10MB 的自定义应用程序数据(后者在发布应用程序的新版本时经常更改)。使用 docker savedocker load 将始终生成一个新的 210MB 大小的 tarball,您需要为应用程序的每个构建分发它。将 docker pushdocker pull 与集中式注册表一起使用,您只需将 10MB 的已更改图像层传入和传出注册表。

    【讨论】:

    • 太好了,谢谢!我还没有遇到这个功能。我试试,听起来不错。
    【解决方案2】:

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

    快速示例: 其中一个组件是 Nginx:

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

    通过以上内容,您可以创建一个容器,并在准备好后安装在您的客户机器上。

    如果您想在特定环境中使用 docker,那么我建议您挂载一个卷并在 docker 上执行工作(编译或其他东西),然后将结果放入挂载的卷中,这样您就可以从不污染系统中受益并保证每次都得到相同的结果

    【讨论】:

    • 是的,我不介意必须先安装 Docker。我不明白 Docker 在那之后做了什么,docker pull。我的意思是,我知道它正在从某个中心位置下载图像文件,但是是否有非面向服务器的界面?我可以以某种方式“压缩”完整的图像吗?
    • 是的@helmbert 回答说:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2021-11-22
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多