通过jenkins使用新建的映像重启Docker容器(在容器中运行)

我有一个docker-compose.yml文件,该文件定义了我需要的所有服务。重要的部分如下:

services:
  backend-api:
    build: .
  jenkins:
    build: ./jenkins
    volumes:
      - jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

backend-api是使用gradle构建的简单Java应用程序,而jenkins服务是安装了docker的标准jenkins映像。

backend-api的Dockerfile:

FROM gradle:jdk8 as builder

COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build

FROM openjdk:8-jre-slim
EXPOSE 8080
COPY --from=builder /home/gradle/src/backend/build/distributions/backend.tar /app/
WORKDIR /app
RUN tar -xvf backend.tar
WORKDIR /app/backend
CMD bin/backend

我想从backend-api容器重建并重新启动jenkins服务。我了解了很多有关他的内容,并查看了CloudBees的{​​{1}}码头工人插件,但无法弄清楚如何从jenkins容器内部重新启动并在主机上重建容器。

是否有可能以某种方式实现这一目标,或者我对这一问题的整体态度是错误的?

GuGeAD 回答:通过jenkins使用新建的映像重启Docker容器(在容器中运行)

快速回答

您需要在jenkins docker容器内正确配置docker客户端。这是Dockerfile或整个post

之后,您可以使用 -H 泊坞参数执行远程泊坞窗中的任何命令。敌人的例子我用它来查看另一台机器上的远程日志:

docker -H 10.10.10.66:2375 logs --tail 500 my-app

注意:您必须先启用docker rest api

长答案

使用C.I和docker的常见,简单,手动和行之有效的方法是:

  • 在一台服务器上安装c.i。
  • 在其他服务器上安装或配置docker应用,而不是在c.i的同一主机中
  • 在远程Docker服务器中启用docker rest api。这使您可以将docker的c.i连接并执行docker命令,并使用docker将其执行到另一台远程计算机。
  • 配置您的c.i(在您的情况下为詹金斯),以便在安装了docker的其他服务器中执行任务。
  • 手动或通过webhooks触发jenkins任务/作业
  • 必须构建此jenkins标签并将docker映像推送到您的private docker registry
  • 最后,此任务可以将新映像从私有注册表下载或提取到目标docker服务器

注意:

  • 您可以使用-H参数代替api rest在远程Docker主机中执行命令。
  • 如果您没有私有的docker Registry或没有实现它所需的资金,则可以按照此guide将映像推送到docker public hub。如果选择公共https://hub.docker.com
  • ,请小心源代码和变量
  • 如果您无法拥有私有Docker注册表服务器$$,并且无法将企业代码推送到公共docker注册表,请在您的jenkins主机中you can install a private docker registry。不推荐,但是:我们该怎么办?
  • 如果不选择在您的jenkins旁边安装docker注册表,则可以在jenkins中创建一个任务,该任务会将源代码(Dockerfile和应用程序文件)下载到远程计算机中,并在远程计算机中执行docker构建。
本文链接:https://www.f2er.com/3132862.html

大家都在问