「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」
前言
Gin框架的容器话部署并不像前端那样上传静态文件重启Nginx容器就可以生效了,我们需要把在代码在运行环境打包,把代码直接放到镜像里面,然后替换正在运行的镜像。
预先操作
我们部署的环境是树莓派,是arm架构,docker拉取镜像的时候会自动判断系统环境,镜像会对应系统,不会出现问题,但是我们先要把项目拉取到树莓派,进入项目进行打包镜像,运行容器,这样做的目的就是为了再进行CI的时候就会有事先运行的容器进行操作,不会报错。
使用Xshell连接内网的树莓派 使用git clone *****克隆镜像:
使用一下几条进入项目文件夹,进行打包镜像,运行容器:
cd my-gin-web/
docker build -t my_gin_web .
docker run -d --name my_gin_web -p 8083:8080 my_gin_web
宿主机的端口改成了8083,因为有其他的容器占用了宿主机的目录。
CI文件编写
这个的项目也分成两个分支一个develop分支,一个master分支,代码只在master分支的时候触发部署任务。
在项目根目录新建gitlab-ci.yaml输入一下内容:
stages:
- deploy #任务阶段顺序,只写了一个deploy部署阶段
build_master:
stage: deploy #任务阶段
script:
- docker build -t my_gin_web:$CI_JOB_ID . # CI_JOB_ID是一个环境变量,runner任务ID,可以看做成一个数据库的自增ID,每触发一个任务Id加一
- docker stop my_gin_web
- docker rm my_gin_web
- docker run -d --name my_gin_web -p 8083:8080 my_gin_web:$CI_JOB_ID
only:
- master # 指定只在master分支执行这个任务。
tags:
- b4master #指定执行任务的runner,安装runner的时候会提示填写runner的标签(tag)
把这个CI脚本提交到Gitlab,然后合并到master分支:看看CI/CD菜单看看任务执行具体内容:
总结
项目部署成功,三分钟任务完成部署,docker 启动的时候会有几秒的暂停服务,在商业项目更新的时候会使用多个容器采用滚动更新的方式,这里是个人项目就不做了,下一篇使用Docker做一个本地的mysql吧,可以做测试,不用影响线上项目,现在连接的mysql都是线上的数据库~