我有两台服务器:
我想在服务器A中构建一个Docker镜像,然后在服务器B中运行相应的容器。问题是:
一旦Jenkins完成Docker构建,从服务器A运行服务器B中的容器的建议方法是什么?我是否必须将图像推送到Docker集线器以将其拉入服务器B,或者我可以以某种方式直接传输图像?
我真的不是在寻找特定的Jenkins插件或者东西,而是从安全和架构的角度来看,实现这一目标的最佳方法是什么?
我已经阅读了大量关于此的帖子和SO答案,并且已经意识到有很多方法可以做到这一点,但我仍然不确定什么是最终,最常见的方式来做到这一点。我见过这些替代品:
docker-machine
ssh root@server.b "docker run ..."
编辑:
我在数字海洋中运行服务器A和B.
答案 0 :(得分:2)
Docker镜像可以保存到常规的tar存档中:
docker image save -o <FILE> <IMAGE>
文档:https://docs.docker.com/engine/reference/commandline/image_save/
然后scp
此tar存档到另一台主机,并运行docker load
以加载图像:
docker image load -i <FILE>
文档:https://docs.docker.com/engine/reference/commandline/image_load/
很少使用此save-scp-load
方法。常见的方法是在防火墙后面设置一个私有Docker注册表。并将图像推送到或从该私人注册表中提取。该文档描述了how to deploy a container registry。或者,您可以选择第三方提供的注册服务,例如Gitlab's container registry。
答案 1 :(得分:0)
使用Docker存储库时,您仅推/拉已更改的层。 您可以使用Docker REST API。 Jenkins HTTP请求插件可用于发出HTTP请求。您可以在远程Docker主机上直接运行Docker命令,设置DOCKER_HOST环境变量。要将环境变量导出到当前shell:
export DOCKER_HOST="tcp://your-remote-server.org:2375"
在允许TCP通信时,请注意安全问题。 More info。 另一种方法是在Jenkins中使用SSH代理插件。