文章目录
一、添加本地镜像仓库、上传镜像
之前我们创建的test项目实现了根据gitlab的dockerfile进行自动构建镜像的功能,在之前功能的基础之上添加本地镜像仓库,能够在完成镜像构建之后将镜像上传到本地镜像仓库
1. 环境准备
#1. 查看gitlab状态,确保可用
[root@server1 ~]# gitlab-ctl status
#2. 拉取仓库镜像registry
[root@server2 ~]# docker images
[root@server2 ~]# docker ps -a
[root@server2 ~]# docker rm demo #删除之前在jenkins服务器上创建的容器
demo
[root@server2 ~]# docker pull registry #拉取仓库镜像registry
#3. 启动容器,并设置卷挂载与端口映射
[root@server2 ~]# docker run -d --name registry -v /opt/registry:/var/lib/registry -p 5000:5000 registry
6933983dafd1a08d447609b10e070b5cf8308a0bac59f0def75795c515d610cb
[root@server2 ~]# docker ps
注:将本地/opt/registry路径挂载到容器内的/var/lib/registry下,实现在容器内的数据在宿主机对应位置的持久化存储。
2. 项目配置更改
[root@server2 ~]# ll /var/run/docker.sock
srw-rw---- 1 root docker 0 Jun 4 09:27 /var/run/docker.sock
[root@server2 ~]# chmod 777 /var/run/docker.sock
[root@server2 ~]# id jenkins
uid=998(jenkins) gid=996(jenkins) groups=996(jenkins)
[root@server2 ~]# usermod -G docker jenkins
[root@server2 ~]# id jenkins
uid=998(jenkins) gid=996(jenkins) groups=996(jenkins),995(docker)
跳过push,使之自动push到仓库中
3. 构建测试
手动点击触发
完成构建并将镜像push到本地仓库中
最新拉取的镜像
二、本地创建项目,完成容器自启
创建新项目docker,能够在test项目完成后触发docker项目,完成容器的自动化构建
git -> push -> gitlab -> triger -> jenkins -> test1(from dokcerfile to build images and push images to registry) -> triger -> docker(docker run container)
1. 创建docker项目并做相应配置
[root@server2 registry]# usermod -s /bin/bash jenkins
[root@server2 registry]# su - jenkins
-bash-4.2$ docker ps
-bash-4.2$ docker images
-bash-4.2$ docker run -d --name demo -p 80:80 localhost:5000/webserver
465f63366420d25b7e2a65a469ae05bcd44d9bfb96cedab88427c6f7d36b659b
-bash-4.2$ docker ps
-bash-4.2$ curl localhost
www.westos.org
www.westos.org
www.westos.org
www.westos.org
-bash-4.2$ docker rm -f demo
demo
-bash-4.2$ docker ps
2. 手动触发docker项目并查看控制台输出
3. 本地查看是否有容器启动
三、在远程环境构建
上面的实验我们最终都是在本地jenkins服务器上完成了构建,比如镜像构建、容器启动,这些都在jenkins服务器上,这样会造成本地压力过大并且没什么意义,在生产环境中是不可取的,常常需要在远程主机上执行任务.
开启新的节点,安装docker并作相应配置
[root@server2 sysctl.d]# docker rm -f webserver
webserver
[root@foundation yum.repos.d]# scp docker-ce.repo 192.168.0.3:/etc/yum.repos.d/
[root@server2 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
[root@server3 yum.repos.d]# yum install -y docker-ce
[root@server3 yum.repos.d]# sysctl --system #使内核参数生效
[root@server3 yum.repos.d]# systemctl enable --now docker #启动docker
[root@server3 yum.repos.d]# cd /etc/docker/
[root@server3 docker]# ls
key.json
[root@server3 docker]# vim daemon.json
[root@server3 docker]# systemctl reload docker #使之生效
[root@server3 docker]# docker info
[root@server3 docker]# docker pull 192.168.0.2:5000/webserver:latest
[root@server3 docker]# docker rmi 192.168.0.2:5000/webserver:latest
设置镜像拉取镜像
配置已生效,可以从server2的docker仓库中拉取
删除已拉取的镜像,在jenkins自动在远程主机上构建
jenkins中安装ssh插件用作远程交付
在jenkins中配置安全许可凭证,以用户密码的方式添加,指定远程主机和端口(22)
更改jenkins中创建的docker项目的构建条件
查看server2上是否创建了新的镜像。server3上是否启动了新的容器,并使用curl localhost测试,看是否能看到修改后的测试页面
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
Dockerfile index.html README.md
[root@server1 demo]# vim index.html
[root@server1 demo]# git commit -a -m "v5"
[root@server1 demo]# git push -u origin master
server1将更改提交上传到gitlab仓库
server2上构建了最新的镜像
访问到更改后的测试页内容,镜像启动了容器,构建成功。