• 为什么学习Docker:
  • 环境不一致
  • 隔离性
  • 弹性伸缩
  • 安装软件的成本多高
  • Docker的仓库,镜像,容器
  • 仓库是存放镜像的
  • 镜像是用户封装的运行环境,软件等
  • 运行起来的镜像就是容器
  • 配置Docker仓库
  • 修改/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信息

ctr push镜像 镜像cd_docker


ctr push镜像 镜像cd_Docker_02


通过Gitlab查看到当前绑定的信息

ctr push镜像 镜像cd_git_03


每次提交,都保证打包并发布代码

ctr push镜像 镜像cd_git_04

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@”
  • 默认,公钥和私钥生成在用户目录下的.ssh隐藏目录下:cd ~
  • 将生成的公钥复制给gitlab一份
  • 需要在jenkins的容器内部,手动拉取一次仓库内容:git clone git@10.9.63.167:root/testcd.git,并手动输入yes