需求
最近在学习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/