有没有办法在不构建的情况下将 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?
有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?