1. 程式人生 > >Docker之搭建Go Web服務~~

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,介面如下: 

image_1b2pqkpbclm71264fks05118l9.png-51.7kB


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/