有没有一种方法可以在不构建的情况下将docker-compose容器无缝转移到另一个主机?

时间:2019-04-17 06:52:33

标签: docker docker-compose

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

约束如下:

Build needs to happen on machine A

Resulting image/container needs to be exported and transported to machine B

(可选):Run the container again with a docker-compose file

我知道有关docker commit和repos的信息,但是遗憾的是这不是一个选择,因为生成的服务器无法访问Internet。

这是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正确地运输容器或图像并在另一台机器上使用同一图像

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

然后构建您的docker映像including,并将其推送到注册表:

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

当您按下它时,泊坞窗客户端将知道它必须使用指定的地址而不是公共注册表。

或者如tgogos在下面的评论中所述,请检查他的link,了解如何在空白环境中使用docker save / docker load