有没有办法在不构建的情况下将 docker-compose 容器无缝传输到另一台主机? [复制]

Posted

技术标签:

【中文标题】有没有办法在不构建的情况下将 docker-compose 容器无缝传输到另一台主机? [复制]【英文标题】:Is there a way to seamlessly transfer docker-compose containers to another host without building? [duplicate] 【发布时间】:2019-09-07 08:20:30 【问题描述】:

我正在设置 CI/CD 解决方案。我想在无法访问互联网的生产机器上运行 docker 应用程序。

约束如下:

构建需要在机器 A 上进行

生成的图像/容器需要导出并传输到机器 B

可选:使用 docker-compose 文件再次运行容器

我知道 docker commit 和 repos,但遗憾的是这不是一个选项,因为生成的服务器无法访问互联网。

这是 docker-compose.yaml;这不是一成不变的,可以根据需要进行更改

version: '2'
services:
  test_dev_app:
    image: testdevapp:latest
    container_name: test_dev_app
    hostname: test_dev_app
    environment:
      DJANGO_SETTINGS_MODULE: "settings.production"
      APPLICATION_RUN_TYPE: "uwsgi"
    volumes:
      - ./:/data/application
    ports:
      - "8000:8000"
      - "8080:8080"

我希望能够通过docker-compose up在不同的机器上正确传输容器或图像并使用相同的图像

【问题讨论】:

【参考方案1】:

Esteban 关于如何使用注册表的方式是正确的,但忘了提及“tar”方式:您基本上可以save 将图像保存到 tar 存档,然后再将load 发送到 docker 内部注册表另一个。 传输图像的方式由您决定!

不过,如果您打算经常这样做,我建议您遵循私有注册表解决方案:它绝对更干净!

【讨论】:

【参考方案2】:

推泊坞图像到注册表是唯一的方法̶(至少支持多克尔外的现成)̶共享它们之间的服务器。 P>

如果无法访问互联网,请考虑拥有自己的private docker registry。

将其部署在推拉机均可访问的网段中。

然后构建你的docker镜像including你的registry地址并推送:

docker build -t <private_registry_address>/test_dev_app:latest .
docker push <private_registry_address>/test_dev_app:latest

当你推送它时,docker 客户端会知道它必须使用指定的地址而不是公共注册表。

或者正如 tgogos 在下面的评论中提到的,请查看他的 link,了解如何在气隙环境中使用 docker save / docker load

【讨论】:

还有一个docker save / docker load 选项可以使用。例如,当您遇到“气隙”情况时,请参阅:Best practices for using docker in an air-gapped environment

以上是关于有没有办法在不构建的情况下将 docker-compose 容器无缝传输到另一台主机? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不覆盖现有类名的情况下将类名添加到 blazor 组件?

有没有办法在不离开 App 的情况下将评分发送到 App Store?

有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?

有没有办法在不向表格元素添加类的情况下将 css 应用于元素? [复制]

有没有办法在不重复变量名的情况下将命名参数传递给格式化宏?

有没有办法在不知道派生类型的情况下将包含派生指针的 std::any 转换为基指针?