mac环境用容器编译go项目源码
背景
个人工作中时不时会需要写点linux下的临时用的工具。可是自己本机是mac环境,要想把工具放到线上运行,需要代码提交到git服务器上,然后再在linux上拉取代码,然后再编译。总觉得步骤有点繁琐。
于是想自己在mac上直接编译成linux可执行文件,然后直接拷贝到服务器上运行。
其实3年前自己就干过这样的事情,不过当时自己采用的方法时搞个ubuntu的docker镜像,在这个镜像的基础上搭建go语言编译环境。
然后用这个镜像启动一个容器来运行编译。可惜就是镜像有点大。如今docker hub上有了官方的golang镜像,我们可以直接使用官方的docker镜像来进行编译。
具体如下:
docker pull golang:1.12.6
docker run --rm --env GOPROXY=https://goproxy.cn -v "$PWD":/root -w /root/src/project/main golang:1.12.6 go build -v
简单解释一下上面的命令选项:
--env GOPROXY=https://goproxy.cn
意思为指定环境变量GOPROXY为https://goproxy.cn , 这样go程序在编译前需要下载依赖的话会使用这个环境变量提供的代理服务器。
-v "$PWD":/root
意思为将本地的当前目录挂载到容器的/root目录。
-w /root/src/project/main
指定容器内命令运行时的工作目录为/root/src/project/main
go build -v
在上面的目录中执行go build -v完成编译
编译完成执行可以用file命令查看文件的类型
file /path/filename
/path/filename: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=2ad90da6f737ef4359816087d9b0de7317077cce, not stripped
从上面的结果中就能看到已经编译出了linux下可执行的文件类型