如何使用Jenkins

时间:2018-03-25 05:03:08

标签: docker jenkins deployment server cloud

我有两台服务器:

  • 服务器A:安装了Jenkins和Docker的构建服务器。
  • 服务器B:安装了Docker的生产服务器。

我想在服务器A中构建一个Docker镜像,然后在服务器B中运行相应的容器。问题是:

一旦Jenkins完成Docker构建,从服务器A运行服务器B中的容器的建议方法是什么?我是否必须将图像推送到Docker集线器以将其拉入服务器B,或者我可以以某种方式直接传输图像?

我真的不是在寻找特定的Jenkins插件或者东西,而是从安全和架构的角度来看,实现这一目标的最佳方法是什么?

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

  • 使用docker-machine
  • 使用Docker Restful Remote API
  • 使用普通ssh root@server.b "docker run ..."
  • 使用Docker Swarm(我是超级菜鸟,所以我仍然不确定这是否是我用例的选项)

编辑:

我在数字海洋中运行服务器A和B.

2 个答案:

答案 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代理插件。