Go语言项目打包上线流程

前言:

我们现在有一个很简单的一个项目,只有一个hello路由方法,访问路径是xxx.xxx.xxxx.xxx:8080/hello,访问之后就会打印出来:"hello,test!"

Dockerfile

首先的话就是Dockerfile这个文件,这个文件你可以将其看做是一个脚本文件,里面写的全部都是我们构建项目镜像的指令。我拿一个最简单的也是我们项目中最常用的Dockerfile来说一下吧。

plain 复制代码
#第一步:获取一个包含go编译环境的Linux系统镜像
 FROM golang:1.23-alpine AS builder
 #第二步:在刚刚pull下来的镜像里面基于根目录创建一个app文件夹
 WORKDIR /app #创建并进入到app目录下面
 #第三步:将项目的go.mod 和go.sum 复制到app目录下面
 COPY go.mod go.sum ./ 
 #第三步的等价写法还有:COPY go.mod go.sum . 还有COPY go.mod go.sum /app
 #第四步:下载依赖资源
 RUN go mod download
 #第五步:将本地项目的其它代码全部复制到app目录下面
 COPY . .
 #将go项目文件编译成为可执行的二进制文件
 RUN go build -o xxx-app . #这个.就表明了main.go是在项目的根目录下面的。
 #但是我们的项目一般是放在项目根目录/cmd/xxx/main.go下面的,这是就要写成为
 RUN go build -o xxx-app ./cmd/xxx
 #此时我们已经将我们的项目编译成为一个可执行的二进制文件了
 #我们此时还需要将我们的可执行的二进制文件复制到更小的镜像里面去
 #第五步:构建一个更小的Linux系统镜像
 FROM alpine:latest
 #第六步:创建并进入到app目录下面
 WORKDIR /root
 #将在 golang:1.23-alpine中构建好的可执行的二进制文件复制到改系统镜像里面去
 COPY --from=builder /app/xxx-app /root
 #执行这个可执行的二进制文件
 CMD["./xxx-app"]
 

构建镜像

写好了Dockerfile之后,我们应该如何打包构建项目镜像呢?在本地项目的根目录执行下面docker指令就可以了

plain 复制代码
docker build -f xxxx/Dockerfile -t xxxx-xxx .
# -f xxxx/Dockerfile是你实际Dockerfile存放的地方
#-t就是将镜像的名称命名为xxxx-xxxx 
#后面的 . 就是构建上下文仍然是当前目录(项目根目录)

镜像推送

现在我们在本地已经打包好了项目的镜像:我们需要将我们的镜像推送到我们的要发布的云服务器上面去,现在有两种方法。

第一种方法:

将我们的本地镜像push到DockerHub(和Github一样,就是托管的仓库)上面去,然后我们在我们的云服务器在pull下来就可以了。

plain 复制代码
docker login
# 输入你的 Docker Hub 用户名和密码
# 格式:docker tag 本地镜像名 dockerhub用户名/仓库名:标签
docker tag xxxx-app yourusername/xxxx-app:v1.0
docker push yourusername/xxxx-app:v1.0
#登录云服务器
docker pull yourusrename/xxxx-app:v1.0
第二种方法:

第一种方法是我们标准的推送方法,但是我在实际工作的时候,我们要求我们的镜像信息不对外公开,所以我每次在本地打包之后,还要在本地连接到我们的云服务器,然后将本地打包好的镜像上传到云服务器上去。其实那种方法都可以,主要是将本地的镜像上传到我们要发布的云服务器上面去。

镜像运行

这个的话我们写一个docker run的命令就可以了。

plain 复制代码
docker run -d \
  --name xxx-app-container \
  -p 8080:8080 \
  -v ./logs:/root/logs \
  -v ./config:/root/config \
  --restart unless-stopped \
  yourusername/xxxx-app:v1.0 


  #上面的-v 就是将你项目的日志挂载到宿主机上面对应的文件夹
  #-p就是进行一个端口映射,将容器中的端口映射到宿主机上去
  #--restart unless-stopped 重启策略-除非手动停止否则重启
  #-d 表示容器在后台运行
  #-name 将容器命名为你想要的名称

访问测试

获取你云服务器的公网IP,在防火墙中开放8080端口。然后访问xxxx.xxxx.xxx.xxxx:8080/hello就会有响应信息了。就说明你的项目已经被部署到云服务上去了。

相关推荐
猿究院_夏燊3 小时前
Spring Bean 生命周期
java·后端·spring
Wang's Blog4 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
砚底藏山河4 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年4 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym4 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
DongQiShanRen5 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室5 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
CCblandy5 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
我是人✓5 小时前
SpringBoot项目的五种创建方式
java·spring boot·后端
quantdash_cc5 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash