前言
之前给大家介绍了关于在docker中部署golang项目的相关内容,对大家的入门具有一定的参考价值,本文将会给大家介绍如何使用docker打包一个golang编写的应用程序,最终的产物就是一个Dockerfile文件,可别小瞧这短短几行代码,涉及的知识点可不少,接下来我们就仔细剖析一下吧。
FROM golang:alpineADD src /go/src
RUN go install -v test
ENTRYPOINT ["/go/bin/test"]CMD ["-logtostderr"]
1. 基础镜像选择
第一行是指定一个基础镜像,在此基础上创建我们的镜像,此处使用的是golang:alpine版本,
这是一个相对较小的linux系统,砍掉了linux中的许多工具,包管理工具使用的是apk,可以把这个镜像docker pull下来把玩一番,默认的shell是sh,执行命令
docker run -t-i golang:alpine /bin/sh 进入命令行。进入后执行env查看环境变量,因为其GOPATH这个环境变量对后面的环境部署有用,可以看到环境变量GOPATH默认值为/go2. 映射代码文件并安装
使用 ADD src /go/src 将主机scr文件映射到/go/src目录下,为什么非得是这个/go/src这个目录呐?没错就是上面的GOPATH环境变量的路径,因为我们后面需要执行go install命令进行安装,否则的话就需要重新设置GOPATH才能安装编译后的二进制文件。
需要注意的是:此时本地主机中src目录中文件的组织,要执行
go install就要严格遵循生成包的文件结构,test是程序的主程序,glog是使用的开源日志库,整个文件结构如下,因为在main.go导入包的时候使用的是”github.com/golang/glog”这个路径,所以需要给其一个合理的路径。
.
├── Dockerfile
└── src
├── github.com
│ └── golang
│ └── glog
│ ├── glog_file.go
│ ├── glog.go
│ ├── glog_test.go
│ ├── LICENSE
│ └── README
└── test
└── main.go还有一个小tips是程序的日志库使用的是第三方开源的glog,当我们使用git对我们上述代码进行版本管理的时候就不需要重复包含glog的代码,直接添加一个对其的引用就可以,这样有很多好处,当库中代码被修改后可以直接更新到远程的代码仓库中,在clone的时候可以自动导入该库,也就是说在本地会拉取具体的代码,但是在远程仓库只是保存引用。
可以通过命令生成glog这个子模块:
git submodule add https://github.com/golang/glog.git src/github.com/golang/glog。注意:










