Docker启动Jenkins容器的命令详解
我们有一个用于运行Jenkins容器的Docker命令,让我们逐部分解释: #!/bin/bash mkdir /data/jenkins_home -p docker run -d --name jenkins2.340 -u root --restart=always \ -v /data/jenkins_home:/var/jenkins_home \ -v /root/.bashrc:/root/.bashrc \ -v /usr/local/jdk1.8.0_202:/usr/local/jdk1.8.0_202 \ -v /usr/local/apache-maven-3.8.1:/usr/local/apache-maven-3.8.1 \ -v /usr/local/nodejs:/usr/local/nodejs \ -v /etc/hosts:/etc/hosts \ -v /etc/localtime:/etc/localtime \ -v /etc/timezone:/etc/timezone \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/run/docker.sock:/var/run/docker.sock \ --net=host \ jenkins:2.340
逐行解释:
-
#!/bin/bash:指定脚本解释器为bash。 -
mkdir /data/jenkins_home -p:创建目录/data/jenkins_home,-p选项确保如果目录不存在则创建,如果已存在也不会报错。 -
docker run:运行一个容器。-
-d:以后台(守护进程)模式运行容器。 -
--name jenkins2.340:为容器指定名称为jenkins2.340。 -
-u root:以root用户身份运行容器中的进程。 -
--restart=always:设置容器总是自动重启,除非明确停止。
-
-
挂载卷(
-v选项):-
-v /data/jenkins_home:/var/jenkins_home:将宿主机的/data/jenkins_home目录挂载到容器的/var/jenkins_home目录。这是Jenkins的主目录,用于持久化配置、工作空间等。 -
-v /root/.bashrc:/root/.bashrc:将宿主机的root用户的bashrc文件挂载到容器中,以便在容器内使用相同的bash配置。 -
-v /usr/local/jdk1.8.0_202:/usr/local/jdk1.8.0_202:挂载JDK,使容器内可以使用宿主机的Java开发工具包。 -
-v /usr/local/apache-maven-3.8.1:/usr/local/apache-maven-3.8.1:挂载Maven,使容器内可以使用宿主机的Maven。 -
-v /usr/local/nodejs:/usr/local/nodejs:挂载Node.js,使容器内可以使用宿主机的Node.js。 -
-v /etc/hosts:/etc/hosts:挂载宿主机的hosts文件,使容器使用与宿主机相同的域名解析。 -
-v /etc/localtime:/etc/localtime:挂载宿主机的localtime文件,使容器使用与宿主机相同的时区设置。 -
-v /etc/timezone:/etc/timezone:挂载宿主机的timezone文件,使容器使用与宿主机相同的时区信息。 -
-v /usr/bin/docker:/usr/bin/docker:挂载宿主机的docker可执行文件,使容器内可以使用docker命令(这通常用于在Jenkins容器内执行docker命令,即Docker in Docker的一种方式)。 -
-v /var/run/docker.sock:/var/run/docker.sock:挂载宿主机的Docker守护进程的套接字,使容器内的docker客户端可以与宿主机的Docker守护进程通信。
-
-
网络设置:
-
--net=host:使用宿主机的网络命名空间,容器与宿主机共享网络栈。这意味着容器不会进行网络隔离,直接使用宿主机的IP和端口。
-
-
镜像和标签:
-
jenkins:2.340:指定使用的镜像为jenkins,标签为2.340。
-
总结:
这个脚本创建了一个Jenkins容器,并进行了大量的目录和文件挂载,以便:
-
持久化Jenkins数据。
-
在容器内使用宿主机已安装的开发工具(JDK、Maven、Node.js)。
-
使容器内可以执行docker命令(通过挂载docker可执行文件和docker套接字)。
-
使容器与宿主机共享网络、时区、hosts等配置。
这样,Jenkins容器就可以作为一个持续集成环境,能够直接使用宿主机的docker来构建和运行其他容器。注意,以root用户运行容器可能会有安全风险,但在某些需要权限的场景下(如操作docker)可能是必要的。
这是一个用于在 Docker 中运行 Jenkins 2.340 的详细命令脚本,我将为您逐部分解释:
脚本详解
1. 脚本头部
#!/bin/bash
-
指定脚本使用 bash 解释器执行。
mkdir /data/jenkins_home -p
-
在宿主机上创建 Jenkins 数据目录,
-p参数确保目录不存在时创建,已存在时不报错。
2. Docker 运行参数详解
容器基本信息:
docker run -d --name jenkins2.340 -u root --restart=always
-
-d: 在后台运行容器(守护进程模式) -
--name jenkins2.340: 为容器命名为 "jenkins2.340" -
-u root: 以 root 用户身份运行容器(解决权限问题) -
--restart=always: 容器退出时自动重启
数据持久化卷挂载:
-v /data/jenkins_home:/var/jenkins_home
-
核心挂载:将宿主机的
/data/jenkins_home挂载到容器的/var/jenkins_home -
目的:持久化 Jenkins 的所有配置、作业、插件等数据
-v /root/.bashrc:/root/.bashrc
-
挂载宿主机的 bash 配置文件,使容器内继承相同的 bash 环境配置
开发工具挂载:
-v /usr/local/jdk1.8.0_202:/usr/local/jdk1.8.0_202
-
挂载 JDK 1.8.0_202 到容器,使 Jenkins 可以使用宿主机已安装的 Java 环境
-v /usr/local/apache-maven-3.8.1:/usr/local/apache-maven-3.8.1
-
挂载 Maven 3.8.1,为 Java 项目提供构建工具
-v /usr/local/nodejs:/usr/local/nodejs
-
挂载 Node.js,支持前端项目构建
系统配置挂载:
-v /etc/hosts:/etc/hosts
-
共享宿主机的 hosts 文件,解决容器内部域名解析问题
-v /etc/localtime:/etc/localtime
-v /etc/timezone:/etc/timezone
-
同步宿主机的时区和时间设置,确保容器内时间正确
Docker 环境挂载(关键配置):
-v /usr/bin/docker:/usr/bin/docker
-v /var/run/docker.sock:/var/run/docker.sock
-
Docker in Docker (DinD) 模式:允许 Jenkins 容器内部使用宿主机 Docker
-
作用:Jenkins 可以在流水线中执行
docker build、docker push等命令 -
通过挂载 Docker socket,容器内部可以直接调用宿主机的 Docker 守护进程
网络配置:
--net=host
-
使用宿主机网络模式,容器与宿主机共享网络命名空间
-
优点:容器内服务可以直接使用宿主机的 IP 和端口
-
注意:可能会有端口冲突风险
镜像指定:
jenkins:2.340
-
使用官方 Jenkins 2.340 版本的镜像
配置的目的和用途
主要功能:
-
持久化数据:Jenkins 所有数据保存在
/data/jenkins_home,容器重建不丢失配置 -
集成开发环境:容器内可直接使用宿主机已安装的 JDK、Maven、Node.js
-
Docker 集成:支持在 Jenkins 流水线中构建和推送 Docker 镜像
-
时间同步:保持容器与宿主机时间一致
-
网络直通:使用 host 网络,无需端口映射
使用场景:
这是一个典型的 CI/CD Jenkins 主节点配置,特别适用于:
-
需要构建 Docker 镜像的 Java/Node.js 项目
-
需要在流水线中执行 Docker 命令
-
需要持久化 Jenkins 配置的场景
注意事项
-
权限问题:使用
-u root解决了权限,但可能有安全风险 -
网络模式:
--net=host意味着 Jenkins 默认使用 8080 端口,确保宿主机该端口空闲 -
Docker 挂载:挂载 Docker socket 意味着容器内的 Jenkins 拥有与宿主机相同的 Docker 权限
-
路径依赖:脚本假设宿主机上相关工具已安装在指定路径
启动后访问
启动后,Jenkins 应该可以通过以下方式访问:
-
宿主机IP:8080(如
http://192.168.1.100:8080)
首次访问需要输入初始管理员密码,该密码位于:
/data/jenkins_home/secrets/initialAdminPassword
这个配置是一个生产环境中比较完整的 Jenkins Docker 部署方案。
posted on 2026-03-15 11:23 luzhouxiaoshuai 阅读(40) 评论(0) 收藏 举报
浙公网安备 33010602011771号