如何在 Linux 上为 Jenkins 启动 Docker 服务

JenkinsJenkinsBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你在 Linux 系统上安装 Docker 并将其与 Jenkins(一个广泛使用的持续集成和部署工具)集成的过程。我们将介绍 Docker 的基本概念、安装过程以及将 Docker 无缝集成到你的 Jenkins 工作流程中的步骤。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL jenkins(("Jenkins")) -.-> jenkins/InstallingJenkinsGroup(["Installing Jenkins"]) jenkins(("Jenkins")) -.-> jenkins/PipelineGroup(["Pipeline"]) jenkins/InstallingJenkinsGroup -.-> jenkins/docker_installation("Use Docker Installation") jenkins/PipelineGroup -.-> jenkins/pipeline("Pipeline") subgraph Lab Skills jenkins/docker_installation -.-> lab-415669{{"如何在 Linux 上为 Jenkins 启动 Docker 服务"}} jenkins/pipeline -.-> lab-415669{{"如何在 Linux 上为 Jenkins 启动 Docker 服务"}} end

Docker 基础

什么是 Docker?

Docker 是一个开源平台,它允许开发者在容器化环境中构建、部署和运行应用程序。容器是轻量级、可移植且自包含的软件包,其中包含应用程序及其所有依赖项,确保应用程序能够在不同的计算环境中一致地运行。

Docker 架构

Docker 采用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程(服务器)通信以执行各种操作。Docker 守护进程负责管理 Docker 对象,如图像、容器、网络和卷。

graph LD subgraph Docker 架构 client[Docker 客户端] daemon[Docker 守护进程] client -- API --> daemon daemon -- 镜像、容器、网络、卷 --> client end

Docker 镜像

Docker 镜像是容器化应用程序的基础。镜像是一个只读模板,其中包含应用程序代码、库、依赖项以及运行应用程序所需的其他必要文件。镜像是使用 Dockerfile 构建的,Dockerfile 是一个文本文件,其中包含构建镜像的指令。

Docker 容器

容器是 Docker 镜像的实例。当你运行一个 Docker 镜像时,它会创建一个容器,这是一个隔离的、自包含的环境,用于运行应用程序。可以使用 Docker 客户端启动、停止和管理容器。

Docker 网络

Docker 提供了内置的网络功能,允许容器相互通信以及与外部世界通信。Docker 支持各种网络驱动程序,如桥接、主机和覆盖网络,可用于为容器化应用程序创建和管理网络。

Docker 卷

Docker 卷用于持久化容器生成的数据。卷独立于容器的生命周期,并且可以在多个容器之间共享。卷可用于存储应用程序数据、配置文件和其他持久数据。

在 Linux 上安装 Docker

前提条件

在你的 Linux 系统上安装 Docker 之前,请确保你具备以下前提条件:

  • 一个 Linux 发行版,如 Ubuntu 22.04 LTS
  • 管理员权限(sudo 或 root 访问权限)

在 Ubuntu 22.04 上安装 Docker

  1. 更新软件包索引:
sudo apt-get update
  1. 安装必要的软件包,以便 apt 可以通过 HTTPS 使用存储库:
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. 添加官方 Docker GPG 密钥:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. 设置 Docker 存储库:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker 引擎、containerd 和 Docker Compose:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. 验证安装:
sudo docker run hello-world

此命令下载一个测试镜像并在容器中运行它,以验证 Docker 是否正确安装。

将 Docker 与 Jenkins 集成

为何要将 Docker 与 Jenkins 集成?

将 Docker 与 Jenkins 集成能为你的持续集成和部署(CI/CD)管道带来诸多益处:

  • 一致的环境:Docker 容器可确保你的应用程序及其依赖项在不同环境中以一致的方式进行打包和部署。
  • 可扩展性:Docker 容器能够轻松地进行扩展或缩减,以应对增加的工作负载或流量。
  • 更快的构建与部署:与传统虚拟机相比,Docker 容器的构建和部署速度要快得多。
  • 更高的可靠性:Docker 容器相互隔离且自包含,降低了应用程序与其依赖项之间发生冲突的风险。

在 Jenkins 中设置 Docker 集成

  1. 在 Jenkins 中安装 Docker 插件:在你的 Jenkins 实例中安装“Docker”插件,它能提供 Jenkins 与 Docker 之间的集成。
  2. 在 Jenkins 中配置 Docker:在 Jenkins 的全局配置中,设置 Docker 服务器的连接详细信息,例如 Docker 主机 URL 和 Docker API 版本。
  3. 创建基于 Docker 的 Jenkins 代理:配置一个可在 Docker 容器中运行的 Jenkins 代理。这使你能够在容器化环境中运行构建和测试步骤。
graph LR Jenkins --> Docker_Agent Docker_Agent --> Docker_Host
  1. 在 Jenkins 管道中使用 Docker:在你的 Jenkins 管道中,你可以使用插件提供的 Docker 步骤来构建、推送和拉取 Docker 镜像,以及在 Docker 容器中运行你的应用程序。
pipeline {
    agent {
        docker {
            image'maven:3.8.2-openjdk-11'
            args '-v /tmp:/tmp'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh'mvn clean install'
            }
        }
        stage('Docker Build and Push') {
            steps {
                script {
                    docker.withRegistry('https://registry.example.com', 'docker-registry-credentials') {
                        def dockerImage = docker.build("my-app:${env.BUILD_NUMBER}")
                        dockerImage.push()
                    }
                }
            }
        }
    }
}

通过将 Docker 与 Jenkins 集成,你可以为你的应用程序创建一个更强大、可扩展且可靠的 CI/CD 管道。

总结

在本教程结束时,你将对 Docker 及其与 Jenkins 的集成有扎实的理解。你将能够在你的 Linux 系统上设置 Docker 环境,并在你的 Jenkins 管道中利用 Docker 的功能,简化你的持续集成和部署流程。