繁体   English   中英

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

[英]How to run container in a remote docker host with Jenkins

我有两台服务器:

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

我想在Server A中构建一个Docker镜像,然后在Server B中运行对应的容器。 那么问题来了:

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

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

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

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

编辑:

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

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

docker image save -o <FILE> <IMAGE>

文档在这里: https : //docs.docker.com/engine/reference/commandline/image_save/

然后将此 tar 存档scp到另一台主机,并运行docker load加载图像:

docker image load -i <FILE>

文档在这里: https : //docs.docker.com/engine/reference/commandline/image_load/

这种save-scp-load方法很少使用。 常见的方法是在防火墙后面设置一个私有的 Docker 注册表。 并将图像推送到该私有注册表或从该私有注册表中提取。 本文档描述了如何部署容器注册表 或者你可以选择第三方提供的注册服务,比如Gitlab的容器注册

使用 Docker 存储库时,您只需推/拉已更改的层。 您可以使用Docker REST API Jenkins HTTP 请求插件可用于发出 HTTP 请求。 您可以直接在远程 Docker 主机上运行 Docker 命令,设置 DOCKER_HOST 环境变量。 将环境变量导出到当前 shell:

export DOCKER_HOST="tcp://your-remote-server.org:2375"

请注意允许 TCP 流量时的安全问题。 更多信息 另一种方法是在Jenkins中使用SSH Agent Plugin。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM