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

相关推荐
岁忧10 分钟前
GoLang五种字符串拼接方式详解
开发语言·爬虫·golang
tyatyatya11 分钟前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
i***132438 分钟前
Spring BOOT 启动参数
java·spring boot·后端
IT_Octopus42 分钟前
(旧)Spring Securit 实现JWT token认证(多平台登录&部分鉴权)
java·后端·spring
kk哥88991 小时前
Spring详解
java·后端·spring
S***26751 小时前
Spring Cloud Gateway 整合Spring Security
java·后端·spring
码事漫谈1 小时前
C++单元测试框架选型与实战速查手册
后端
OneLIMS1 小时前
Windows Server 2022 + IIS + ASP.NET Core 完整可上传大文件的 报错的问题
windows·后端·asp.net
心无旁骛~1 小时前
python多进程和多线程问题
开发语言·python
星云数灵1 小时前
使用Anaconda管理Python环境:安装与验证Pandas、NumPy、Matplotlib
开发语言·python·数据分析·pandas·教程·环境配置·anaconda