创建一个目录,用来存在Jenkins的数据
mkdir -p /dockerData/jenkins/jenkins-data
进入到/dockerData/jenkins
目录,我们在这创建Dockerfile
cd /dockerData/jenkins
vim Dockerfile
复制以下内容到文件Dockerfile
中
FROM jenkins/jenkins:2.375.1
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \
https://download.docker.com/linux/debian/gpg
RUN echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
RUN apt-get update && apt-get install -y docker-ce-cli
USER jenkins
RUN jenkins-plugin-cli --plugins "blueocean:1.26.0 docker-workflow:563.vd5d2e5c4007f"
从Dockerfile中构建镜像
docker build -t myjenkins-blueocean:2.375.1-1 .
构建完成之后,使用docker images可以看到刚刚构建的镜像。
运行一个Jenkins容器
docker run \
-u root \
--name jenkins \
--restart=on-failure \
--detach \
--publish 8080:8080 \
--publish 50000:50000 \
--volume /etc/localtime:/etc/localtime \
--volume /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker \
--volume /dockerData/jenkins/jenkins-data:/var/jenkins_home \
myjenkins-blueocean:2.375.1-1
对当中的一些参数进行解释:
-u root
容器中的进程以root用户权限运行--restart=on-failure
如果容器由于错误而退出,则将其重新启动--detach
保持容器在后台持续运行--publish 8080:8080
映射宿主机8080端口给容器8080端口--publish 50000:50000
映射宿主机50000端口给容器50000端口--volume /etc/localtime:/etc/localtime
容器时间如何与宿主机同步--volume /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker
挂载宿主机的/var/run/docker.sock
给容器,这样Jenkins容器就可以调用宿主机的docker,创建其他的容器服务于CICD--volume /dockerData/jenkins/jenkins-data:/var/jenkins_home
挂载Jenkins容器的数据到宿主机目录下
docker run -dt --name jenkins -p 8390:8080 -p 50000:50000 --privileged=true \
-v /vdc/data/jenkins:/var/jenkins_home \
-v /vdc/data/maven/apache-maven-3.9.2:/usr/local/maven \
-v /usr/local/java/jdk-17.0.9:/usr/local/jdk \
-v /vdb/server/pay/config:/vdb/server/pay/config \
-v /vdc/data/ftp_data/trace:/vdc/data/ftp_data/trace \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins/jenkins:lts
该命令用于启动一个名为 jenkins 的 Docker 容器,并进行了一系列配置。以下是命令的详细解释:
docker run: 用于启动一个新的容器。
-d: 后台运行容器(detached 模式)。
-t: 分配一个伪终端(通常与 -i 一起使用,这里单独使用 -t 可能是为了确保TTY分配)。
--name jenkins: 为容器指定名称为 jenkins。
-p 8390:8080: 将主机的 8390 端口映射到容器的 8080 端口,这是 Jenkins 的 Web UI 默认端口。
-p 50000:50000: 将主机的 50000 端口映射到容器的 50000 端口,这是 Jenkins 用于远程执行器连接的端口。
--privileged=true: 给予容器扩展权限,允许其执行一些特权操作,例如访问主机设备等。
-v /vdc/data/jenkins:/var/jenkins_home: 将主机的 /vdc/data/jenkins 目录挂载到容器的 /var/jenkins_home 目录,这是 Jenkins 的主目录,用于存储配置、插件和构建历史等数据。
-v /vdc/data/maven/apache-maven-3.9.2:/usr/local/maven: 将主机上的 Maven 安装目录挂载到容器中,以便在容器内可以直接使用该版本的 Maven。
-v /usr/local/java/jdk-17.0.9:/usr/local/jdk: 将主机上的 JDK 安装目录挂载到容器中,以便在容器内可以直接使用该版本的 JDK。
-v /vdb/server/pay/config:/vdb/server/pay/config: 将主机的支付服务配置目录挂载到容器中,可能是为了某些特定的构建或测试任务。
-v /vdc/data/ftp_data/trace:/vdc/data/ftp_data/trace: 将主机的 FTP 数据跟踪目录挂载到容器中,可能是为了日志或其他数据处理需求。
-v /var/run/docker.sock:/var/run/docker.sock: 将主机的 Docker 套接字文件挂载到容器中,使得容器内的进程可以与主机的 Docker 守护进程通信,从而管理主机上的 Docker 资源。
-v /usr/bin/docker:/usr/bin/docker: 将主机的 Docker 可执行文件挂载到容器中,使得容器内可以直接调用 Docker 命令。
jenkins/jenkins:lts: 使用 Jenkins 的长期支持版(LTS)镜像。