如何为离线环境运送 docker 可交付成果
How to ship docker deliverables for an offline environment
我们目前正在研究 Docker 作为发布和部署应用程序的一种方式,但我们以前从未这样做过,我们不完全确定收益是否足以证明付出的努力是值得的。
这是我们场景的简要描述:
- 我们的应用程序部署在内部部署(在客户站点),部署在安全且无法访问 Internet 的网络上。我们无法远程访问目标服务器,基础设施由客户 IT 自己操作。
- 我们的应用程序建立在以下堆栈上:Java、Spring 启动、SQL 服务器数据库(或其他)。
- 在某些情况下,我们的应用程序必须连接到位于客户网络上但与我们的应用程序不同的服务器上的其他数据库源
- 在某些情况下,我们应用程序的数据库也可能位于客户控制的单独服务器上
- 在某些情况下,客户会为我们分配一个 VM(通常是 windows),我们很可能需要在该 VM 中安装 docker 主机(这似乎可能会影响性能问题)。
- 目前,客户 IT 可以访问部署我们应用程序的 Tomcat,并且可以进行他们自己的更改(例如关于 SSL 配置等)。
问题
- 在这种情况下使用 docker 有意义吗?没有互联网以及我们对整体基础设施几乎没有控制权是否使 docker 的使用变得太困难了?
- 在使用docker时我们应该如何构建和交付?目前我们使用 Maven 并构建 jar(或 war)文件,然后将其安装到目标服务器上。是否有特定于在离线环境中运送 Docker 图片的解决方案?我们需要的是一个类似于我们现在所做的流程,我们可以在其中构建可交付成果并将它们轻松运送给客户。我们无法在现场执行复杂的安装过程。
- 如何在不丢失所有现有数据的情况下交付软ware 更新?
- 如果客户 IT 没有使用 Docker 的经验,这是否会给他们带来困难?如果我们决定使用它,似乎无法避免还必须学习允许他们执行一些基本操作的基础知识(例如访问 tomcat 实例并修改 tomcat 配置)。
- 在 windows VM 上安装 docker 主机是否明智?
非常感谢
如 的已接受答案中所述,您可以保存和加载 docker 个图像。
在可以访问互联网的机器上拉取镜像或构建您自己的镜像(假设您在当前目录中有定义容器的 Dockerfile)
$ docker pull mysql:5.7.30
$ docker build --tag app:1.0 .
将图像保存到 .tar 文件。您将希望使用图像存储库和标签信息而不是图像 ID,因为命令 docker save <image id>
删除了存储库和标签名称,这在 target 服务器上很有用。
$ docker save --output mysql-5.7.30.tar mysql:5.7.30
$ docker save --output app-1.0.tar app:1.0
复制文件到target机器
将 .tar 文件加载到 docker
$ docker load --input mysql-5.7.30.tar
$ docker load --input app-1.0.tar
参见:
有关持久化数据,请参阅:
我们目前正在研究 Docker 作为发布和部署应用程序的一种方式,但我们以前从未这样做过,我们不完全确定收益是否足以证明付出的努力是值得的。 这是我们场景的简要描述:
- 我们的应用程序部署在内部部署(在客户站点),部署在安全且无法访问 Internet 的网络上。我们无法远程访问目标服务器,基础设施由客户 IT 自己操作。
- 我们的应用程序建立在以下堆栈上:Java、Spring 启动、SQL 服务器数据库(或其他)。
- 在某些情况下,我们的应用程序必须连接到位于客户网络上但与我们的应用程序不同的服务器上的其他数据库源
- 在某些情况下,我们应用程序的数据库也可能位于客户控制的单独服务器上
- 在某些情况下,客户会为我们分配一个 VM(通常是 windows),我们很可能需要在该 VM 中安装 docker 主机(这似乎可能会影响性能问题)。
- 目前,客户 IT 可以访问部署我们应用程序的 Tomcat,并且可以进行他们自己的更改(例如关于 SSL 配置等)。
问题
- 在这种情况下使用 docker 有意义吗?没有互联网以及我们对整体基础设施几乎没有控制权是否使 docker 的使用变得太困难了?
- 在使用docker时我们应该如何构建和交付?目前我们使用 Maven 并构建 jar(或 war)文件,然后将其安装到目标服务器上。是否有特定于在离线环境中运送 Docker 图片的解决方案?我们需要的是一个类似于我们现在所做的流程,我们可以在其中构建可交付成果并将它们轻松运送给客户。我们无法在现场执行复杂的安装过程。
- 如何在不丢失所有现有数据的情况下交付软ware 更新?
- 如果客户 IT 没有使用 Docker 的经验,这是否会给他们带来困难?如果我们决定使用它,似乎无法避免还必须学习允许他们执行一些基本操作的基础知识(例如访问 tomcat 实例并修改 tomcat 配置)。
- 在 windows VM 上安装 docker 主机是否明智?
非常感谢
如
在可以访问互联网的机器上拉取镜像或构建您自己的镜像(假设您在当前目录中有定义容器的 Dockerfile)
$ docker pull mysql:5.7.30 $ docker build --tag app:1.0 .
将图像保存到 .tar 文件。您将希望使用图像存储库和标签信息而不是图像 ID,因为命令
docker save <image id>
删除了存储库和标签名称,这在 target 服务器上很有用。$ docker save --output mysql-5.7.30.tar mysql:5.7.30 $ docker save --output app-1.0.tar app:1.0
复制文件到target机器
将 .tar 文件加载到 docker
$ docker load --input mysql-5.7.30.tar $ docker load --input app-1.0.tar
参见:
有关持久化数据,请参阅: