Jenkins docker 容器:运行 docker 在容器内构建

Jenkins docker container: run docker build inside the container

我有一个装有 Linux CentOS 7 的虚拟机,在这个虚拟机内部,有一个活动的 Docker 守护进程,运行 一个 Jenkins 实例 (LTS) 的容器。此实例负责 运行 Jenkinsfile 中描述的管道,其中最后阶段是 docker 构建 Docker 文件。为了尽可能清楚,我在 post 上附上了一张我当前架构的照片。

我的任务是:成功执行管道的所有阶段,特别是最后一个阶段,Docker文件的构建。

但是,我 运行 遇到了一个问题:在容器内我无法启动 docker 守护进程,所以,如何在 docker 容器 中启动 Docker 文件的构建?

一位同事建议我 在 docker 守护进程 之外的 VM 上配置一个 Jenkins 代理,但这可能吗?如果是,如何?

或者选择其他解决方案更好?

首先,您可以在 Jenkins 容器中构建 docker 映像,如果您使用的是声明式 Jenkinsfile,则安装 docker pipeline 插件。 在以下链接中查看如何利用和文档。

https://plugins.jenkins.io/docker-workflow/

https://docs.cloudbees.com/docs/admin-resources/latest/plugins/docker-workflow

为了构建您的 Dockerfile,请参阅下面的代码片段

stage("Build") {
        steps {
            script {
                myImage = docker.build("team/my-image:latest") // build the Dockerfile
            }
        }
    }

    // you can execute your Docker container and run some specific command you desire
    stage("Run Docker Container") {
        steps {
            script {
                sh "docker network create --driver bridge prod_bridge || true"
                myImage.withRun("--network-alias prod_bridge_alias --net prod_bridge --name my-container") {c ->
                    sh """
                        docker logs my-container
                    """
                }
            }
            sh "docker network rm prod_bridge"
            sh "docker rmi team/my-image:latest"
        }
    }

但是,您可能会遇到一些问题,例如资源不足(space/cpu/内存),或任何其他与“docker in docker”,不推荐,在Jerome's post.

中有说明

另见 Whosebug 上的问题

您可以考虑按照您同事的建议,在您的虚拟机上的 Jenkins 实例中安装 Jenkins 和所有必需的插件。

由你决定!