在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"] = "astaxie@gmail.com"
	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文件夹中可以看到刚才上传的图片啦

至此,大功告成!

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐