Docker之搭建Go Web服務~~
需求
最近在學習Go語言開發。既然學習了它,必然要接觸Web開發。Go Web開發非常方便,在不使用任何框架的情況下即可快速搭建一個Web Server。既然有現成的框架,那就直接使用吧。
目前市面上比較流行的Go MVC框架有Revel、BeeGo等。最近正好學習了這兩個框架,Revel開發一個框架非常迅速,不夠需要藉助一個revel命令工具。revel命令工具安裝用到了golang.org域名下的package,這個對於國內開發而言,簡直是噩夢(~~!!!)。
最終選用了BeeGo,相對Revel而言自然是安裝簡單。
Without Docker
很顯然,我們不能一上來就在docker上部署BeeGo環境。
首先,我們需要在本地驗證一番,開發環境為Windows 10.
1 安裝GO,不用多說;需要注意的是安裝完之後需要配置GOROOT、GOPATH環境變數。
2 安裝beego。
go get github.com/astaxie/beego
3 編寫程式碼,這個可以使用beego推薦的命令工具,不過多介紹,因為我也沒有試過。我是採用手動建立的方式。檔案結構如下:
beego_server |----src |----|----controller |----|----|----HomeController.go // 具體controller處理 |----|----router |----|----|----Home.go // router定義檔案 |----conf |----|----app.conf // 程式配置,beego框架自動載入 |----main.go // 程式入口
程式入口main.go
package main
import (
_ "beego_server/src/router"
"github.com/astaxie/beego"
)
func main(){
beego.Run()
}
程式配置conf/app.conf
appname = beego_server
httpport = 9092
runmode = "dev"
viewpath = "view"
Controller(HomeController.go)
package controller import ( "github.com/astaxie/beego" ) type HomeController struct { beego.Controller } func (this *HomeController) Get() { this.Ctx.WriteString("Hello") }
Router(Home.go)
package router
import (
"beego_server/src/controller"
"github.com/astaxie/beego"
)
func init(){
beego.Router("/", &controller.HomeController{})
}
4 執行
待一切就緒之後,直接通過go run main.go即可執行一個server。
5 驗證
通過瀏覽器開啟http://localhost:9092,介面如下:
With Docker
既然在本地執行沒有問題,那就開啟docker之旅吧。
1 Dockerfile,在上述工程中新建Dockerfile檔案,檔案內容如下:
FROM golang
RUN mkdir -p /go/src/beego_server
WORKDIR /go/src/beego_server
COPY . /go/src/beego_server
CMD ["go", "run"]
ONBUILD COPY . /go/src/beego_server
ONBUILD RUN go download
ONBUILD RUN go install
RUN go get github.com/astaxie/beego
RUN go get -d -v
RUN go install -v
2 程式碼,將程式碼部署至github,然後通過git下載至本地,
git clone url
3 編譯docker,切換至工程目錄
sudo docker build -t my_beego_server .
4 執行docker
sudo docker run --name my_beego_server -p 9093:9092 -d my_beego_server
如果執行出錯,可以參考下面指令
sudo docker run -it -p 9093:9092 -d my_beego_server go run main.go
這樣就暴露一個9093的埠,並且將9093埠繫結至容器例項的9092埠。這樣通過http://host_id:9093即可訪問。
參考文獻
Beego官方文件: https://beego.me/
Dockerfile: https://docs.docker.com/engine/reference/builder/
Docker Hub 之 Golang: /golang/”>https://hub.docker.com//golang/