美文网首页Docker容器部署运维k8s那点事儿
『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

作者: IT人故事会 | 来源:发表于2018-09-30 09:41 被阅读11次

    原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
    原文链接地址:『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

    开始想用docker registry做私有镜像库,后来放弃了,知道的老铁应该知道这个玩意没有界面很不爽,后来选择了Harbor,还是通过vagrant 创建一个虚拟服务器,这样下来一共创建3个了,也就在生产环境下估计需要3个以上才可以完成整个的CICD持续化集成。前期的3个要求都是4g双核的,gitlab,gitlabci,Harbor 都是这样要求的。我的电脑i7处理器,16g内存让老铁看看跑起来后的效果。源码:https://github.com/limingios/docker/tree/master/No.11

    通过vagrant 安装

    vagrant reload
    

    下载Harbor

    sudo yum -y install lrzsz
    #在windows下载的1.5.2 online 上传上去
    rz
    
    • 解压harbor
    tar xvf harbor-online-installer-v1.5.2.tgz
    
    • 安装
    cd harbor
    sudo ./install.sh
    
    • 需要换成另外一种安装方法。
    sudo ./prepare
    
    • 真正的安装
    sudo docker-compose up -d
    

    安装成功

    访问机器:172.28.128.6 我是自动获取的ip

    正常访问
    用户名:admin
    密码:Harbor12345
    可以执行如下的命令进行停止和启动

    停止

    sudo docker-compose stop
    

    启动

    sudo docker-compose start
    

    测试harbor

    • 启动服务
    sudo serivce docker restart
    cd harbor
    sudo docker-compose start
    
    • 修改参数

    docker默认是从官方拉取镜像的,并且从1.12版本之后,默认私有仓库是使用https来进行连接,所以我们这里需要进行一些相应的修改:

    sudo vi /etc/docker/daemon.json
    #写入{"insecure-registries":["172.28.128.6"]}
    
     sudo systemctl restart docker  
    

    目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。
    解决方法:在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入

    harbor 就是使用的80端口,根本不就需要在docker-compose.yml 配置什么5000端口。

    #因为没配置http的过滤, 某人是使用https,就拒绝了。
    connect: connection refused
    #配置了上边的insecure-registries
    server gave HTTP response to HTTPS client
    

    最后登录,直接sudo docker login 私服地址不要加什么端口号
    用户名:admin
    密码:Harbor12345

    push 镜像试试

    • 新建用户
    • 新建项目
    #这个错误,就是未建立项目。
    f9d9e4e6e2f0: Preparing 
    denied: requested access to the resource is denied
    
    • push项目
    sudo docker pull busybox
    sudo docker tag busybox 172.28.128.6/idig8/busybox
    sudo docker login 172.28.128.6 -u idig8 -p 123456789
    sudo docker push 172.28.128.6/idig8/busybox
    
    

    终于成功了,前前后后大概怼了3个多小时,从10点对到了凌晨1点。吸口烟,百度里面太多坑爹了,很多人写文章就是直接复制,转载我不知道他到底实践没有,我这边都是边实践帮告诉大家咋用。感觉harbor真的比docker 仓库爽太多了,看到中文的那一刻我感觉我以后必须用这个放弃docker仓库。

    远程连接harbor

    • 查找Docker的服务文件:登录到已经安装Docker的服务器,输入 systemctl status docker 查看Docker的service文件。
    sudo systemctl status docker
    
    • 编辑docker.service文件:在ExecStart处添加 –insecure-registry 参数。
    sudo vi /usr/lib/systemd/system/docker.service
    
    • 重新加载service文件,重启docker服务。
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    • 尝试远程登录
    sudo docker login http://172.28.128.6 -u admin -p Harbor12345
    

    gitlab gitlab-ci harbor

    通过gitlab-ci往harbor上打对应的镜像包

    • 修改 .gitlab-ci.yml

    增加release,当打包的时候执行生成镜像并发送到远程harbor服务器上。
    另外说明下,虽然咱们在crt编辑器连接linux的时候需要前面加上sudo,但是在script脚本的时候,不允许加入sudo,如果加了 就会报错。

    stages:
      - style
      - test
      - deploy
      - release
      
    pep8:
      stage: style
      script:
        - pip install tox
        - tox -e pep8
      tags:
        - python2.7
        
    unittest-py27:
       stage: test
       script:
         - pip install tox
         - tox -e py27
       tags:
         - python2.7
    
    unittest-py34:
       stage: test
       script:
         - pip install tox
         - tox -e py34
       tags:
         - python3/4
         
    docker-deploy:
       stage: deploy
       script:
         - docker build -t flask-demo .
         - if [ $( docker ps -aq --filter name=web) ]; then docker rm -f web;fi
         - docker run -d -p 5000:5000 --name web flask-demo
       tags:
         - test1
       only:
         - master
    docker-image-release:
       stage: release
       script:
         - docker login 172.28.128.6 -u idig8 -p 123456789
         - docker build -t 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG .
         - docker login 172.28.128.6 -u idig8 -p 1qaz@WSX3edc
         - docker push 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG
       tags:
         - test1
       only:
         - tags
    
    

    这个执行后,就会自动进行pipline操作,然后通过merge到master分支

    .

    pipline 执行通过后,可以进行merge到master分支

    合并到master分支,会自动触发pipline,多执行deploy操作

    • 如果我们想已经到master分支了,就光执行tag打包生成镜像怎么搞呢

    看来修改 .gitlab-ci.yml 增加except 在每个任务中。

    stages:
      - style
      - test
      - deploy
      - release
      
    pep8:
      stage: style
      script:
        - pip install tox
        - tox -e pep8
      tags:
        - python2.7
      except:
        - tags
        
    unittest-py27:
       stage: test
       script:
         - pip install tox
         - tox -e py27
       tags:
         - python2.7
       except:
         - tags
    
    unittest-py34:
       stage: test
       script:
         - pip install tox
         - tox -e py34
       tags:
         - python3/4
       except:
         - tags
         
    docker-deploy:
       stage: deploy
       script:
         - docker build -t flask-demo .
         - if [ $( docker ps -aq --filter name=web) ]; then docker rm -f web;fi
         - docker run -d -p 5000:5000 --name web flask-demo
       tags:
         - test1
       only:
         - master
        
    docker-image-release:
       stage: release
       script:
         - docker login 172.28.128.6 -u idig8 -p 123456789
         - docker build -t 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG .
         - docker login 172.28.128.6 -u idig8 -p 1qaz@WSX3edc
         - docker push 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG
       tags:
         - test1
       only:
         - tags
    
    • 新建tag

    New tag

    • 进入harbor看看

    PS:实际上这个例子,就是特定版本的docker image的产生。一个版本的发布代表我们这个软件的稳定的版本的问世,接下来就可以进行对稳定版本的部署,我们对稳定版本的部署,稳定版本的部署具体是docker swarm还是k8s,最重要的是我们已经有了一个docker image,我们可以通过手动,或者自动的升级。update docker image 实现服务的不中断。
    总体言之这几次的流程是:开发代码提交到分支后,分支下进行校验pipline,没有问题,进行deploy的,在deploy测试没有问题,打包tag,形成稳定的dockerimage版本。


    往期精彩
    1. docker导学(一)
    2. 容器的技术概述(二)
    3. docker的魅力初体验-5分钟安装wordpress不走弯路(三)
    4. docker官网介绍(四)
    5. 如何在mac上安装docker(五)
    6. 如何在window上安装docker(六)
    7. 如何在mac上通过vagrant安装虚拟机(七)
    8. 如何在window上通过vagrant安装虚拟机(八)
    9. docker-Machine的本地使用(九)
    10. docker-Machine的本地使用(十)
    11. 在linux/mac下通过Docker-Machine在阿里云上的使用(11)
    12. docker架构和底层技术(12)
    13. docker Image概述(13)
    14. 手动建立一个base Image(14)
    15. 什么是Container(15)
    16. 构建自己的Docker镜像(16)
    17. Dockerfile详解(17)
    18. 镜像的发布(18)
    19. Dockerfile实战(19)
    20. 容器的操作(20)
    21. Dockerfile实战CMD和ENTRTYPOINT的配合(21)
    22. 容器的资源限制(22)
    23. docker网络(23)
    24. docker学习必会网络基础(24)
    25. Linux网络命名空间(25)
    26. Docker Bridge详解(26)
    27. 容器之间的Link(27)
    28. 容器的端口映射(28)
    29. 容器网络之host和none(29)
    30. 多容器复杂应用的部署(30)
    31. overlay网络和etcd实现多机的容器通信(31)
    32. docker的数据持久化存储和数据共享(32)
    33. windows下vagrant 通过SecureCRT连接centos7(33)
    34. 数据持久化之Data Volume(34)
    35. 数据持久化之bind Mounting(35)
    36. docker 使用bind Mounting实战(36)
    37. docker容器安装wordpress(37)
    38. docker Compose到底是什么(38)
    39. Docker Compose的安装和基本使用(39)
    40. Docker 水平扩展和负载均衡(40)
    41. Docker compose 部署一个复杂的应用(41)
    42. 容器编排Docker Swarm介绍(42)
    43. docker-swarm创建一个多节点集群(43)
    44. play with docker 的使用(44)
    45. docker-swarm中的Service创建维护和水平扩展(45)
    46. 在docker-swarm集群里通过serivce部署wordpress(46)
    47. 集群服务间通信之RoutingMesh(47)
    48. RoutingMesh之Ingress负载均衡(48)
    49. Docker-Stack部署wordpress(49)
    50. Docker-Stack部署投票应用(50)
    51. Docker-Secret管理和使用(51)
    52. Docker service更新(52)
    53. Docker的收费模式(53)
    54. Docker-cloud介绍(54)
    55. Docker Cloud自动构建 Docker image(55)
    56. Docker企业版的在线免费体验(56)
    57. docker企业版本地安装之UCP(57)
    58. docker体验阿里云的容器服务(58)
    59. 阿里云安装Docker企业版UCP和DTR(59)
    60. Kubenetes简介(60)
    61. Minikube快速搭建K8S单节点环境(61)
    62. K8S最小调度单位Pod(62)
    63. K8S横向扩展功能ReplicaSet和ReplicationController(63)
    64. k8s重要的Deployment(64)
    65. Vagrant在本地搭建多节点K8S集群(65)
    66. k8s基础网络Cluster Network(66)
    67. k8s的Service简介和演示(67)
    68. k8s的NodePort类型Service以及Label的简单实用(68)
    69. CI/CD持续集成/持续部署(69)
    70. docker之CI/CD持续集成-gitlab安装(70)
    71. docker之CI/CD持续集成—GitLab CI服务器(71)
    72. docker之CI/CD持续集成—真实Python项目的CI演示(72)
    73. docker之CI/CD持续集成—真实JAVA-Maven项目的CI演示(73)
    74. docker之CI/CD持续集成-CD演示(74)
    75. docker之CI/CD持续集成-整个流程串联(75)

    相关文章

      网友评论

        本文标题:『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

        本文链接:https://www.haomeiwen.com/subject/lprvwftx.html