1. 程式人生 > >docker 執行一個二進位制檔案(部署go web)

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 "[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
在這裡插入圖片描述

接著訪問瀏覽器

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的部署方案真的太方便了,即使只是自己使用雲伺服器搭設一個部落格也應該好好學習