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 和所有必需的插件。
由你决定!
我有一个装有 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 和所有必需的插件。
由你决定!