docker筆記(四、docker部署beego打包後的二進制文件)

在beego工程裏,使用go build可以將該工程打包成一個二進制文件,那麼這個二進制文件在docker裏面該怎麼部署呢?

先寫一個簡單的圖片上傳的demo,名字叫docker_test

在工程目錄裏用命令 bee new docker_test  創建一個beego工程

response.go

package models

type ResponseJson struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data,omitempty"` //tag裏面加上omitempy,可以在序列化的時候忽略0值或者空值
}

route.go

package routers

import (
	"docker_test/controllers"
	"github.com/astaxie/beego"
)

func init() {
    beego.Router("/", &controllers.MainController{})
    beego.Router("/image/upload",&controllers.ImageUploadController{})
}

controller.go

package controllers

import (
	"docker_test/dao"
	"docker_test/models"
	"github.com/astaxie/beego"
)

type MainController struct {
	beego.Controller
}

type ImageUploadController struct {
	beego.Controller
}

func (c *MainController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "[email protected]"
	c.TplName = "index.tpl"
}

func (c *ImageUploadController) Post() {
	var code int
	file, fileHeader, _ := c.GetFile("img")
	beego.Info("收到圖片上傳")
	if file != nil {
		defer file.Close()
		savePath := "static/img/" + fileHeader.Filename		
		beego.Info("保存圖片")
	}
	code = 200
	beego.Info("返回json")
	c.Data["json"] = &models.ResponseJson{Code:code,Msg:"success"}
	c.ServeJSON()
}

其他都默認就好,工程目錄如圖:

打開Terminal界面,在項目的根目錄,使用go build 命令將項目編譯成一個二進制的可執行文件

ok,準備工作做完,這個簡單的工程主要就是上傳一張圖片,並將圖片保存到靜態文件目錄中

下面開始將docker_test這個文件部署到服務器的docker中

1、將項目的conf文件夾、static文件夾、views文件夾以及docker_test文件拷貝到服務器目錄中

    

2、編寫DockerFile文件     

sudo vim DockerFile

 然後開始編輯DockerFile

FROM golang:latest

#創建工作目錄
RUN mkdir -p /go/src/go_test/static/

#進入工作目錄
WORKDIR /go/src/go_test

#將DockerFile文件所在目錄下的所有文件複製到指定位置
COPY . /go/src/go_test

#下載beego、bee以及mysql驅動
#RUN go get github.com/astaxie/beego && go get github.com/beego/bee && go get github.com/go-sql-driver/mysql

#端口
EXPOSE 8080

#CMD ["bee","run"]
#修改docker_test文件的權限
RUN chmod 777 ./docker_test
#執行docker_test文件
ENTRYPOINT ["./docker_test"]

3、開始構建鏡像(在DockerFile文件所在目錄下,注意命令後面有一個小點) 

sudo docker build -f DockerFile -t go_app:1.0 .

這樣就表示鏡像構建完成了,此時可以用docker images命令查看剛纔build的鏡像

4、以go_app爲模板新建鏡像並運行鏡像(注:下面是一條完整的命令)

sudo docker run -it --name mga -p 8080:8080 -v /home/lenovo/docker_test/go_test/static/:/go/src/go_test/static/ 
--privileged=true go_app:1.0

註解:--name mga 構建的新鏡像命名爲mga

           -p 8080:8080 將鏡像內的8080端口映射到宿主機的8080端口

           -v /home/lenovo/docker_test/go_test/static/:/go/src/go_test/static/ 將宿主機的 /home/lenovo/docker_test/go_test/static/目錄對應到容器內的/go/src/go_test/static/目錄,實現數據共享,可以接多個 -v

          --privileged=true Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied,解決辦法:在掛載目錄後多加一個--privileged=true參數即可

          go_app:1.0 爲剛構建的鏡像模板

此時就會新建一個名稱爲mga的鏡像,運行該鏡像並且進入到該鏡像裏面,beego裏面打印的log都可以看到了,如果是想以後臺的方式運行鏡像,則在--name mga後面加上-d就行。

不懂的命令可以參考上一篇文章:docker筆記(一、docker基本命令)

5、驗證

 在瀏覽器輸入http://10.5.11.122:8080/ (這裏是我的服務器的ip,端口是8080),可以看到beego的首頁了

另外用postman執行圖片上傳接口,驗證一下圖片是否共享出來了

此時在服務器的項目目錄的static/img文件夾中可以看到剛纔上傳的圖片啦

至此,大功告成!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章