docker----CD(持续交付,持续部署)

  • 为什么学习Docker:

    • 环境不一致
    • 隔离性
    • 弹性伸缩
    • 安装软件的成本多高
  • Docker的仓库,镜像,容器

    • 仓库是存放镜像的
    • 镜像是用户封装的运行环境,软件等
    • 运行起来的镜像就是容器
  • 配置Docker仓库

    • http://hub.daocloud.io
    • 用公司内部的私服
      • 修改/etc/docker/daemon.json
      • 将笔记中的json复制到daemon.json文件中,并且将ip:port修改为真正的ip和端口
      • 重启Docker服务
  • Docker镜像操作

    • 拉取镜像:docker pull 镜像地址
    • 查看镜像:docker images
    • 删除镜像:docker rmi 镜像id / 镜像名:tag
    • 拉取镜像到本地:docker save -o 路径/文件名 镜像id
    • 加载镜像到Docker:docker load -i 文件
    • 修改镜像名称:docker tag 镜像id 镜像名:tag
  • Docker容器操作

    • 启动容器:docker run -d -p 宿主机端口:容器端口 --name 容器名 镜像id
    • 查看容器日志:docker logs [-f] 容器名称 / 容器Id
    • 进入容器内部:docker exec -it 容器名称 / 容器id bash/sh
    • 查看正在运行的容器:docker ps [-q -a]
    • 启动/停止/重启/删除容器:docker start/stop/restart/rm 容器名称 / 容器Id / $(docker ps -qa)
  • Docker数据卷

    • 让宿主机的一个目录映射到容器内部的一个目录,数据会相互同步
    • docker run -v 数据卷名称:容器内部目录
    • docker run -v 绝对路径:容器内部目录
  • Docker的自定义镜像

    • 创建Dockerfile文件
      • FROM 基础镜像的路径
      • COPY 文件 镜像的目录
      • WORKDIR 工作目录
      • RUN 执行的命令
      • CMD 执行的命令
    • docker build -t 新镜像名称:tag Dockerfile所在路径
  • docker-compose

    • 安装docker-compose:

      • 将docker-compose文件复制到/usr/bin
      • 将docker-compose赋予可执行权限
    • 创建docker-compose.yml

      • yml文件是通过key: value设置属性信息,不要使用制表符,使用空格
      • version: "3.1"
        services: 
          mysql:
            restart: always
            image: 镜像地址
            container_name: 容器名称
            ports:
              - 3306:3306
            environment:
              MYSQL_ROOT_PASSWORD: root
              TZ: Asia/Shanghai
            volumes:
              - 相对路径:容器路径
            command:
              --lower_case_table_names=1
        
    • 通过docker-compose启动容器

      • 在docker-compose.yml所在目录执行以下命令
      • 根据yml文件启动容器:docker-compose up -d
      • 查看启动容器的日志:docker-compose logs -f
      • 停止并删除容器:docker-compose down
      • 启动/停止/重启:docker-compose start/stop/restart
    • docker-compose整合Dockerfile构建自定义镜像并启动

      • docker-compose.yml
        version: “3.1”
        services:
        mysql:
        build:
        context: Dockerfile所在目录
        dockerfile: Dockerfile文件名称
        image: 新镜像名称:tag

          mysql1:   
            build: Dockerfile所在目录
            image: 新镜像名称:tag 
        
      • 构建并启动镜像:docker-compose up -d --build

      一.CI(持续集成)

      1.1CI介绍和基本安装

  • 在公司开发项目时,如果完成了N个功能之后,再去类生产环境中去测试时,能会产生大量的问题,并且代码可能会偏离主干。

  • 可以使用CI持久集成,每完成一个小功能,就立即将程序打包,部署到类生产环境中,并测试功能,帮助咱们快速定位问题,防止功能代码偏离主干。

  • CI:将工作区的代码托送到远程的gitlab仓库后,gitlab-runner工具会感知到代码被修改,立即根据代码中的一个文件中的要求,将程序打包部署,并通过docker启动起来。

  • 安装gitlab-runner:

    • gitlab-runner基础功能,可以和gitlab绑定到一起,再gitlab代码被修改时,会拉取代码
    • 可以将拉取到的代码进行打包,需要安装JDK,MAVEN并配置环境变量
    • 通过Docker将war包/jar包进行部署运行,需要安装Docker以及docker-compose,并且配置私服仓库
  • 为了保证gitlab-runner容器内部,可以调用宿主机的docker运行容器:

    • 修改宿主机docker.sock文件的拥有者:chown root:root /var/run/docker.sock
    • 重新启动并构建gitlab-runner容器:docker-compose up -d --build
    • 修改容器内部用户信息:docker exec -it gitlab-runner usermod -aG root gitlab-runner

1.2Gitlab和Gitlab-Runner绑定

通过gitlab-runner执行绑定的命令:docker exec -it gitlab-runner gitlab-runner register
通过Gitlab创建仓库,并且获取到gitlab信息

在这里插入图片描述
在这里插入图片描述
通过Gitlab查看到当前绑定的信息
在这里插入图片描述
每次提交,都保证打包并发布代码
在这里插入图片描述

1.3测试CI的基础功能

  • 在IDEA中创建Maven工程。

  • 添加.gitlab-ci.yml:
    stages:
    - test

    test:
      stage: test
      script:
        - echo xxxxxx
    
  • 将代码推送到Gitlab仓库中

  • 在Gitlab中查看CI执行的脚本命令
    在这里插入图片描述

1.4测试完整CI功能

  • 完整的CI就是将项目提交到Git仓库后,由CI服务器对项目进行打包,并且将war包部署到tomcat服务中
  • 在项目中创建Dockerfile和docker-compose.yml文件(放在同一目录下)
    • Dockerfile:
    • FROM 10.9.12.254:5000/tomcat:8.5.15
      COPY target/testci-1.0-SNAPSHOT.war /usr/local/tomcat/webapps
      
    • docker-compose.yml:
    • version: '3.1'
      services:
        testci:
          build: ./
          image: testci:1.0
          container_name: testci
          ports:
            - 8888:8080
      
  • 编写.gitlab-ci.yml文件,保证CI服务器可以正常的将项目打包,并运行
    • .gitlab-ci.yml:
    • stages:
        - test
      
      test:
        stage: test
        script:
          - echo this is my first CI!                     # 测试
          - /usr/local/maven/apache-maven-3.6.3/bin/mvn package   # 将项目打包
          - docker-compose down								# 先关闭容器
          - docker-compose up -d --build						# 重新构建镜像,并启动容器
          - docker rmi $(docker images -qf dangling=true)        # 删除名字为none的镜像
      
  • 将工程push到Gitlab仓库,可以查看CICD中的流水线操作。
  • 在Gitlab-Runner的宿主机上,通过docker ps查看容器是否正在运行。
  • 通过浏览器去访问。
    在这里插入图片描述

二、CD(持续交付,持续部署)

2.1 CD介绍和Jenkins安装

  • 代码在经过测试人员的专业测试后,需要经代码打标签,将代码发布到真正的生产环境。
  • 可以使用CD服务对将代码部署的生产环境的操作自动化。
  • 安装查看今日资料中的教案。

2.2 Jenkins实现免密码登录gitlab

  • 进入Jenkins容器内部:docker exec -it jenkins bash
  • 生成公钥和私钥:ssh-keygen -t rsa -C “40224242424@qq.com”
  • 默认,公钥和私钥生成在用户目录下的.ssh隐藏目录下:cd ~
  • 将生成的公钥复制给gitlab一份
  • 在这里插入图片描述
    需要在jenkins的容器内部,手动拉取一次仓库内容:git clone git@10.9.63.167:root/testcd.git,并手动输入yes
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页