有没有办法在没有构建的情况下将docker-compose容器无缝转移到另一台主机?

Is there a way to seamlessly transfer docker-compose containers to another host without building?

本问题已经有最佳答案,请猛点这里访问。

我正在设置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,但遗憾的是,这不是一个选项,因为生成的服务器无法访问互联网。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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


Esteban关于如何使用注册表方法是正确的,但是忘记了提到"tar"方法:您基本上可以将图像保存到tar存档,然后将其加载到另一个tar的docker内部注册表。图像的传输方式由您决定!

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


P?U?S?H?我?n?G?D?O?C?K?E?R?我呢?M?A?G?E?S?t?O?A?R?E?G?我?S?T?R?Y?我呢?S?t?H?E???n?L?Y?W?A?Y??A?T?l?E?A?S?T?S?U?P?P?O?R?T?E?D?B?Y?D?O?C?K?E?R???U?T?-?O?f?-?T?H?E?-?乙?O?X?)???T?O?S?H?A?R?E?t?H?E?M?B?E?T?W?E?E?n?S?E?R?V?E?R?S?.

如果互联网接入不是一个选项,那么看看有自己的私人码头注册。

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

然后构建包含注册表地址的Docker映像并将其推送:

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

当您推送它时,Docker客户机将知道它必须使用指定的地址而不是公共注册表。

或者正如tgogoos在下面的评论中所提到的,检查他关于如何在空气间隙环境中使用docker save / docker load的链接。