介绍
在本实验中,我们将探索如何使用 Docker 安装 Jenkins。Jenkins 是一个广泛用于持续集成和持续交付(CI/CD)流程的自动化服务器。通过本实验,你将获得使用 Docker 设置 Jenkins 的实践经验,为未来的 DevOps 项目打下坚实的基础。
对于初学者来说,理解 Docker 是一个允许你在称为容器的隔离环境中打包和运行应用程序的平台非常重要。这种隔离确保了你的应用程序在不同系统上的一致性。另一方面,Jenkins 是一个帮助自动化软件开发过程的工具,特别是代码的构建、测试和部署。
如果你是 Linux 或 LabEx 的新手,建议从 Linux 快速入门 或 Linux 命令练习 开始,系统地学习基础知识。完成课程后,你可以回到这里练习你的技能。
准备 Docker 环境
在这一步骤中,我们将确保 Docker 已正确安装并在系统上运行。Docker 对本实验至关重要,因为它允许我们在容器中运行 Jenkins,从而提供一个一致且隔离的环境。
首先,让我们验证 Docker 是否已安装并正在运行。打开终端并执行以下命令:
docker --version

此命令应显示系统上安装的 Docker 版本。你应该会看到类似以下的输出:
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
如果你没有看到版本号,可能意味着 Docker 未安装或不在系统的 PATH 中。如果发生这种情况,请不要担心;我们稍后会解决。
接下来,让我们检查 Docker 守护进程是否正在运行:
sudo systemctl status docker
此命令用于检查 Docker 服务的状态。你应该会看到表明 Docker 服务处于活动状态(正在运行)的输出。它可能看起来像这样:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-09-11 10:00:00 UTC; 2h 30min ago
如果 Docker 未运行,你将看到一条消息,表明服务处于非活动状态或失败。
拉取 Jenkins Docker 镜像
在这一步骤中,我们将从 Docker Hub 下载官方的 Jenkins Docker 镜像。Docker Hub 是一个基于云的存储库,用于存储和共享 Docker 镜像。
要拉取最新的 LTS(长期支持)版本的 Jenkins,请运行以下命令:
docker pull jenkins/jenkins:lts
让我们分解一下这个命令:
docker pull告诉 Docker 下载一个镜像jenkins/jenkins是镜像的名称(由 Jenkins 项目创建):lts是一个标签,指定我们需要长期支持版本,该版本通常更稳定
此命令将 Jenkins 镜像下载到你的本地机器。下载可能需要几分钟,具体取决于你的网络速度。你将看到进度条,指示组成镜像的各个层的下载状态。
下载完成后,你可以通过运行以下命令验证镜像是否已成功下载到本地:
docker images
此命令列出系统上的所有 Docker 镜像。你应该会在输出中看到 Jenkins 镜像,类似于以下内容:
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins lts 7a7add0bf3da 8 days ago 470MB
如果你没有看到 Jenkins 镜像,可能意味着下载失败。在这种情况下,请尝试再次运行 docker pull 命令。如果问题仍然存在,请检查你的网络连接或尝试使用其他网络。
创建用于 Jenkins 数据的 Docker 卷
在这一步骤中,我们将创建一个 Docker 卷来持久化存储 Jenkins 数据。这是维护 Jenkins 配置和构建历史的关键步骤。
Docker 卷提供了一种持久化存储由 Docker 容器生成和使用的数据的方式。这对于 Jenkins 尤为重要,因为我们希望即使容器停止或删除,也能保留配置、任务数据和构建产物。
通过运行以下命令创建一个名为 jenkins-data 的新卷:
docker volume create jenkins-data
此命令告诉 Docker 创建一个新卷。Docker 会管理这些卷,并将它们存储在主机文件系统的某个部分。
你可以通过列出所有 Docker 卷来验证卷是否已成功创建:
docker volume ls
你应该会在卷列表中看到 jenkins-data,如下所示:
DRIVER VOLUME NAME
local jenkins-data
如果你没有看到该卷,请尝试再次创建。如果问题仍然存在,请确保你具有创建 Docker 卷的必要权限(如果你的用户不在 docker 组中,可能需要使用 sudo)。
理解 Docker 卷的重要性在于:
- 它们允许数据在容器的生命周期之外持久化。
- 它们可以轻松备份和恢复。
- 如果需要,它们可以在容器之间共享。
运行 Jenkins Docker 容器
现在我们已经有了 Jenkins 镜像和一个用于数据持久化的卷,接下来可以运行 Jenkins 容器了。这一步骤将实际启动 Jenkins 并将其运行在 Docker 容器中,使其可以在你的系统上访问。
我们将使用以下配置运行容器:
- 将容器端口 8080 映射到主机端口 8080(用于 Web 界面)
- 将容器端口 50000 映射到主机端口 50000(用于代理连接)
- 将
jenkins-data卷挂载到容器中的/var/jenkins_home - 以分离模式(detached mode)运行容器
执行以下命令以运行 Jenkins 容器:
docker run -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home --name jenkins-lts jenkins/jenkins:lts
让我们分解一下这个命令:
docker run创建并运行一个新容器-d以分离模式(后台运行)运行容器-p 8080:8080将容器中的端口 8080 映射到主机的端口 8080-p 50000:50000将容器中的端口 50000 映射到主机的端口 50000-v jenkins-data:/var/jenkins_home将我们的 Docker 卷挂载到容器中的 Jenkins 主目录--name jenkins-lts为容器命名以便于引用jenkins/jenkins:lts指定要使用的镜像
运行此命令后,Docker 将在后台启动 Jenkins 容器。你可以通过执行以下命令验证容器是否正在运行:
docker ps
此命令列出所有正在运行的 Docker 容器。你应该会在输出中看到 Jenkins 容器,类似于以下内容:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
747b6dc7b1af jenkins/jenkins:lts "/usr/bin/tini -- /u…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp jenkins-lts
如果你没有看到 Jenkins 容器,可能启动失败了。你可以使用以下命令检查错误信息:
docker logs jenkins-lts
这将显示容器的日志,有助于诊断问题。
访问 Jenkins Web 界面
Jenkins 容器现在正在运行,我们可以访问其 Web 界面来完成初始设置。此步骤将指导你访问 Jenkins 并执行初始配置。
有两种方法可以访问 Jenkins Web 界面:
点击虚拟环境中顶部标签页上的
+符号,创建一个新的Web Service,并输入端口8080。
此方法在 Lab 环境中有效,它会创建一个新标签页来显示 Jenkins 界面。
在 VNC 桌面中打开 Firefox 浏览器。浏览器会自动打开到
http://localhost:8080,因此你无需手动输入 URL。
你应该会看到 Jenkins 的“解锁 Jenkins”(Unlock Jenkins)页面。此安全措施确保只有授权用户才能设置 Jenkins。
对于此 Lab 环境,默认的用户名是 admin,密码也是 admin。
在“解锁 Jenkins”页面输入这些凭据,然后点击“继续”(Continue)。

解锁 Jenkins 后,系统将引导你完成初始设置过程,包括安装插件和创建管理员用户。对于此 Lab,你可以选择“安装推荐的插件”(Install suggested plugins)选项以快速开始。
总结
在本实验中,我们成功地使用 Docker 安装并设置了 Jenkins。我们涵盖了关键步骤,包括准备 Docker 环境、拉取 Jenkins 镜像、为 Jenkins 数据创建持久化卷、运行 Jenkins 容器以及访问 Jenkins Web 界面以完成初始设置。
这次实践为你提供了使用 Docker 部署 Jenkins 的坚实基础,这是现代 DevOps 实践中的一项关键技能。现在,你可以进一步探索 Jenkins,创建构建任务,并将其集成到你的开发工作流程中。

