Docker通过阿里云镜像仓库使用Gitlab_CI部署SpringBoot项目
Docker、Gitlab、阿里云镜像仓库、SpringBoot的相关安装、搭建这里就不讲了。
Linux 安装 Docker :https://www.cnblogs.com/linnuo/p/15587902.html
使用环境为:
jdk 1.8.0_131
Apache Maven 3.8.1
Docker Version:20.10.6
CentOS Linux release 8.1.1911 (Core)
SpringBoot 2.1.7.RELEASE
一、配置Runner
1、Gitlab 项目的设置 --->CI/CD--->Runer,展开看到 URL 和注册令牌。

2、进入安装好Gitlab-Runner的服务器,开始注册
[linnuo@mt5-product ~]$ sudo gitlab-runner register # 注册指令
Runtime platform arch=amd64 os=linux pid=8551 revision=c1edb478 version=14.0.1
WARNING: Running in user-mode. Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab.bosenkeji.cn/ # Runner 的 URL
Enter the registration token:
2sSYuzj95V5xduf4oJXV # 注册令牌
Enter a description for the runner:
[mt5-product]: robot-shop-prod # Runner 描述
Enter tags for the runner (comma-separated):
robot-shop-prod-tag # tag 名称,描红,要用的
Registering runner... succeeded runner=2sSYuzj9
Enter an executor: docker+machine, docker-ssh+machine, docker, shell, ssh, virtualbox, kubernetes, custom, docker-ssh, parallels:
shell #根据情况选,shell是最简单
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Runner registered successfully. 注册成功,刷新Gitlab页面即可看到刚注册的Runner

3、重启Runner
gitlab-runner restart
如果是灰色三角形提示,先移除Runer,再用 sudo gitlab-runner register 命令注册
二、在阿里云镜像服务创建命名空间、创建镜像仓库


三、程序配置
先看目录不迷糊!!!!

1、pom.xml 在 plugins 节点添加 dockerfile-maven-plugin 配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
</plugin>
2、在根目录创建 .gitlab-ci.yml 文件
# 定义执行阶段 顺序执行
stages:
- client
#定义变量
variables:
CI_REGISTRY: registry.cn-hangzhou.aliyuncs.com # 地址
CI_NAMESPACE: bosen # 命名空间
CI_CLIENT_IMAGE: shop-client-prod # 仓库名称
VERSION: v0.0.1
CI_REGISTRY_CLIENT_IMAGE: ${CI_REGISTRY}/${CI_NAMESPACE}/${CI_CLIENT_IMAGE}:${VERSION}
# 第1步
client:
image: maven:3-jdk-8 # 打个maven镜像
stage: client
only:
- master # 提交到 gitlab 的 master 分支才会执行
script: # 具体的执行脚本
- mvn clean package
# 创建shop-client镜像
- sudo docker build -t $CI_REGISTRY_CLIENT_IMAGE -f ./shop-client/Dockerfile . # 结合目录看
# 推送到阿里云镜像库
- sudo docker push $CI_REGISTRY_CLIENT_IMAGE
# 从阿里云拉取镜像
- sudo docker pull $CI_REGISTRY_CLIENT_IMAGE
# 先把之前存在的容器删除
- CONTAINER_ID=$(sudo docker container ps -a -f "name=$CI_CLIENT_IMAGE" --format {{.ID}})
- echo "previous container id is $CONTAINER_ID"
- if [ -z "$CONTAINER_ID" ]; then echo "没有运行的容器";else sudo docker stop $CONTAINER_ID;sudo docker rm $CONTAINER_ID; fi
# 把之前同名同版本的镜像A删除,否则A标签会变为 <none>
- EXIST_IMAGES=$(sudo docker images -f="dangling=true" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
- if [ -z "$EXIST_IMAGES" ]; then echo "没有冲突镜像";else sudo docker rmi $EXIST_IMAGES; fi
# 获取最新镜像
- IMAGE_ID=$(sudo docker images -f="dangling=false" -f "label=name=$CI_CLIENT_IMAGE" -f "label=version=$VERSION" --format {{.ID}})
- echo "current image id is $IMAGE_ID"
### 重新构建镜像,8181端口是服务器的端口,8080端口是容器的端口,即项目中设置的端口(默认8080)
- sudo docker run -d --name $CI_CLIENT_IMAGE --net=host $IMAGE_ID # --net=host 容器和宿主机同端口
tags:
- robot-shop-prod-tag # 还记得上面标红处么?与其一致
3、在项目目录下创建 Dockerfile 文件
# 基础镜像使用Java
FROM java:8
LABEL name=shop-client-prod
LABEL version=v0.0.1
# 将jar包添加到容器中并更名为
# 注意:这个jar包文件名,在服务器目录查看
COPY /shop-client/target/shop-client-1.0-SNAPSHOT.jar /usr/local/app/shop-client.jar
# 容器暴露端口
EXPOSE 7071
# 这个暂且不用
# COPY target/lib /app/lib
ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","-Dspring.profiles.active=dev","/usr/local/app/shop-client.jar", "&"]
四、检查
1、将代码提交到 git 的 master 分支,进入Gitlab 项目的 CI/CD--->流水线,可以看到执行情况(阶段:详细执行情况,报错看它)

如果提醒端口被占用,请修改 Dockerfile 的 EXPOSE 或者调整宿主机端口
第一次配置的 dev分支 遇到很多坑,写这篇文章时已经是第二次操作,很多问题没体现出来,大神们用这篇文章指引时遇到问题欢迎留言
Docker通过阿里云镜像仓库使用Gitlab_CI部署SpringBoot项目的更多相关文章
- docker使用阿里云镜像仓库
1:阿里云docker仓库 https://dev.aliyun.com/search.html 2:进去注册帐号后,点击自己的管理中心. 3:在管理中心点击加速器,右边面板会有你的加速地址,右边面板 ...
- docker使用阿里云镜像仓库docker
1:阿里云docker仓库 https://dev.aliyun.com/search.html 2:进去注册帐号后,点击自己的管理中心. 3:在管理中心点击加速器,右边面板会有你的加速地址,右边面板 ...
- 通过docker把本地AspNetCore WebAPI镜像打包到阿里云镜像仓库并在centos部署
在centos上安装docker # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data l ...
- 设置阿里云镜像仓库并安装Docker
echo "设置阿里云镜像仓库" mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum ...
- 使用阿里云镜像仓库构建国外 Docker 镜像
使用阿里云镜像仓库下载国外镜像 在日常使用 Docker 或 K8S 的过程中,经常会需要到国外的网站中下载镜像,但是有些网站在国内是无法访问的.对于这个问题可以使用阿里云提供的镜像仓库进行下载,然后 ...
- 两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库
两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...
- Jib插件构建镜像push到阿里云镜像仓库
一.前言 Jib:Google开源的Java容器化工具 可作为插件快速集成到项目中,构建镜像,实现 Java 应用容器化 下面贴出一张从网上看到的Jib描述~ 二.利用Jib插件构建镜像push到阿里 ...
- 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库
编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...
- Ubuntu-16.04下Docker通过阿里云镜像安装(apt-get)
由于通过官方路径安装docker时总是连接不上,所以从网上找了半天,通过阿里云镜像安装docker,我的Linux是ubuntu-16.04 一.配置源里的阿里云镜像仓库 sudo vim /etc/ ...
随机推荐
- Dapr-发布/订阅
前言 前篇文章对Dapr的状态管理进行了解,本篇继续对 订阅/发布 构建块进行了解. 一.定义: 发布订阅的概念来自于事件驱动架构(EDA)的设计思想,这是一种让程序(应用.服务)之间解耦的主要方式, ...
- [bzoj5510]唱跳rap和篮球
显然答案可以理解为有(不是仅有)0对情况-1对情况+2对情况-- 考虑这个怎么计算,先计算这t对情况的位置,有c(n-3t,t)种情况(可以理解为将这4个点缩为1个,然后再从中选t个位置),然后相当于 ...
- [cf1491I]Ruler Of The Zoo
为了统一描述,下面给出题意-- 有$n$只动物,编号为$i$的动物有属性$a_{i,j}$($0\le i<n,0\le j\le 2$) 初始$n$只动物从左到右编号依次为$0,1,...,n ...
- IDEA生成doc文档-生成chm文档
首先,打开IDEA,并找到Tools -> Generate JavaDoc- 可供查询的chm比那些HTML页面好看多了. 如果您用过JDK API的chm文档,那么您一定不会拒绝接受其它第三 ...
- excel的表格数据插入到数据库
看到有excel保存insert的数据,自己照着教程弄了一下,可以的. 表格数据 接下来我们在d3的位置输入 =CONCATENATE("insert into user(code, nam ...
- ant命令
ant -help 帮助(ant -h) ant -projecthelp 列举xml中重要的部分 (ant -p) ant -version 查看版本 ant -diagnostics 打印所有环境 ...
- C++ 编译错误记录
C++ _ZSt28__throw_bad_array_new_lengthv1 编译错误 出现场景:类似代码 vector<vector<int>> grid = {{1, ...
- IT公司都不喜欢招培训班出来的学生,那培训班的意义何在呢?
我一方面做过培训学校的老师,现在上班之余,还在培训学校做兼职老师,另一方面做过大厂和外求的技术面试官,主要是java方向的,应该对这个话题有充分的话语权. 在本文里,就从培训班的作用. ...
- 洛谷 P3285 - [SCOI2014]方伯伯的OJ(平衡树)
洛谷题面传送门 在酒店写的,刚了一整晚终于调出来了-- 首先考虑当 \(n\) 比较小(\(10^5\) 级别)的时候怎么解决,我们考虑将所有用户按排名为关键字建立二叉排序树,我们同时再用一个 map ...
- Docker Hadoop 配置常见错误及解决办法
Docker Hadoop 配置常见错误及解决办法 问题1:wordcount运行卡住,hadoop 任务运行到running job就卡住了 INFO mapreduce.Job: Running ...