Golang 部署 web 项目

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"]

在这里插入图片描述

可以看出两者的大小区别

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值