目 录CONTENT

文章目录

Golang 部署 web 项目

Sakura
2023-12-03 / 0 评论 / 0 点赞 / 30 阅读 / 3156 字 / 正在检测是否收录...

Golang 部署 web 项目

首先使用 gin 编写一个 WebDemo

func main() {
	r := gin.Default()

	r.GET("/", func(context *gin.Context) {
		context.String(http.StatusOK, "Hello,Sakura")
	})

	r.Run(":9999")
}
# 在window系统打linux的包
go env -w set CGO_ENABLED=0  
go env -w set GOOS=linux  
go env -w set GOARCH=amd64
go build WebDemo . 
# 可以将这几条命令写入为bat文件或者sh文件  

在 linux 上运行成功

1. Docker 部署 go web 程序

1.1 基于 golang:alpine 构建

本质上就是在 docker 中编译再运行

  1. 编写 DockerFile 文件

# 指定基础镜像
FROM golang:alpine

# 环境变量
ENV GOPROXY https://goproxy.cn,direct

# 创建目录
RUN mkdir /app

# 将源码复制到app目录
ADD . /app/

# 切换工作目录
WORKDIR /app

# 将代码编译为二级制文件
RUN go build -o web .

# 声明服务端口
EXPOSE 9999

# 启动容器自动运行go程序
CMD ["./web"]
  1. 使用 Docker build 构建镜像

# . 表示当前目录下的Dockerfile文件
docker build -t web .
# -f 可以指定文件
  1. 使用docker images查看镜像

可以看出构建的镜像非常大,是因为指定的基础镜像为 golang:alpine,此镜像包含 golang 开发环境

  1. 基于该镜像启动容器

root@VM-8-13-debian:~/Go_WorkSpace/DemoWeb# docker run -p 9999:9999 web
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :9999

1.2 基于空镜像构建

busybox能做什么? - 知乎 (zhihu.com)

# 指定基础镜像
FROM busybox

# 将编译后的文件复制到app目录
ADD web /

# 启动容器时运行的命令
CMD ["./web"]

可以看出两者的大小区别

0

评论区