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就会有响应信息了。就说明你的项目已经被部署到云服务上去了。

相关推荐
学习编程的Kitty5 小时前
JavaEE初阶——多线程(2)线程的使用
java·开发语言·java-ee
counting money5 小时前
JAVAEE阶段学习指南
java·开发语言
陈随易5 小时前
PaddleOCR-VL可太强了,图片识别转文字的巅峰之作
前端·后端·程序员
Ray665 小时前
Delete vs Truncate vs Drop
后端
oak隔壁找我5 小时前
IntelliJ IDEA 超详细使用教程
后端
用户68545375977695 小时前
🚀 设计一个每秒生成百万ID的分布式ID生成器
后端
是Yu欸5 小时前
【仓颉语言】原生智能、全场景与强安全的设计哲学
开发语言·安全·鸿蒙·鸿蒙系统·仓颉语言
知其然亦知其所以然5 小时前
一次JPA联表查询,竟让我服务器无限循环崩溃?!
java·后端·spring
杨福瑞5 小时前
数据结构:顺序表讲解(1)
c语言·开发语言·数据结构