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
相关推荐
lunzi_08264 天前
【开源治理】05-把流程翻译成门禁:开源治理嵌入 DevOps 流水线实战
供应链管理·devops·开源治理
程序员老赵4 天前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
醉颜凉4 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
宋均浩4 天前
# pytest 的 5 个 fixture 骚操作,我用了 3 年才学会
devops
睡不醒男孩0308234 天前
云原生运维实战:高并发架构下的云原生可观测性、韧性降级与自动化干预体系
数据库·kubernetes·高并发·prometheus·devops·sre·缓存调优
爱学习的程序媛4 天前
DevOps 深度解析:从文化理念到落地实践
运维·devops
sbjdhjd4 天前
从零搭建企业级 CI/CD(下):Jenkins+GitLab+Harbor 全链路实战指南
git·servlet·ci/cd·云原生·云计算·gitlab·jenkins
小美元4 天前
【爽之】使用jenkins实现前端一键发版
运维·jenkins
至乐活着5 天前
Docker Compose多服务编排实战:从零搭建Node.js+MySQL+Redis全栈应用
docker·微服务·devops·容器编排·compose
changxiang5 天前
Jenkins备忘
运维·jenkins