docker安装jetkins(1)
最后更新于:2022-04-02 05:43:38
[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
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)
## 总结
本文就到这里,还没有涉及到基本的部署配置,等待我下一篇更新吧。
';