Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。

通过 Docker 部署 Jenkins

使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南:

1. 安装 Docker

如果你的系统上还没有安装 Docker,请根据操作系统执行以下操作:

  • 对于 Linux(以 Ubuntu 为例) :

    bash 复制代码
    sudo apt update
    sudo apt install docker.io -y
    sudo systemctl start docker
    sudo systemctl enable docker

检查 Docker 是否安装成功,查看版本:

bash 复制代码
docker --version

2. 拉取 Jenkins Docker 镜像

从 Docker Hub 拉取Jenkins的镜像(lts 长期支持版本):

bash 复制代码
docker pull jenkins/jenkins:lts

如果你想要最新版本,可以拉取:

bash 复制代码
docker pull jenkins/jenkins

3. 运行 Jenkins 容器

运行 Jenkins 时,需要暴露一些端口并挂载一个卷以保持 Jenkins 的数据持久性。

使用以下命令运行 Jenkins:

bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
命令详解:
  • -d: 以后台模式运行容器。
  • -p 8080:8080: 将 Jenkins 内部的 8080 端口映射到主机的 8080 端口。
  • -p 50000:50000: 映射 50000 端口,用于 Jenkins 代理通信。
  • --name jenkins: 为容器命名为 "jenkins"。
  • -v jenkins_home:/var/jenkins_home: 将 Docker 卷 jenkins_home 挂载到容器内的 Jenkins 主目录。这样可以确保数据在容器重启后不会丢失。

现在你可以通过浏览器访问 Jenkins,地址为 http://localhost:8080。

4. 解锁 Jenkins

首次运行 Jenkins 时,你需要输入初始管理员密码进行解锁。

  1. 查看日志以找到管理员密码:

    bash 复制代码
    docker logs jenkins

    在日志中查找以下内容:

    复制代码
    Jenkins initial setup is required. Please use the following password to proceed to installation:
    <initialAdminPassword>
  2. 复制密码并在 Jenkins Web 界面中输入(http://localhost:8080)。

5. 安装插件和创建管理员用户

解锁 Jenkins 后:

  1. 系统会提示你安装推荐的插件。你可以选择安装推荐的插件,或手动选择特定的插件。
  2. 插件安装完成后,根据提示创建管理员用户。

6. 数据持久化和自定义配置

在前面创建的 Docker 容器中,使用的卷(jenkins_home)用于保持 Jenkins 的配置和任务数据持久化。这可以确保即使删除或停止容器,Jenkins 的数据仍然保留。

  • 你可以查看挂载的卷:

    bash 复制代码
    docker volume inspect jenkins_home

如果想使用本地目录来保存数据,可以将 jenkins_home:/var/jenkins_home 替换为主机上的一个目录路径:

bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

7. 也可以使用 Docker Compose 部署 Jenkins

如果你希望通过 Docker Compose 更方便地管理 Jenkins,可以创建一个 docker-compose.yml 文件:

yaml 复制代码
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home

volumes:
  jenkins_home:

然后使用 Docker Compose 启动 Jenkins:

bash 复制代码
docker-compose up -d

8. 常见问题

  1. Jenkins 端口无法访问
    解决办法:
  • 检查容器是否运行:
bash 复制代码
docker ps

如果没有运行,检查启动日志:

bash 复制代码
docker logs jenkins
  • 确保端口没有被占用
bash 复制代码
sudo lsof -i -P -n | grep LISTEN
  1. 无法获取Jenkins初始管理员密码
    解决办法:
  • 检查启动日志
bash 复制代码
docker logs jenkins
  • 如果没有日志,确保jenkins_home目录的权限正确,尝试修改主机目录权限:
bash 复制代码
sudo chown -R 1000:1000 /path/jenkins_home
  1. Jenkins 插件安装失败或速度很慢时
    解决方法:
    一般为网络问题,通过设置代理服务器解决:在Jenkins的"Manage Jenkins" -> "Manage Plugins" ->
    "Advanced" 中的"Update Site"将默认更新站点替换为国内镜像源:
bash 复制代码
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  1. Jenkins意外停止
    Jenkins Docker容器启动后一直正常,但一段时间后自动停止 。

可能的原因:

  • 内存不足,Jenkins使用大量内存导致Docker容器崩溃。
  • 容器资源分配不足

解决办法

  • 查看容器日志
bash 复制代码
docker logs jenkins
  • 容器资源不足时,动态的增加分配给容器内存或CPU
bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v jenkins_home:/var/jenkins_home \
  --memory=2g jenkins/jenkins:lts
  1. Jenkins数据丢失或无法保存配置时
    有时重启Jenkins后,任务丢失。

可能原因:

  • Docker容器未正确挂载
  • 文件系统权限有问题

解决办法

  • 确保正确挂载Jenkins容器的Jenkins_home目录,保证数据持久化:
bash 复制代码
docker run -d -p 8080:8080 -p 50000:50000 --name jenkins \
  -v /path/to/your/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
  • 检查挂载目录权限,确保容器有写入权限:
bash 复制代码
sudo chown -R 1000:1000 /pat/jenkins_home
相关推荐
7177772 天前
支持混合云的 DevOps 平台有哪些:Gitee、Azure DevOps、GitLab、Jenkins、JFrog 横向对比
gitee·azure·devops
风翼靓崽3 天前
jenkins搭建与简单使用
运维·jenkins
小白的码BUG之路3 天前
Jenkins -- gitee+docker+harbor+k8s 部署项目
docker·gitee·jenkins
小南家的青蛙4 天前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
RuoyiOffice5 天前
KubeSphere 容器云实践:从管理 K8s 到建设企业 PaaS,还需要哪些能力
spring boot·kubernetes·kubesphere·jenkins·paas·微服务部署·ruoyi office
逐流人6 天前
手工建集群到全自动发布:k8s集群部署与DevOps流水线整合实战
ci/cd·云原生·kubernetes·云计算·devops
@兽血沸腾8 天前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
无所畏俱的老尹9 天前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
pengdott9 天前
Rocky linux9安装最新版sonarqube-26.10.0
ci/cd·devops·sonarqube
拖累斯9 天前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug