Docker 部署二进制
在搜索引擎中,搜索了一下如何部署一个 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 的部署方案真的太方便了,即使只是自己使用云服务器搭设一个博客也应该好好学习