asp.net - 将 Docker 部署到离线 PC

标签 asp.net docker dockerfile

我是 docker 的新手,遇到了一个我遇到麻烦的路障。

这是我的场景

当前(预容器)

  • 我们进行了输出 MSI 的 Visual Studio Online 构建。该构建使用完整的 .Net 框架(我们稍后将转到 .Net 核心)。
  • MSI 放在闪存驱动器上并安装在离线(无法访问 Internet)的计算机上。
  • MSI 安装了几个公开 web api web 服务的 Windows 服务。
  • 本地客户端可以查询这些 Web 服务。

  • 所需(容器)
  • 我们希望用 docker 容器替换 windows 服务。
  • 安装仍然需要离线执行(不能上网)
  • 我们希望使用 docker 社区版来避免成本。
  • 一个假设:离线计算机将安装 docker 并且已经下载了基础镜像“microsoft/aspnet”。

  • 为了解决这个问题,我只是从 VS 2017 创建了一个新的 ASP.NET Web 应用程序。我选择了 Web Api 并启用了 docker 支持。太好了,现在我有一个运行有网站/服务的容器。接下来我想尝试弄清楚如何部署容器/镜像。作为引用,这里是我创建空项目时创建的默认 Dockerfile。
    FROM microsoft/aspnet:latest
    ARG source
    WORKDIR /inetpub/wwwroot
    COPY ${source:-obj/Docker/publish} .
    

    我首先看的是“docker save”。我的想法是我可以将图像保存为文件并使用它来部署容器。但是,因为我使用的是完整的 .net 框架,所以保存的文件是 7.7 GB。我明白为什么它这么大;该图像不仅包含我的示例网站,还包含 microsoft/aspnet 图像。经过一番谷歌搜索,我发现引用确实能够排除层( https://github.com/moby/moby/pull/9304 ),但似乎“docker save”不支持这一点。最终,这就是我认为我想要的 - 能够将我的图层保存到文件中。

    我是否走在正确的道路上试图弄清楚如何保存图层?我们对如何实现这一点持开放态度,但我们无法为每个软件更新部署一个 7.7 GB 的文件。

    任何关于如何做到这一点的建议 - 特别是任何包含 VS Online 构建的建议都非常感谢。

    谢谢。

    最佳答案

    离线传输图像的唯一方法是使用 docker save 将其保存到 tarball 中。

    至于图片的大小,解决方法是使用更小的aspnet .您正在使用的是 7GB 大的。因此,您需要从 available ones 中选择一个足够小的 aspnet 镜像。

    另一种解决方案是传输源代码并在目标机器上构建镜像。在这种情况下,您保存 microsoft/aspnet:latest到一个 tarball 并转移它 一次到目标机器。每当您在源中有新的更新时,您将源和 Dockerfile 复制到目标机器并在那里构建镜像。

    关于asp.net - 将 Docker 部署到离线 PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48328506/

    相关文章:

    docker - 无法在目录名称中包含空格的Dockerfile中执行RUN mkdir

    c# - 基于 Gridview 的 RowDataBound 事件中的行数据的单元格中的条件输出

    asp.net - 获取服务器日期和时间

    shell - 如何将Jenkins凭证传递给Dockerfile/Shell?

    docker - 如何修复 Google Cloud Build 中的 "npm ERR! Maximum call stack size exceeded"?

    node.js - CORS 阻止来自 Dockerized React 项目的 API 调用

    powershell - 参数Interups Docker构建

    c# - 如何在点击ASP日历日期时显示Popup窗体?

    javascript - Websocket 与 AngularJS/Asp.net

    docker - 仅使用委托(delegate) key 签署 docker 镜像