企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 前言 本文带你在docker中安装jenkins服务,为入门级别的介绍,建议阅读时间10-15min. ## 检查是否安装docker ``` docker --version ``` ## 拉取镜像 ``` // 拉取镜像 docker pull jenkins // 拉取成功提示 Digest: sha256:eeb4850eb65f2d92500e421b430ed1ec58a7ac909e91f518926e02473904f668 Status: Downloaded newer image for jenkins:latest //通过命令查看本地具有的所有镜像 docker images ``` ## 简单配置 **你需要配置jenkins的相关目录,并且给其对应的权限,这两者都是必备的。** ``` mkdir -p /root/jenkins_home chown -R 1000 /root/jenkins_home ``` 解说:mkdir 是创建文件夹的命令,-p代表强制创建目录,就是说如果没有中间目录的时候也会顺便创建其父目录。 而chown用来更改某个目录或文件的用户名和用户组,而chmod是修改文件夹的修改权限,其是有差别的,而我们一般修改的是文件所有者的权限,1000指的是用户的id,正常情况下是用户名。或者用户组。 这里多说一点,建议大家多去看比较正规或者完善一点的教程,不要随便百度一般网友的回复或者博客,尽量关注大佬或者比较官方的,有人维护的一些技术文档。这里提供的是菜鸟教程的一些简单说明,作为入门掌握还是足够的。 - [linux的chown](http://www.runoob.com/linux/linux-comm-chown.html) - [linux的chmod](http://www.runoob.com/linux/linux-comm-chmod.html) ## 启动jenkins服务 ``` docker run -d -p 8080:8080 --name myjenkins -v /root/jenkins-home:/root/jenkins_home jenkins ``` 命令解读:docker run 是运行所有docker镜像的标准写法,其中-d代表后台运行,-p指的是映射容器端口与服务器端口,--name指 的是对镜像所自定义的名称,当不方便使用容器id的时候,可以使用名字对其进行查看或者删除,-v指的是自定义配置jenkins目录,最后的参数jenkins指的是使用的是本地的jenkins镜像。 ## 查看日志记录其秘钥 这一步是在正常启动后,顺便查看下其日志,因为其后续是需要的。所以不妨直接进入日志查看下,当然也可以通过其他方式进行查看。 ## 注意事项 ### 查看全部状态的docker容器 可以查看到所有的容器,包括退出的,启动的,线上的等 ``` docker ps -a // 其实你可以rm ,stop后执行多个容器的,空格隔开就可以 docker rm myjenkins1 myjenkins2 heuristic_lamarr quirky_kirch ``` ### 用ps查看jenkins服务的具体情况 ``` ps -ef |grep jenkins www 4470 4453 0 9月23 ? 00:00:02 /bin/tini -- /usr/local/bin/jenkins.sh www 4501 4470 0 9月23 ? 00:01:38 java -jar /usr/share/jenkins/jenkins.war root 6213 5885 0 21:14 pts/0 00:00:00 grep --color=auto jenkins ``` ### jenkins部分是否需要java环境,tomcat服务做端口监听 jenkins镜像本身同时具有这两者,所以不用操心了。如果你按照上面的配置完成启动,正常情况下就可以通过ip+端口访问到你的jenkins界面了。 ### 启动失败的情况 1 容器名称重复,解决办法:将容器的名字也就是--name后的参数换掉即可 ``` docker: Error response from daemon: Conflict. The container name "/myjenkins" is already in use by container ``` 2 端口冲突,其他服务已经占用,解决办法,查看所有的端口占用情况或者直接查看某端口下是否有服务。 ``` //报错 Bind for 0.0.0.0:8080 failed: port is already allocated. //查看端口占用情况 netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 14379/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 15847/sshd tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 10245/mysqld tcp6 0 0 :::8080 :::* LISTEN 4447/docker-proxy tcp6 0 0 :::8099 :::* LISTEN 1508/docker-proxy udp 0 0 0.0.0.0:68 0.0.0.0:* 777/dhclient udp 0 0 172.17.0.1:123 0.0.0.0:* 24745/ntpd udp 0 0 172.16.199.194:123 0.0.0.0:* 24745/ntpd // netstat -tunlp | grep 8080 //如果端口占用是不合理的情况,可以关掉其端口的进程,kill -9 进程id ``` 3 文件没有权限,设置权限即可 ### 如果在服务器上查看是否启动成功 你可以通过docker ps 查看所有的启动好的容器,也可以通过docker ps | grep containerName 来具体查看你的服务启动状态,如果为up就是正常的。 ``` docker ps | grep myjenkins 1df370bbb026 jenkins "/bin/tini -- /usr/l…" 24 hours ago Up 24 hours 0.0.0.0:8080->8080/tcp, 50000/tcp myjenkins ``` 你也可以通过curl ip+端口进行访问,如果启动正常,其和浏览器一样会返回其页面代码的部分。 ``` curl localhost:8080 <html><head><meta http-equiv='refresh' content='1;url=/login?from=%2F'/><script>window.location.replace('/login?from=%2F');</script></head><body style='background-color:white; color:white;'> Authentication required ``` ### 外网不可访问 我遇到的就是这种情况,被坑了比较久,也是自己比较小白的原因。 1 查看防火墙的状态,之前的linux系统可能是用iptables的,最新的都是用firewalld.service来进行相应的管理的。 相关参考:[firewalld.serivce](https://blog.csdn.net/u012486840/article/details/52635263) 2 查看你的云服务器是否有单独的安全组设置,我就是被这部分坑的。 主要是因为阿里云服务器针对其他端口默认是不对外开放的,你需要单独设置增加规则才可以。 - [百度经验:开放阿里云端口](https://jingyan.baidu.com/article/03b2f78c31bdea5ea237ae88.html) ## 总结 本文就到这里,还没有涉及到基本的部署配置,等待我下一篇更新吧。