各版本对比,重点,重点,装了blueocean发现不会用alpine系统,此文章仅记录下心酸历程
重点讲下前三个
第一个是官方的镜像,但是版本很旧,不推荐
第二个镜像虽然不是官方的,但是 jenkins 的版本会跟随 jenkins官方的版本,也就是说会保持拉下来的镜像的 jenkins 版本是最新的,推荐,我也用这个
第三个镜像是中文 jenkins 镜像, 但是镜像的系统不是我们所熟悉的 centos、ubuntu、Debian 等,而是 Alpine,安装依赖库的方式也不常见,不推荐
————————————————
版权声明:本文为CSDN博主「小菠萝测试笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33801641/article/details/109611063
docker pull jenkinsci/blueocean
docker run
-u root
--rm
-d
-p 8081:8080
-p 50000:50000
--name jenkins
--privileged=true
-v /var/jenkins/jenkins_home:/var/jenkins_home
-v /var/jenkins/blueocean:/home
-v /var/run/docker.sock:/var/run/docker.sock
jenkinsci/blueocean
sudo docker run -itd -u root -p 8081:8080 -p 50000:50000 --name jenkinsci-blueocean --privileged=true -v /var/jenkins/jenkins_home:/var/jenkins_home -v /var/jenkins/blueocean:/home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
完整的容器功能(-privileged)
$ docker run -t -i --rm ubuntu bashroot@bc338942ef20:/# mount -t tmpfs none /mntmount: permission denied
这是行不通的,因为默认情况下,大多数具有潜在危险的内核功能都被丢弃; 包括cap_sys_admin(这是安装文件系统所必需的)。 但是, - 特权标志将允许它运行:
$ docker run -t -i --privileged ubuntu bashroot@50e3f57e16e6:/# mount -t tmpfs none /mntroot@50e3f57e16e6:/# df -hFilesystem Size Used Avail Use% Mounted onnone 1.9G 0 1.9G 0% /mnt
该--privileged标志为容器提供了所有功能,并且还提升了devicecgroup控制器执行的所有限制。换句话说,容器可以做主机可以做的几乎所有事情。这个标志存在允许特殊的用例,比如在Docker中运行Docker。
--rm (可选) jenkinsci/blueocean 关闭时自动删除Docker容器(下图为实例)。如果您需要退出Jenkins,这可以保持整洁。
-d(可选)jenkinsci/blueocean 在后台运行容器(即“分离”模式)并输出容器ID。如果您不指定此选项, 则在终端窗口中输出正在运行的此容器的Docker日志。
-p 8080:8080 映射(例如“发布”)jenkinsci/blueocean 容器的端口8080到主机上的端口8080。 第一个数字代表主机上的端口,而最后一个代表容器的端口。因此,如果您为此选项指定 -p 49000:8080 ,您将通过端口49000访问主机上的Jenkins。
-p 50000:50000(可选)将 jenkinsci/blueocean 容器的端口50000 映射到主机上的端口50000。 如果您在其他机器上设置了一个或多个基于JNLP的Jenkins代理程序,而这些代理程序又与 jenkinsci/blueocean 容器交互(充当“主”Jenkins服务器,或者简称为“Jenkins主”), 则这是必需的。默认情况下,基于JNLP的Jenkins代理通过TCP端口50000与Jenkins主站进行通信。
您可以通过“ 配置全局安全性” 页面更改Jenkins主服务器上的端口号。如果您要将您的Jenkins主机的JNLP代理端口的TCP端口 值更改为51000(例如),那么您需要重新运行Jenkins(通过此 docker run …命令)并指定此“发布”选项 -p 52000:51000,其中最后一个值与Jenkins master上的这个更改值相匹配,第一个值是Jenkins主机的主机上的端口号, 通过它,基于JNLP的Jenkins代理与Jenkins主机进行通信 - 例如52000。
-v /var/jenkins:/var/jenkins_home:/var/jenkins_home(可选,但强烈建议)映射在容器中的/var/jenkins_home 目录到具有名字 jenkins-data 的volume。 如果这个卷不存在,那么这个 docker run 命令会自动为你创建卷。 如果您希望每次重新启动Jenkins(通过此 docker run ..、命令)时保持Jenkins状态,则此选项是必需的 。 如果你没有指定这个选项,那么在每次重新启动后,Jenkins将有效地重置为新的实例。
-v /var/run/docker.sock:/var/run/docker.sock(可选 /var/run/docker.sock 表示Docker守护程序通过其监听的基于Unix的套接字。 该映射允许jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 如果运行声明式管道,其语法包含agent部分用 docker
例如, agent { docker { ..、} } 此选项是必需的。 在Pipeline Syntax 页面上阅读更多关于这个的信息 。
问题1:启动容器就退出【日志查询】
权限问题,增加-u root参数解决
sudo docker inspect --format '{{.LogPath}}' d740e7573f9e
cat /var/lib/docker/containers/d740e7573f9e75d0fa61ae6492b979620df981f4fdf6a2eb8025d53c95ee526e/d740e7573f9e75d0fa61ae6492b979620df981f4fdf6a2eb8025d53c95ee526e-json.log
{"log":"touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission deniedrn","stream":"stdout","time":"2022-02-17T07:58:06.096095137Z"}
{"log":"Can not write to /var/jenkins_home/copy_reference_file.log、Wrong volume permissions?rn","stream":"stdout","time":"2022-02-17T07:58:06.096233856Z"}
{"log":"touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission deniedrn","stream":"stdout","time":"2022-02-17T07:59:37.283226051Z"}
{"log":"Can not write to /var/jenkins_home/copy_reference_file.log、Wrong volume permissions?rn","stream":"stdout","time":"2022-02-17T07:59:37.283586437Z"}