版本控制 - 如何将代码部署到生产机器(没有 Internet 且有 docker)?

Version control - how to deploy code to production machines(without Internet and with docker)?

好吧,这让我很烦恼:如何在没有互联网连接和使用 docker 的情况下部署到机器?

出于安全考虑,生产机器没有互联网连接,这是合理的。所以,我们使用跳机连接到它并上传我们的代码。

而且,生产项目在Docker容器中,所以即使我们做了一点改动,我们也必须全部重建。或者,docker cp 我们更改的所有文件。

我们使用 Git 在开发环境的机器上进行版本控制;在我们的网络中,所有团队成员都可以访问它,但生产机器无法直接连接到它。 (可以,但也需要跳机)

所以,据我了解,在这种情况下,如果我们想以简单的方式部署(直接在docker exec中下载代码),我们必须在机器中创建一个Git repo跳,对吧?有没有更好的解决方案?我是 docker 的新手。

而且,如果我们有一个 .git 文件夹指向开发环境 Git 仓库,我们如何配置它指向跳机?每次部署时更改 url 和凭据?丑。

标准 Docker 工作流程是构建图像并将它们推送到存储所有图像的 Docker 注册表中。然后需要部署镜像的机器,将从注册表中拉取镜像。

如果机器无法访问互联网,您只需在其中一台机器上部署 registry docker image 即可部署私有注册表。构建映像时,您将从 Git 中提取代码并构建映像并将其推送到此私有注册表中。

您可以通过从私有注册表中拉取映像来将映像部署到生产机器上。在可从生产机器访问的 "jump machine" 上部署 Docker 注册表可能是个好主意。

如果能坚持一下@yamenk proposes, it would be better. I just wanted to post another approach in case you are in a situation of an Air gap (networking)。不要四处移动代码 (folder/files) 并重建,而是移动 docker image 个文件。

您可以 save 将图像保存到 .tar 文件中,将其与外部存储一起使用,然后 load 它可以随心所欲:

这里的工作流程是:

HOST A: docker save ...
HOST B: docker load ...

您可能还想看看这里: