【问题标题】:How to ship docker deliverables for an offline environment [closed]如何为离线环境运送 docker 可交付成果 [关闭]
【发布时间】:2020-06-08 10:22:36
【问题描述】:

我们目前正在研究 Docker 作为一种发布和部署应用程序的方式,但我们以前从未这样做过,而且我们不完全确定其好处是否足以证明这一努力的合理性。 这是对我们场景的简要描述:

  • 我们的应用程序部署在本地(客户站点)、安全且无法访问 Internet 的网络上。我们无法远程访问目标服务器,基础架构由客户 IT 自己操作。
  • 我们的应用程序基于以下堆栈构建:Java、Spring Boot、SQL Server DB(或其他)。
  • 在某些情况下,我们的应用程序必须连接到位于客户网络上但与我们的应用程序不同的服务器上的其他数据库源
  • 在某些情况下,我们应用程序的数据库也可能位于由客户控制的单独服务器上
  • 在某些情况下,客户为我们分配了一个 VM(通常是 windows),我们可能需要在该 VM 中安装 docker 主机(这似乎可能会导致性能问题)。
  • 目前,客户 IT 可以访问部署了我们的应用程序的 Tomcat,并且可以进行自己的更改(例如,关于 SSL 配置等)。

问题

  1. 在这样的场景中使用 docker 有意义吗?没有互联网以及我们对整体基础设施的控制很少,是否让 docker 的使用变得过于困难?
  2. 在使用 docker 时,我们应该如何构建和交付?目前我们使用 maven 并构建 jar(或 war)文件,然后将其安装在目标服务器上。是否有任何特定于在离线环境中传送 Docker 映像的解决方案?我们需要的是一个看起来与我们现在所做的类似的流程,我们可以在其中构建可交付成果并将其轻松地运送给客户。我们无法在现场执行复杂的安装过程。
  3. 如何在不丢失所有现有数据的情况下提供软件更新?
  4. 如果客户 IT 没有使用 Docker 的经验,这会使他们的工作变得更加困难吗?如果我们决定使用它,似乎无法避免还必须学习允许他们执行一些基本操作的基础知识(例如访问 tomcat 实例并修改 tomcat 配置)。
  5. 在 windows VM 上安装 docker 主机是否明智?

非常感谢

【问题讨论】:

    标签: java spring docker maven offline


    【解决方案1】:

    正如this question 的已接受答案中所述,您可以保存和加载 docker 图像。

    1. 在可以访问互联网的机器上拉取镜像或构建您自己的镜像(假设您有一个 Dockerfile 在当前目录中定义您的容器)

      $ docker pull mysql:5.7.30
      $ docker build --tag app:1.0 .
      
    2. 将图像保存为 .tar 文件。您将希望使用映像存储库和标记信息而不是映像 ID,因为命令 docker save <image id> 删除了在目标服务器上有用的存储库和标记名称。

      $ docker save --output mysql-5.7.30.tar mysql:5.7.30
      $ docker save --output app-1.0.tar app:1.0
      
    3. 复制文件到目标机器

    4. 将 .tar 文件加载到 docker

      $ docker load --input mysql-5.7.30.tar
      $ docker load --input app-1.0.tar
      

    见:

    有关持久化数据,请参阅:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多