基于 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 ./tempecho "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 远程仓库查看是否上传成功:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/792327.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatOn安卓版(智能AI聊天机器人) v1.48.435-476 高级版

概述 ChatOn 构建于ChatGPT和GPT-4o之上,为用户提供市场上最优秀的中文AI聊天机器人。AI聊天机器人能够达到一个全新水平的仿人类互动:当你为某一场正式会议准备演讲,苦思动人的措辞,或寻求写作方面的帮助时,这款智能机器人和AI助手都会统统帮你搞定。 软件功能 1、AI 写…

JPEG格式研究——(2)JPEG文件格式

JPEG文件除了图像数据之外,还保存了与图片相关的各种信息,这些信息通过不同类型的TAG存储在文件中。 TAG JPEG通过TAG标记压缩书记之外的信息。所有的TAG都包含一个TAG类型,TAG类型大小为两个字节,位于一个TAG的最前面。TAG类型的第一个字节一定为0xFF 以下是部分常见的TAG…

【python】一篇搞懂多解释器与虚拟环境

一.同一PC上,python同时支持多个版本的解释器共存1.1:安装不同版本python解释器(参考百度资料)# python安装后,解释器目录介绍 C:\python39- python.exe [解释器]-Scripts- pip.exe- pip3.exe- pip3.9.exe- Lib- re.py- random.py 内置模块- site-packages- requests …

LeeCode-104. 二叉树的最大深度

要求给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 如下图所示的二叉树最大深度为5.解题思路与94题类似,采用递归调用遍历子节点。在基本结构中,节点的最大深度等于根深度(1)加上左右较大深度,左右较大的深…

# LeeCode-104. 二叉树的最大深度

要求给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 如下图所示的二叉树最大深度为5.解题思路与94题类似,采用递归调用遍历子节点。在基本结构中,节点的最大深度等于根深度(1)加上左右较大深度,左右较大的深…

遥感技术在环境监测中的应用:揭秘地球变化的天眼

当我们仰望星空,探索宇宙的奥秘时,别忘了脚下的这片土地同样蕴藏着无数未解之谜。遥感技术,这个听起来似乎遥不可及的名字,其实正是我们透视地球环境变化的“天眼”。今天将带大家一探遥感技术如何在环境监测中大显身手,帮助我们更精准地监测和评估这个星球的每一次呼吸与…

c#程序反编译

工具ilspy https://nchc.dl.sourceforge.net/project/ilspy.mirror/v9.0-preview2/ILSpy_binaries_9.0.0.7660-preview2-arm64.zip?viasf=1 visualstudio反编译方法将需要反编译的程序拖入ilspy 选择vs版本导出项目 右键项目→保存代码vs打开项目文件即可添加库方法反编译库,…

LeeCode-94. 二叉树的中序遍历

基本概念二叉树二叉树的结构如上图所示,由一系列左-中-右节点组成的树状数据结构,其基本结构如下所示,由一个中间节点向左右分叉成两个节点,故称二叉树。中序遍历看二叉树基本的结构左-中-右三个节点,中间为Root,左边为Left,右边为Right。按顺序排列的话有C(3,2)=6种,其…

C#自定义控件—仪表盘

C#用户控件之仪表盘 如何让温度、湿度、压力等有量程的监控值如仪表盘(DashBoard)一样显示?思路(GDI绘图): 定义属性:(仪表盘的半径、颜色、间隙;刻度圆的半径、颜色、字体;指针的颜色、占比;文本的字体、占比;) 绘制图形:(半圆、刻度、指针、中心、文本)定义属…

Linkedlist源码详解

介绍 LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不…

创建一个SpringBoot项目,实现简单的CRUD功能和分页查询

背景 本博文主要是创建了一个新的SpringBoot项目,实现基本的增删改查,分页查询,带条件的分页查询功能。是方便初学者学习后端项目的一个比较清晰明了的实践代码,读者可根据博文,从自己动手创建一个新的SpringBoot项目,到使用PostMan测试基本请求,完完全全实践一遍,写出…