在搜索引擎中,搜索了一下如何部署一个go的程序, 发现都是基于golang的镜像部署go源码的方案

而基于golang源码部署 docker image的大小有700MB, 有时候并不需要这么大,我们生成二进制文件后
只需要基于centos来制作image就可以了, 当然如果对于go源码有持续部署的需求,那还是只能使用golang镜像


目录结构

完整的目录结构就这么简单, main是二进制运行文件

main.go

package mainimport "github.com/gin-gonic/gin"func main() {g := gin.Default()g.LoadHTMLGlob("static/*")g.GET("/index", func(c *gin.Context) {c.HTML(200, "index.html", gin.H{"title": "标题",})})g.Run(":80")
}

打包go 二进制运行文件

这里因为我是mac系统,所以我需要交叉编译,具体的交叉编译可以查看我的另一篇交叉文章

cd mainCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

制作镜像

Dockerfile

FROM centos:latestLABEL cjl "cjl_spy@163.com"WORKDIR /rootADD ./main ./main
ADD ./static/ ./static/EXPOSE 80ENTRYPOINT  ["./main"]

FROM 基于centos

LABEL 随便写

WORKDIR 工作目录, 在docker中的目录, 直接使用/root就行了 当然你也可以自己指定

ADD [源文件] [目标文件]

EXPOSE 80 端口号是多少,这里设置80 ,因为我的程序中写的是80

ENTRYPOINT ["./main"] 这个是在运行容器时会执行的命令, 因为假设我在centos中 我开启这服务只需要./main 就够了

打包镜像

在main目录下执行

 docker build -t dockertest .

接着就会根据Dockerfile的内容进行打包,看到sucessful 就说明成功了

测试镜像运行

docker run --name dtest -d -p 8888:80 dockertest

接着访问浏览器

http://localhost:8888/index


通过docker-compose部署

这里需要先移除掉上一个容器,即使不移除也需要先停止运行

docker container rm -f dtest

配置docker-compose.yml

version: "3"
services:go-web:image: dockertestports:- "8888:80"

这里就完成了配置

docker-compose up -d
http://localhost:8888/index

结语

越学习docker 就越觉得docker的部署方案真的太方便了,即使只是自己使用云服务器搭设一个博客也应该好好学习