docker 執行一個二進位制檔案(部署go web)
阿新 • • 發佈:2018-11-17
在搜尋引擎中,搜尋了一下如何部署一個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的部署方案真的太方便了,即使只是自己使用雲伺服器搭設一個部落格也應該好好學習