前话
首先,我们得知道,为什么我们需要使用 Docker 作为开发与产品运行环境:
快速部署(使用 Docker 启动可以无需任何环境变量的配置,无需其他任何依赖)
开发环境与产品环境一致
我们将在该博文中学到什么:
学会编写 Dockerfile 文件来构建能够重新加载改动的代码(无需重新构建容器)的开发容器与构建直接运行服务的产品环境
这次运行环境搭建会用到共享的空间、
pilu/fresh
和构建参数
下面我们开始搭建步骤吧~
开始
- 启用命令控制台,输入以下内容:
$ mkdir app
$ cd app
$ touch main.go
- 然后编辑
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")
}
- 接着在主要项目目录中添加一个 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上大佬的一篇博文。
鉴于是墙外的英文的文章,我就按照自己的理解搬过来了(。・∀・)ノ,有错轻喷ε=ε=ε=┏(゜ロ゜;)┛