Docker+Jenkins入门教程

一、Docker简介
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
1、dockerClient客户端
2、Docker Daemon守护进程
3、Docker Image镜像
4、DockerContainer容器
二、Docker环境安装
1、docker安装
在安装docker前我们要先判断自己的系统内核版本(centos系统),docker要求内核版本高于3.10,查看该系统版本是否支持docker。
通过uname -r 命令查看当前内核版本
这里写图片描述
然后通过命令:yum install -y docker进行安装
*Ps:如果输入次命令提示no package docker available
原因是没有找到此安装包,需要更新第三方库

Sudo yum install epel-release*

2、启动docker服务
安装好docker后,我们就要启动docker服务了,输入以下命令来启动docker服务:

$sudo service docker start
$docke --version进行验证是否启动服务

这里写图片描述
3、获取镜像
Docker服务启动后,当前是没有镜像的,我们要需要获取远程仓库提供的镜像,首先我们可以查询下我们要找的镜像,用命令查询:docker search jenkins
然后通过命令:docker pull jenkins拉取镜像文件
获取到镜像后我们可以用命令查看本地镜像:docker images
这里写图片描述
这个就是我们刚才获取到的镜像。

4、启动jenkins容器
有了docker镜像后,就可以创建容器了,由于jenkins没有数据库,所有数据都是存放在文件中的,首先在本地创建jenkins数据目录,用于保存jenkins的数据,这个目录需要定时备份,用于容灾(当前jenkins容器所在节点由于不可抗因素无法使用时,可以在新机器上使用备份的数据启动新的jenkins master节点)
创建jenkins目录
Sudo mkdir /var/jenkins

修改jenkins目录权限
Sudo chown 1000:1000 /var/jenkins

启动jenkins容器
Sudo docker run -p 127.0.0.1:8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home --name my_jenkins -d jenkins
*Ps:参数说明
-d:让容器在后台运行
-p:将容器内部使用的网络端口映射到我们使用的主机上
–name:将容器命名为my_jenkins*

这里启动jenkins会出现一个问题
一般启动jenkins容器我们是用这个
docker run -p 8080:8080 -p 50000:50000 --name bee_jenkins jenkins
命令查看启动日志
docker logs jenkins

这样是可以正常启动的,但是为了持久化jenkins配置数据,我们会把宿主机当前目录下的jenkins文件夹挂载到容器中的目录“/var/jenkins_home”的时候就会出现问题
我们先把之前创建的容器删除掉
Docker rm -f my_jenkins —-删除之前创建的容器(才能创建相同名字的容器)
Sudo docker run -p 127.0.0.1:8080:8080 -p 50000:50000 -v /var/jenkins:/var/jenkins_home --name my_jenkins -d jenkins
Docker logs jenkins

错误日志如下:
这里写图片描述
遇到这种情况,我们检查一下之前启动方式的”/var/jenkins_home”目录权限,查看Jenkins容器的当前用户: 当前用户是”jenkins”而且”/var/jenkins_home”目录是属于jenkins用户拥有的

docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "whoami && id" jenkins 

uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins) 

docker@default:~$ docker run -ti --rm --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home" 

total 20 
drwxr-xr-x 2 jenkins jenkins 4096 Jun 5 08:39 .
drwxr-xr-x 28 root root 4096 May 24 16:43 .. 
-rw-r--r-- 1 jenkins jenkins 220 Nov 12 2014 .bash_logout
 -rw-r--r-- 1 jenkins jenkins 3515 Nov 12 2014 .bashrc 
-rw-r--r-- 1 jenkins jenkins 675 Nov 12 2014 .profile

而当映射本地数据卷时,/var/jenkins_home目录的拥有者变成了root用户

docker run -ti --rm -v $(pwd)/jenkins:/var/jenkins_home --entrypoint="/bin/bash" jenkins -c "ls -la /var/jenkins_home" 

total 4 
drwxr-sr-x 2 root staff 40 Jun 5 08:32 . 
drwxr-xr-x 28 root root 4096 May 24 16:43 ..

这就解释了为什么当”jenkins”用户的进程访问”/var/jenkins_home”目录时,会出现 Permission denied 的问题,我们再检查一下宿主机上的数据卷目录,当前路径下”jenkins”目录的拥有者是”root”,这是因为这个目录是Docker进程缺省创建出来的。

ls -la /var/jenkins

total 0 
drwxr-sr-x 2 root staff 40 Jun 5 08:32 ./ 
drwxr-sr-x 5 docker staff 160 Jun 5 08:32 ../

发现问题之后,相应的解决方法也很简单:把当前目录的拥有者赋值给uid 1000,再启动”jenkins”容器就一切正常了。

#sudo chown -R 1000:1000 /var/jenkins 
#docker start bee_jenkins

然后启动jenkins容器时再加上一个参数就好了

#sudo docker run -d -v /var/jenkins:/var/jenkins_home -u 0 -P --name bee_jenkins jenkins

如果按照上面做还是出现Permission denied错误,那么可以检查一下selinux状态,开启的情况下会导致一些服务安装、使用不成功。
查看selinux状态,

[root@localhost ~]# sestatus 
SELinux status: enabled 
SELinuxfs mount: /sys/fs/selinux 
SELinux root directory: /etc/selinux 
Loaded policy name: targeted 
Current mode: enforcing 
Mode from config file: enforcing 
Policy MLS status: enabled 
Policy deny_unknown status: allowed 
Max kernel policy version: 28

临时关闭:

[root@localhost ~]# setenforce 0

永久关闭,可以修改配置文件/etc/selinux/config,将其中SELINUX设置为disabled,如下,

[root@localhost ~]# cat /etc/selinux/config 
# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
# enforcing - SELinux security policy is enforced. 
# permissive - SELinux prints warnings instead of enforcing. 
# disabled - No SELinux policy is loaded. 
#SELINUX=enforcing SELINUX=disabled 
# SELINUXTYPE= can take one of three two values: 
# targeted - Targeted processes are protected, 
# minimum - Modification of targeted policy. Only selected processes are protected. 
# mls - Multi Level Security protection. SELINUXTYPE=targeted 

[root@rdo ~]# sestatus 
SELinux status: disabled

如-p 127.0.0.1:8080:8080 就是将容器的8080端口映射到我们本地的8080端口且绑定127.0.0.7本地IP。
我们可以通过以下命令确认容器是否启动成功:
docker ps 或docker ps -a
这里写图片描述
说明启动成功,且成功绑定本地ip跟端口,这时我们通过浏览器访问:127.0.0.1:8080即可打开jenkins了
这里写图片描述
5、上传自己本地docker镜像到hub上
·先申请一个docker hub 帐号,我的帐号是beedocker2017(58…)
·为本地镜像打标签tag

docker tag <exitsting-image><hub-user>/<repo-name>[:tag]

比如:

docker tag jenkins beedocker2017/bee_jenkins:1.0

beedocker2017就是docker hub上的账户名称,bee_jenkins就是远程的仓库名称,1.0就是tag版本
·push镜像
在本地登录docker hub帐号

#docker login --登录后就可以push了
#docker push beedocker2017/bee_jenkins:1.0 

这时我们就可以pull 自己远程的镜像到自己本地主机了

#docker pull beedocker2017/bee_jenkins:1.0
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值