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:dind
docker: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步创建的容器是否已经启动。