如何使用Jenkins在远程docker主机中运行容器

如何使用Jenkins在远程docker主机中运行容器,docker,jenkins,deployment,server,cloud,Docker,Jenkins,Deployment,Server,Cloud,我有两台服务器: 服务器A:构建安装了Jenkins和Docker的服务器 服务器B:已安装Docker的生产服务器 我想在服务器a中构建Docker映像,然后在服务器B中运行相应的容器。问题是: 一旦Jenkins完成docker构建,在服务器B中从服务器a运行容器的推荐方法是什么?我必须将图像推送到Docker hub才能将其拉入服务器B,还是可以直接传输图像? 我并不是在寻找特定的Jenkins插件或其他东西,而是从安全性和体系结构的角度来看,实现这一点的最佳方法是什么 我已经阅读了大

我有两台服务器:

  • 服务器A:构建安装了Jenkins和Docker的服务器
  • 服务器B:已安装Docker的生产服务器
我想在服务器a中构建Docker映像,然后在服务器B中运行相应的容器。问题是:

一旦Jenkins完成docker构建,在服务器B中从服务器a运行容器的推荐方法是什么?我必须将图像推送到Docker hub才能将其拉入服务器B,还是可以直接传输图像?

我并不是在寻找特定的Jenkins插件或其他东西,而是从安全性和体系结构的角度来看,实现这一点的最佳方法是什么

我已经阅读了大量关于这方面的帖子和答案,并逐渐意识到有很多方法可以做到这一点,但我仍然不确定什么是最终的、最常见的方法。我见过这些替代方案:

  • 使用
    docker机器
  • 使用Docker Restful远程API
  • 使用普通的
    sshroot@server.b“docker run…”
  • 使用Docker Swarm(我是超级noob,所以我仍然不确定这是否是我的用例的一个选项)
编辑:


我在Digital Ocean中运行服务器A和B。

Docker映像可以保存到常规的tar存档中:

docker image save -o <FILE> <IMAGE>
此处的文档:


这种
save scp load
方法很少使用。常用的方法是在防火墙后面设置一个私有Docker注册表。并将图像推送到或从该私有注册表中取出。本文件描述了。或者,您可以选择由第三方提供的注册表服务,例如。

使用Docker存储库时,您只能推/拉已更改的层。 你可以用。Jenkins HTTP请求插件可用于发出HTTP请求。通过设置Docker_host环境变量,可以直接在远程Docker主机上运行Docker命令。要将环境变量导出到当前shell,请执行以下操作:

export DOCKER_HOST="tcp://your-remote-server.org:2375"
允许TCP通信时,请注意安全问题。
另一种方法是在Jenkins中使用SSH代理插件。

谢谢,这很有用。我想知道,这个行业常用的方法是什么?将图像推送到注册表并将其拉入docker主机?或者通过scp将图像从build传输到prod服务器?常用的方法是在防火墙后面设置一个私有Docker注册表。并将图像推送到或从私人注册表中取出。太棒了,非常感谢你。你能用最后那句话补充你的回答吗?我会将其标记为已接受。更新了我的原始答案。
export DOCKER_HOST="tcp://your-remote-server.org:2375"