在搜索引擎中,搜索了一下如何部署一个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 "[email protected]"
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
接着访问浏览器
通过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的部署方案真的太方便了,即使只是自己使用云服务器搭设一个博客也应该好好学习