用Docker部署Golang Beego框架应用

Docker是什么就不说了。 Golang是什么也不说了。 Beego是什么就更不用说了。

最近Beego项目完成,研究怎么部署。因为Docker部署起来更简单更快速,所以就说下怎么在docker里部署beego应用。

写在前面

假设你的应用路径为 /go/app; 假设已配置好docker的相关东西。 假设使用 godep 作为依赖管理工具 示例中开放端口为80,需要与app.conf中的端口一致,可以自行修改。

配置

在 /go/app 目录新建Dockerfile。

FROM golang:1.7.1-alpine

MAINTAINER youremail <youremail@xxx.com>

RUN apk add --update go git

ADD ./ /go/src/app

RUN cd /go/src/app \
	&& go get github.com/astaxie/beego \
	&& go get github.com/tools/godep \
	&& godep update -goversion \
	&& godep get \
	&& godep save \
	&& go build

EXPOSE 80

EXTRYPOINT /go/src/app/app

本例使用 golang:1.7.1-alpine 作为基础镜像。golang的所有镜像见这里

构建

docker build -t app .

运行

docker run -d -p 8080:80 app

访问

使用nginx反向代理访问docker中的go应用。

server {
    listen       80;
    server_name  app.com;

    charset utf-8;
    access_log  logs/app.access.log;

    location / {
        try_files /_not_exists_ @backend;
    }
    if (!-e $request_filename) {
        return 404;
    }

    location @backend {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host            $http_host;

        proxy_pass http://192.168.99.100:8080; // 192.168.99.100为docker machine的ip,8080为 docker run 时指定的本地端口。
    }
}

相关资料

如何使用Docker快速部署go-web应用程序 Deploying Go servers with Docker 如何使用Docker部署Go Web应用程序 The Easiest Way to Develop with Go — Introducing a Docker Based Go Tool How To Deploy a Go Web Application with Docker nginx 部署