• devops学习(八) 搭建镜像仓库---jenkins推送镜像


    梳理一下,我们前面是通过jenkins把打好的jar包发送到目标服务器之后构建成镜像去运行的

    因为我们就一台主机没什么感觉,但是当我们测试服务器多起来了,这样的方法就不靠谱了

    现在我们要换一下方法,jenkins打好jar包后不要发送到目标服务器,而是在jenkins本机就把镜像构建好,上传镜像到harbor仓库后再去通知目标服务器去自动拉取镜像部署

    一、部署harbor镜像仓库

    1. //下载地址
    2. https://github.com/goharbor/harbor/tags
    3. //我下载的是
    4. https://github.com/goharbor/harbor/releases/download/v2.3.3/harbor-offline-installer-v2.3.3.tgz
    5. //我包扔服务器上了自取
    6. http://101.43.4.210/harbor-offline-installer-v2.3.3.tgz

    1、 安装

    1. //安装docker-compose工具
    2. curl -L "https://get.daocloud.io/docker/compose/releases/download/v1.25.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    3. chmod +x /usr/local/bin/docker-compose
    4. //我的包在/root目录下,这里切换一下
    5. cd /root
    6. //解压缩,放到我们devops目录下
    7. tar -zxvf harbor-offline-installer-v2.3.3.tgz
    8. //移动到devops目录下
    9. mv /root/harbor /apps/devops_setup/
    10. cd /apps/devops_setup/harbor/
    11. //拷贝模板文件
    12. cp harbor.yml.tmpl harbor.yml

    vi harbor.yml

    1. 5 hostname: 101.43.4.210 //仓库地址
    2. 6
    3. 8 http:
    4. 10 port: 30007 //对外暴露端口
    5. 11
    6. 12 # https related config
    7. 13 #https: //https我们这里不用全都注释掉
    8. 14 # https port for harbor, default is 443
    9. 15 # port: 443
    10. 16 # The path of cert and key files for nginx
    11. 17 # certificate: /your/certificate/path
    12. 18 # private_key: /your/private/key/path
    13. 47 data_volume: /data //仓库数据存储目录,根据自己需求修改
    14. //仓库大多情况下都是独立的一台或多台主从服务器

     部署

    sh install.sh

     

    2、 访问harbor页面

    1. http://101.43.4.210:30007
    2. //默认登陆
    3. admin
    4. Harbor12345

     

     

     3、新增项目

    1. //项目名称
    2. repo

     

    4、配置node节点镜像私有仓库地址

    vi /etc/docker/daemon.json

    "insecure-registries":["101.43.4.210:30007"] //新增

    如果不清楚咋改,就直接把下面的贴进去改ip和端口也能用

    1. {
    2. "exec-opts":["native.cgroupdriver=systemd"],
    3. "registry-mirrors": ["http://hub-mirror.c.163.com",
    4. "https://registry.cn-hangzhou.aliyuncs.com",
    5. "https://registry.docker-cn.com",
    6. "https://mirror.ccs.tencentyun.com",
    7. "https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com",
    8. "http://f1361db2.m.daocloud.io",
    9. "https://l2w9ha4o.mirror.aliyuncs.com"],
    10. "insecure-registries":["101.43.4.210:30007"]
    11. }

     重载服务

    1. systemctl daemon-reload
    2. systemctl restart docker

     

    5、重启harbor仓库

    因为我这里node主机和harbor仓库是同一台主机,重启docker后harbor仓库就登不上了,需要重启下harbor

    1. //切换到harbor目录
    2. cd /apps/devops_setup/harbor/
    3. //重启harbor
    4. docker-compose down -v && docker-compose up -d

     

    6、登陆仓库并上传业务镜像

    1. //登陆仓库
    2. docker login http://101.43.4.210:30007 -uadmin -pHarbor12345
    3. //修改要上传的镜像名称
    4. docker login http://101.43.4.210:30007 -uadmin -pHarbor12345
    5. docker tag mytest:v1.0.1 101.43.4.210:30007/repo/mytest:v1.0.1
    6. docker push 101.43.4.210:30007/repo/mytest:v1.0.1

     

    (っ °Д °;)っ突然发现用的初始镜像略大,不过都到这了,不改了( •̀ ω •́ )y

     

    二、jenkins 主机构建镜像

    我们打算在jenkins本机来完成构建docker镜像的任务,但jenkins本身是容器启动的没有docker命令

    这里我们要了解一个知识点,docker服务在启动后会生成一个套接字文件/var/run/docker.sock 而docker的守护进程(daemon) 默认会去监听这个socket文件

    curl --unix-socket /var/run/docker.sock http://localhost/version

     返回

    {"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"20.10.12","Details":{"ApiVersion":"1.41","Arch":"amd64","BuildTime":"2021-12-13T11:44:05.000000000+00:00","Experimental":"false","GitCommit":"459d0df","GoVersion":"go1.16.12","KernelVersion":"5.4.175-1.el7.elrepo.x86_64","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.4.12","Details":{"GitCommit":"7b11cfaabd73bb80907dd23182b9347b4245eb5d"}},{"Name":"runc","Version":"1.0.2","Details":{"GitCommit":"v1.0.2-0-g52b36a2"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"20.10.12","ApiVersion":"1.41","MinAPIVersion":"1.12","GitCommit":"459d0df","GoVersion":"go1.16.12","Os":"linux","Arch":"amd64","KernelVersion":"5.4.175-1.el7.elrepo.x86_64","BuildTime":"2021-12-13T11:44:05.000000000+00:00"}
    

     我们只要把这个/var/run/docker.sock 和docker命令挂载到pod中就可以去使用docker命令了

    当然因为是直接关联的宿主机上的docker,我们构建完成的镜像会直接存放在宿主机上

     1、准备工作

    1. //指定属主属组
    2. chown root:root /var/run/docker.sock
    3. //其他人为读写权限
    4. chmod o+rw /var/run/docker.sock

    2、更新jenkins yaml文件

    vi /apps/devops_setup/jenkins-dev.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: jenkins
    5. namespace: devops
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: jenkins-init
    10. template:
    11. metadata:
    12. labels:
    13. app: jenkins-init
    14. spec:
    15. dnsPolicy: Default
    16. containers:
    17. - name: jenkins
    18. image: jenkins/jenkins
    19. ports:
    20. - name: http
    21. containerPort: 8080
    22. volumeMounts:
    23. - name: jenkins-home
    24. mountPath: /var/jenkins_home
    25. - name: docker-sock
    26. mountPath: /var/run/docker.sock
    27. - name: docker
    28. mountPath: /usr/bin/docker
    29. - name: docker-json
    30. mountPath: /etc/docker/daemon.json
    31. volumes:
    32. - name: jenkins-home
    33. hostPath:
    34. path: /apps/devops_setup/data/jenkins/data
    35. type: Directory
    36. - name: docker-sock #挂载socket文件
    37. hostPath:
    38. path: /var/run/docker.sock
    39. - name: docker #挂载docker命令文件
    40. hostPath:
    41. path: /usr/bin/docker
    42. - name: docker-json #挂载docker配置文件,用于上传镜像
    43. hostPath:
    44. path: /etc/docker/daemon.json
    45. ---
    46. apiVersion: v1
    47. kind: Service
    48. metadata:
    49. name: jenkins-svc
    50. namespace: devops
    51. spec:
    52. ports:
    53. - port: 8080
    54. targetPort: http
    55. nodePort: 30004
    56. selector:
    57. app: jenkins-init
    58. type: NodePort

    更新

    kubectl apply -f /apps/devops_setup/jenkins-dev.yaml 

     3、验证jenkins中docker是否可用

    上面我们将docker的socket文件、docker命令文件、daemon.json配置文件都挂载进去了,这样一来我们就可以直接在jenkins容器中执行docker命令了

    1. //登陆容器
    2. kubectl -n devops exec -it jenkins-779fc494c4-g6ttz -- bash
    3. //查看镜像
    4. docker images

    三、更新jenkins cd配置

    我们jenkins已经可用使用docker命令了,那么构建操作要做出一些调整

    我们原先构建完成之后是将jar包发过去打镜像,现在我们要改成直接打镜像

     1、清除原先设置的构建后操作

    2、新增构建操作

    我们现在需要在构建的最后一步之后,也就是maven打包之后做镜像构建操作

     

    1. cp ./target/*.jar docker/
    2. docker build -t mytest:$tag docker/
    3. docker login http://101.43.4.210:30007 -uadmin -pHarbor12345
    4. docker tag mytest:$tag 101.43.4.210:30007/repo/mytest:$tag
    5. docker push 101.43.4.210:30007/repo/mytest:$tag

    如上,我们在maven打包之后会让jenkins主机跑上面的shell命令去把镜像推到仓库 ,注意修改自己的仓库地址

     

    3、gitlab新增标签

    假设我们现在版本更新了,重新构建了一个v3.0.0的版本,jenkins会自动帮我们上传镜像了

     

  • 相关阅读:
    网络安全--对称加密
    tamarin运行
    软件提示vcruntime140_1.dll丢失的解决方法,以及丢失的原因总结
    Cesium
    迅为i.MX6ULL开发板nfs服务器的使用
    Pytest+Allure+Anywhere:测试报告生成后本地运行,分享给局域网内其他同事查阅
    112. 路径总和
    什么是方法,什么是方法论:了解自我精进提升的底层逻辑
    操作系统之《PV操作》【知识点+详细解题过程】
    1024程序员节 | 电脑软件:SmartSystemMenu(窗口置顶工具)介绍
  • 原文地址:https://blog.csdn.net/qq_42883074/article/details/126009573