【问题标题】:How to run container in a remote docker host with Jenkins如何使用 Jenkins 在远程 docker 主机中运行容器
【发布时间】:2018-03-25 05:03:07
【问题描述】:

我有两台服务器:

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

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

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

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

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

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

编辑:

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

【问题讨论】:

    标签: docker jenkins deployment server cloud


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,这很有用。我想知道,业界常用的方法是什么?要将图像推送到注册表并将其拉入 docker 主机?还是通过 scp 将图像从构建传输到产品服务器?
    • 常用方法是在防火墙后面设置私有 Docker 注册表。并将图像推送到该私有注册表或从该私有注册表中提取。
    • 太棒了,非常感谢。你能用最后一句话补充你的答案吗?到时候我会把它标记为已接受。
    • 更新了我原来的答案。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 2021-07-28
      相关资源
      最近更新 更多