基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库
〇、前言
在云服务时代最流行的部署方式就是容器部署,这也是最推荐的部署方式。
对于 GoFrame 框架就不多介绍了,直接来初始化一个 demo,备用。
// 初始化一个项目:gf-demo
gf init gf-demo -u
// -u 参数,是否将现有 goframe 框架更新为最新版本
// 进入项目文件夹,并执行 main.go
cd gf-demo && gf run main.go
// 输入如下两地址其一,查看服务
http://127.0.0.1:8000/swagger
http://127.0.0.1:8000/api.json
一、关于 Dockerfile 文件
1.1 Dockerfile 文件内容
初始化得到 gf 项目后,在路径 gf-demo/manifest/docker 下,会自动生成一个 Dockerfile 文件。
文件内容和详解如下:
# 这行指定了基础镜像为 loads/alpine:3.8,即 Alpine Linux 3.8版本
FROM loads/alpine:3.8
###############################################################################
# INSTALLATION
###############################################################################
# 设置环境变量 WORKDIR 为 /app,这将作为后续命令的工作目录,同时也方便重复引用
ENV WORKDIR /app
# 将名为 resource 的文件或文件夹复制到工作目录 /app 下
# resource 通常用于存放静态资源文件,例如图片、CSS 样式表、JavaScript 脚本等
# 这些资源文件可以被应用程序直接访问和使用
ADD resource $WORKDIR/
# 将当前目录下的 temp/linux_amd64/main 文件复制到工作目录 /app 下的 main 文件
# 这个文件通常是编译后的二进制可执行文件,用于在 Linux 操作系统上运行
# 这个文件包含了程序的所有代码和依赖库,可以直接执行而无需额外的源代码或依赖项
ADD ./temp/linux_amd64/main $WORKDIR/main
# 修改工作目录 /app 下的 main 文件,使其具有可执行权限
# chmod 是用于更改文件或目录的权限的命令
# +x 是 chmod 命令的一个选项,表示给文件添加可执行权限,这意味着用户、组和其他用户都可以执行该文件
RUN chmod +x $WORKDIR/main
###############################################################################
# START
###############################################################################
# 设置工作目录为之前定义的 WORKDIR 环境变量的值,即 /app
WORKDIR $WORKDIR
# 设置容器启动时默认执行的命令为运行工作目录下的 main 文件
CMD ./main
注:关于 Dockerfile 文件的语法解析详见之前文章:https://www.cnblogs.com/hnzhengfy/p/18334471/Docker_Harbor#_label1_1
Golang 的运行环境推荐使用 alpine 基础系统镜像,编译出的容器镜像约为 20MB 左右。
1.2 关于基础镜像 loads/alpine:3.8
其作用是在构建 Docker 镜像时提供一个轻量级、安全且易于维护的基础环境。
国内的用户推荐使用该基础镜像,基础镜像的 Dockerfile 地址:https://github.com/gqcn/dockerfiles ,仓库地址:https://hub.docker.com/u/loads。
Alpine Linux 是一个基于 musl libc 和 busybox 的轻量级 Linux 发行版,它的目标是提供一个小而简单的操作系统,适用于容器化部署。Alpine Linux 的特点是其包管理系统 apk 非常小且简单,只包含必要的软件包,从而减少了系统的复杂性和潜在的安全风险。
轻量级:Alpine Linux 镜像通常比传统的 Linux 发行版(如 Ubuntu 或 CentOS)更小,这使得镜像下载和部署更快,占用更少的资源。
安全性:由于 Alpine Linux 只包含必要的软件包,因此减少了潜在的安全漏洞和攻击面。此外,Alpine Linux 还定期更新以修复已知的安全漏洞。
易于维护:Alpine Linux 的软件包管理工具 apk 非常简单易用,可以轻松地安装、升级和管理软件包。这使得在 Docker 镜像中进行依赖管理和软件安装变得更加容易。
兼容性:Alpine Linux 支持多种架构,包括 x86、ARM 等,这使得它可以在不同的硬件平台上运行。
二、自动化上传 Harbor 脚本
自动化脚本文件后缀名 .sh,例如:docker.sh,可直接鼠标双击执行。执行文件夹需在项目根目录,即和 main.go 同级。
如下代码,从打包到上传的整个流程脚本:
注:在 Windows 上生成镜像,需要安装 Docker ,安装流程详见博主之前的文章:https://www.cnblogs.com/hnzhengfy/p/18334471/Docker_Harbor#_label2_0
# read 是一个 shell 命令,用于读取用户输入信息
# -p 是一个选项,标识提示信息,直接将其后的 "version:" 输出到命令行
# 最后一个 version 标识变量名,用户输入的信息存入此变量
read -p "version:" version
# echo 是一个常用的 shell 命令,用于在终端上输出文本或变量的值
# 如下输出一串文本,$version 表示上一步输入的 version 版本号的值
echo "build start, version:$version"
echo "1) gf build running..."
# 使用 gf 工具构建名为 main 的 Go 程序,生成 amd64 架构的 Linux 可执行文件,并将结果存放在 temp 目录下
# main.go:指定要编译的 Go 源代码文件
# -n main:指定生成的可执行文件的名称为 main
# -a amd64:指定目标架构为 amd64(即 64 位 Intel 架构)
# -s linux:指定目标操作系统为 Linux
# -p ./temp:指定输出目录为当前目录下的 temp 文件夹
gf build main.go -n main -a amd64 -s linux -p ./temp
echo "2) docker build running..."
# 使用 Dockerfile 构建一个名为 test/test-demo 的镜像,并使用用户输入的版本号作为标签
# 【-t test/test-demo:"$version"】指定要创建的镜像的名称和标签
# 【-f ./manifest/docker/Dockerfile】指定用于构建镜像的 Dockerfile 文件路径
# 【.】指定 Docker 构建上下文的路径。一个点表示,使用当前目录作为构建上下文
docker build -t test/test-demo:"$version" -f ./manifest/docker/Dockerfile .
echo "3) docker tag running..."
# 为刚刚构建的镜像添加一个新的标签,将其对应到 harbor.xxxxx.com 仓库,准备推送
docker tag test/test-demo:"$version" harbor.xxxxx.com/test/test-demo:"$version"
echo "4) docker pushing..."
# 将带有新标签的镜像推送到远程仓库
docker push harbor.xxxxx.com/test/test-demo:"$version"
echo "done!"
# 退出脚本,返回状态码 0,标识执行完成。这个值可以被调用脚本的父进程捕获,用于判断脚本执行的成功与否
exit 0
输入版本号:

执行后续脚本:

脚本执行完成后,在 Harbor 远程仓库查看是否上传成功:


基于 GoFrame 框架的 Go 项目打包成镜像,并上传至 Harbor 镜像库的更多相关文章
- 【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)
写在前面 最近,在研究如何使用Maven将SpringBoot项目打包成Docker镜像并发布到Harbor仓库,网上翻阅了很多博客和资料,发现大部分都是在复制粘贴别人的东西,没有经过实践的检验,根本 ...
- springboot 项目打包部署后设置上传文件访问的绝对路径
1.设置绝对路径 application.properties的配置 #静态资源对外暴露的访问路径 file.staticAccessPath=/upload/** #文件上传目录(注意Linux和W ...
- SpringBoot项目打包成jar后,启动脚本
将springboot项目打包成jar后,上传至服务器,每次都需要手敲命令,重新部署项目,可将这些命令写入脚本中,直接运行. 启动脚本(start.sh): CUR_PATH=$(cd "$ ...
- 将 java 项目打包成可运行的 jar 包(main 函数带参数),并上传到 linux 服务器上运行
一.概述 java项目有两种架构,一种是 B/S 架构的,一种是 C/S 架构的. 对于 B/S 架构来说,我们常见的 java ee 即是 B/S 架构,通常,开发人员会在本地进行开发,然后将项目打 ...
- Eclipse中将含有图片资源的项目打包成jar文件
前言: 最近学了GUI编程和UDP协议,心血来潮想做一个局域网内的聊天软件,前期都还算顺利,直到后来将整个项目打包成jar文件时遇到了困难.如图: 自己设置的图标不见了,但是也没有默认的图标,说明图片 ...
- 将项目打包成jar,如何又将jar还原成项目
一.将项目打包成jar 第一步: 选择项目,鼠标右键,选择export ,出现如下 接下来就是点击Next,Next,最后点击Finish 后 会生成jar 二.将jar还原成项目 第一步 用反编译工 ...
- (3)Maven快速入门_3在Eclipse中创建Maven项目打包成jar
Eclipse中创建Maven项目 new ---> maven project ----> next 如下 普通java项目 选择 如下 quickstart 创建项目 : 输入 G ...
- java项目打包成可运行的jar,main方法带参数
转载 原文地址:http://www.cnblogs.com/neillee/p/6063808.html#commentform 将 java 项目打包成可运行的 jar 包(main 函数带参数) ...
- Android Studio将项目打包成apk
Android Studio将项目打包成apk 第一种方法:适合自己调试用. (1)直接在项目中生成: (2)位置是在你的项目中 第二种方法:适合发布应用. (1)找到Generate Signed ...
- 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)
解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...
随机推荐
- IBM Rational Rose Enterprise Edition 2007安装和破解
系统分析设计阶段:建模工具Rose使用比较广泛. 1.解压安装包,并双击setup.exe 2.安装Rose 3.选择Desktop installation from CD image 4.&quo ...
- 诺基亚8110 4G手机强制格式化方法
关机状态下,先按住上键,再按住开机键,出现开机动画时松开开机键,出现硬割界面下键选择第一个wipe用开机键确认yes,再次出现硬格界面,下键选择第二个wipe用开机键确认yes,再次出现硬格界面开机键 ...
- workman和swoole区别和异同
swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同. 先说下swoole的进程模型,看一下以下解析图 mast ...
- js需要同时发起百条接口请求怎么办?--通过Promise实现分批处理接口请求
如何通过 Promise 实现百条接口请求? 实际项目中遇到需要发起上百条Promise接口请求怎么办? 前言 不知你项目中有没有遇到过这样的情况,反正我的实际工作项目中真的遇到了这种玩意,一个接口获 ...
- Linux 手工释放Linux Cache Memory
手工释放Linux Cache Memory 为了加速操作和减少磁盘I/O,内核通常会尽可能多地缓存内存,这部分内存就是Cache Memory(缓存内存).根据设计,包含缓存数据的页面可以按需重新用 ...
- hadoop hive hbase flume sqoop基本操作
top 里的id为cpu空闲度 如果wa为99.8就是负担太重.得停掉一些任务 cat /proc/cpuinfo 查看cpu信息 cat /proc/meminfo 查看内存信息 hadoop基础操 ...
- 对比python学julia(第一章)--(第五节)八十天环游地球
5.1. 问题描述 <八十天环游地球>是法国作家儒勒·凡尔纳创作的一部长篇小说,讲述了这样一个神奇的故事. 在1872年的伦敦,英国绅士福格跟俱乐部的朋友以巨资打赌他能在80天实现环游地 ...
- 【SVN】提交失败报错
SVN提交失败: 最后信息是提示 请输入日志消息,至少需要20个字符,提交终止 问题原因是: 提交的时候不要把提交信息换行来写,SVN只会读取第一行内容 如果消息没有问题还提交失败,可能是文件因为提交 ...
- 【Vue】Vue-Cli 安装
首先需要Node.js环境支持: Node.js官网下载: https://nodejs.org/en/ 右边稳定版,左边最新版 下载安装程序之后双击运行,无脑下一步 打开终端输入版本查看命令: no ...
- 【Vue】08 Webpack Part4 使用Vue
新建一个目录创建Vue项目: cd .. mkdir webpack-vue cd webpack-vue 安装Vue cnpm install vue 保持之前的目录结构: 在Main.js中引用V ...