一、docker+jenkins+gitlab–通过dockerfile构建镜像,使用jenkins将镜像推送到gitlab仓库中
1、先用本地docker主机==
在server3(jenkins主机上)安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #添加软件源信息
vim docker-ce.repo
yum -y install docker-ce #通常会有软件依赖性
cat /etc/redhat-release #查看系统版本
yum -y install docker-ce container-selinux-2.77-1.el7.noarch.rpm #下载解决依赖性
systemctl start docker #开启
docker info #查看信息
cd /var/lib/docker #容器数据地址
yum install -y bash-*
mkdir -p /etc/docker
vim daemon.json
{
"registry-mirrors": ["https://owrv442h.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker #部署加速器
2、调用
jenkins软件是通过本地普通用户进行的,会出现权限问题
[root@server3 docker]# ll /run/docker.sock
srw-rw---- 1 root docker 0 Jul 12 14:01 /run/docker.sock
[root@server3 docker]# chmod 777 /run/docker.sock
3、网页设置
Docker Host URI:unix:///run/docker.sock #docker主机:本机调用
Docker registry URL:https://reg.westos.org #docker仓库
[root@server3 docker]# vim /etc/hosts #配置解析
172.25.7.1 server1 reg.westos.org
问题:
(1)#在连接harbor仓库时会出现仓库加密的问题,需要添加将仓库证书添加连接过来。
[root@server1 docker]# cd /etc/docker/
[root@server1 docker]# ls
certs.d daemon.json key.json
[root@server1 docker]# scp -r certs.d/ server3:/etc/docker/
#利用证书解决了加密问题
(2)仓库处理加密以外还存在认证问题,
Registry credentials:add - jenkins,填入选择即可
Repository Name: library/demo #上传镜像时的镜像仓库名称,二级自己起
Tag:${BUILD_NUMBER} #jenkins构建号
4、先不上传看看在本地能不能把镜像构建出来
5、测试
gitlab主机:
[root@server2 ~]# cd demo/
[root@server2 demo]# vim dockerfile
[root@server2 demo]# ls
dockerfile index.html
[root@server2 demo]# cat index.html
westos.org
[root@server2 demo]# git add Dockerfile #添加
[root@server2 demo]# git commit -m "add dockerfile" #描述
[root@server2 demo]# git push -u origin master #上传
gitlab网页中会出现变化,并会出现第三次变更,主动出发jenkins,查看控制台输出成功使用jenkins+gitlab构建本地dockerfile
[root@server3 docker]# docker images #构建成功
REPOSITORY TAG IMAGE ID CREATED SIZE
reg.westos.org/library/demo 3 aa4f78ab1891 5 minutes ago 132MB
reg.westos.org/library/demo latest aa4f78ab1891 5 minutes ago 132MB
nginx latest 0901fa9da894 34 hours ago 132MB
6、测试可以上传的镜像
网页操作,将现在第四次一起上传镜像,始终保持最新一次构建
[root@server3 docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
reg.westos.org/library/demo 3 aa4f78ab1891 13 minutes ago 132MB
reg.westos.org/library/demo 4 aa4f78ab1891 13 minutes ago 132MB
reg.westos.org/library/demo latest aa4f78ab1891 13 minutes ago 132MB
nginx latest 0901fa9da894 35 hours ago 132MB
7、构建后续操作
8、新建新的jenkins items,构建镜像启动容器
shell命令测试:
docker run -d --name webserver reg.westos.org/library/demo
[docker] $ /bin/sh -xe /tmp/jenkins1486572390528695534.sh #手动触发成功,控制台输出
+ docker run -d --name webserver reg.westos.org/library/demo
880b6ffef97b8055068abd14b40a4ebd9a7753a1a4d16f903288f65833ea709d
Finished: SUCCESS
#查看并访问
[root@server3 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
880b6ffef97b reg.westos.org/library/demo "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 80/tcp webserver
[root@server3 docker]# docker inspect webserver
[root@server3 docker]# curl 172.17.0.2
westos.org
9、按照流程作一个整体的触发
流程:
user–>git(提交代码)–>gitlab–>wehook(触发jenkins)–>jenkins–>调用docker build plugins 插件–>build images(创建镜像)–>push registry(推送到仓库)–>trigger–>docker project -->docker run -->webserver
由于容器名称唯一,不能重复会出现问题,所以需要改正shell命令,添加一个判断
docker ps -a | grep webserver && docker rm -f webserver
sleep 1
docker run -d --name webserver reg.westos.org/library/demo
全流程操作:第五次构建
[root@server2 demo]# vim index.html
[root@server2 demo]# git add index.html
[root@server2 demo]# git commit -m "update index.html"
[master 7238a57] update index.html
1 file changed, 8 insertions(+)
[root@server2 demo]# git push -u origin master
[root@server3 docker]# curl 172.17.0.2 #已更改