Jenkins官网最新Docker版安装教程

1. 前言

最近在新的服务器搭建Jenkins的时候想使用更新的版本,但是碰到了一些问题,但是最后发现是看官方文档没有看仔细。。。哎自己的锅。

2. 安装Docker

yum install -y yum-utils
yum-config-manager --add-repo <https://download.docker.com/linux/centos/docker-ce.repo>
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker run hello-world

这里是基于centos,使用yum进行安装的,其他系统的docker安装,可以参考这个博客:Docker 安装

3. 通过Docker安装Jenkins

这里的做法是根据官方文档:Installing Jenkins

英语不错的小伙伴可以直接打开这个文档安装会更加详细。

3.1 在Docker中创建bridge network

创建bridge network是为了之后多个容器之间的连接。是的,现在的Jenkins安装需要两个container

docker network create jenkins

3.2 创建Jenkins所需要的目录

mkdir /dockerData/jenkins/jenkins-docker-certs
mkdir /dockerData/jenkins/jenkins-docker-certs

3.3 创建jenkins-docker容器

这个容器是为了解决Jenkins和宿主机docker的通信问题创建的

docker run \
  --name jenkins-docker \
  --rm \
  --detach \
  --privileged \
  --network jenkins \
  --network-alias docker \
  --env DOCKER_TLS_CERTDIR=/certs \
  --volume /dockerData/jenkins/jenkins-docker-certs:/certs/client \
  --volume /dockerData/jenkins/jenkins-docker-certs:/var/jenkins_home \
  --publish 2376:2376 \
  docker:dind \
  --storage-driver overlay2

一些参数的解释如下:

  • --name jenkins-docker (可选)创建对应容器的名称。 默认情况下,Docker 会为容器生成一个唯一的名称。
  • --rm(可选)在关闭时自动删除 Docker 容器(Docker 镜像的实例)。
  • --detach (可选)在后台运行 Docker 容器。
  • --privileged 在 Docker 中运行 Docker 目前需要privilege 权限访问才能正常运行。 较新的 Linux 内核版本可能会放宽此要求。
  • --network jenkins 这与前面步骤中创建的网络相对应。
  • --network-alias docker 使 Docker 容器中的 Docker 可用作 jenkins 网络中的主机名 docker。在 Docker 服务器中启用 TLS。 由于使用了特权容器,因此建议这样做,尽管它需要使用如下所述的共享卷。 此环境变量--env DOCKER_TLS_CERTDIR**=**/certs控制管理 Docker TLS 证书的根目录。
  • --volume /dockerData/jenkins/jenkins-docker-certs:/certs/client 宿主机目录和容器目录之间的映射,宿主机目录是:/dockerData/jenkins/jenkins-docker-certs ,容器目录是:/certs/client
  • --volume /dockerData/jenkins/jenkins-docker-certs:/var/jenkins_home 和上一个一样
  • --publish 2376:2376 (可选)在主机上公开 Docker 守护程序端口。 这对于在主机上执行docker 命令以控制此内部 Docker 守护进程很有用。
  • docker:dinddocker:dind image 本身。 这个镜像可以在运行前使用命令下载:docker image pull docker:dind。
  • --storage-driver overlay2 Docker 卷的存储驱动程序。可以在Docker storage drivers 找到更详细的信息

3.4 自定义官方 Jenkins Docker 镜像

创建一个名为: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 .

然后创建Jenkins运行的容器:

docker run \
  --name jenkins \
  --restart=on-failure \
  --detach \
  --network jenkins \
  --env DOCKER_HOST=tcp://docker:2376 \
  --env DOCKER_CERT_PATH=/certs/client \
  --env DOCKER_TLS_VERIFY=1 \
  --publish 8080:8080 \
  --publish 50000:50000 \
  --volume /dockerData/jenkins/jenkins-data:/var/jenkins_home \
  --volume /dockerData/jenkins/jenkins-docker-certs:/certs/client:ro \
  myjenkins-blueocean:2.375.1-1

上述命令一些参数的解释:

  • --restart**=**on-failure 如果容器停止,始终重新启动容器。 如果手动停止,则只有在Docker守护进程重启或容器本身手动重启时才会重启。
  • --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 指定 docker、docker-compose 和其他 Docker 工具用于连接上一步中的 Docker 守护程序的环境变量。
  • --publish 8080:8080将当前容器的 8080 端口映射(即“发布”)到主机上的 8080 端口。 第一个数字代表主机上的端口,而最后一个数字代表容器的端口。 因此,如果您为此选项指定 -p 49000:8080,您将通过端口 49000 访问主机上的 Jenkins。
  • --publish 50000:50000 Jenkins 代理需要使用的端口

到现在为止,Jenkins容器是已经创建好了,可以访问你的电脑或者服务ip:8080 试试能不能访问到Jenkins的服务,如果访问不到,那么可以使用docker logs <containerId> 查看一下日志,可能出现的问题有以下几个

解决错误:容器日志抛出permission denied

需要给予映射目录/dockerData/jenkins/jenkins-data/dockerData/jenkins/jenkins-docker-certs权限。这里的权限设置不一定非是777,出于安全性的考虑选择适合的权限给到对应的用户。

chmod 777 /dockerData/jenkins/jenkins-data
chmod 777 /dockerData/jenkins/jenkins-docker-certs

解决错误:open /certs/client/ca.pem: no such file or directory

这个错误应该是在第3.3步创建jenkins-docker容器的时候错误,确保容器启动没问题,并且在/dockerData/jenkins/jenkins-docker-certs 目录下有生成对应的ca.pem

解决错误:Jenkins dial tcp: lookup docker on 127.0.0.11:53: no such host

这个错误还是和第3.3步创建jenkins-docker容器的时候有关,需要检查第3.3步创建的容器是否已经启动。

# docker  Jenkins 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×