Golang 与 Docker 结合搭建开发与产品运行环境

前话

首先,我们得知道,为什么我们需要使用 Docker 作为开发与产品运行环境:

  • 快速部署(使用 Docker 启动可以无需任何环境变量的配置,无需其他任何依赖)

  • 开发环境与产品环境一致

我们将在该博文中学到什么:

  • 学会编写 Dockerfile 文件来构建能够重新加载改动的代码(无需重新构建容器)的开发容器与构建直接运行服务的产品环境

  • 这次运行环境搭建会用到共享的空间、pilu/fresh 和构建参数

下面我们开始搭建步骤吧~

开始

  1. 启用命令控制台,输入以下内容:
$ mkdir app
$ cd app
$ touch main.go
  1. 然后编辑main.go文件,代码如下:
package main

import (
    "net/http"

    "github.com/labstack/echo"
)

func main() {

    e := echo.New()

    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello World!")
    })

    e.Start("0.0.0.0:3000")

}
  1. 接着在主要项目目录中添加一个 Dockerfile 文件:
$ touch Dockerfile
FROM golang

ARG app_env
ENV APP_ENV $app_env

COPY . /go/src/github.com/pwcong/app
WORKDIR /go/src/github.com/pwcong/app

RUN go get ./
RUN go build

CMD if [ ${APP_ENV} = production ]; \
    then \
    app; \
    else \
    go get github.com/pilu/fresh && \
    fresh; \
    fi

EXPOSE 3000

解释说明:
* FROM golang 表示基于golang镜像构建,改镜像预装了golang运行环境与设置了环境变量GOPATH
* ARG app_env 表示允许通过传入app_env参数动态构建容器(默认为空字符串)
* ENV APP_ENV $app_env 讲构建时传入的app_env值传递给环境变量APP_ENV,该变量通常用于构建容器
* COPY . /go/src/github.com/pwcong/app 将当前本地路径下的所有文件和文件夹拷贝至容器的GOPATH路径下
* WORKDIR /go/src/github.com/pwcong/app 设置工作路径,后面的命令都将在该工作路径中执行
* RUN ... 执行安装依赖等操作
* CMD ... 通过判断arg_env值执行开发或产品运行操作
* EXPOSE 3000 开放3000端口

构建运行

现在我们构建一个开发环境下的容器,执行以下命令:

$ docker build ./

然后执行以下命令运行容器:

docker run -it -p 3000:3000 -v [project path]:/go/src/github.com/pwcong/app [image id]

image id 可通过执行命令 docker images 获得

如果我们要构建产品运行环境的容器,执行以下命令:

$ docker build ./ --build-arg app_env=production

接着执行一下命运启动:

$ docker run -i -t -p 3000:3000 [image id]

后话

全文参考了Medium上大佬的一篇博文。

鉴于是墙外的英文的文章,我就按照自己的理解搬过来了(。・∀・)ノ,有错轻喷ε=ε=ε=┏(゜ロ゜;)┛

你可能感兴趣的:(Golang)