docker 运行一个二进制文件(部署go web) - Go语言中文社区

docker 运行一个二进制文件(部署go web)


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

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


目录结构

在这里插入图片描述

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

main.go

package main

import "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 main

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

制作镜像

Dockerfile

FROM centos:latest

LABEL cjl "cjl_spy@163.com"

WORKDIR /root

ADD ./main ./main
ADD ./static/ ./static/

EXPOSE 80

ENTRYPOINT  ["./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: dockertest
    ports:
      - "8888:80"

这里就完成了配置

然后执行 docker-compose up -d

接着在浏览器输入 http://localhost:8888/index
还是和上一步一样,这样就完成了带静态资源的服务器完整部署

结语

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_28478281/article/details/84137836
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢