基于docker容器实现跨平台交叉编译
采用一个Docker基础镜像,打包所有依赖包和环境,就可以在各个平台编译代码,包括c++和golang等。
该方法可以在任何(Linux, macOS和Windows)安装有Docker环境的机器上做到一致性部署。能达到一次编译,到处运行的效果,这一点很像JAVA的虚拟机,有异曲同工之妙。
具体步骤如下:
- 准备一个镜像
FROM golang:1.14.3-stretch
MAINTAINER author <email@xxx.com>
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
wget \
vim \
htop \
curl \
sudo \
git \
net-tools \
tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& rm -rf /var/lib/apt/lists/*
ENV GOBIN=$GOPATH/bin
ENV GO111MODULE=on
ENV GOPROXY= https://goproxy.io ,direct
ENV TZ=Asia/Shanghai
WORKDIR $GOPATH/src/app
-
构建镜像
// 在Dockerfile所处当前目录下,执行
~$ docker build -t gobuilder:1.14.3-stretch . -
编译项目go源码
// 假设你的项目目录gosrc包含以下文件:
/Users/user/Documents/disk_repair_baredisk
|---package
| |---func1.go
| |---func2.go
|---go.mod
|---config.yml
|---main.go// 启动容器
~$ docker run --name repair_new -itd -v /Users/user/Documents/disk_repair_baredisk:/workspace/code compile_env_old:v2.0
// 进入容器,然后编译
docker exec -ti ac0030967b41 /bin/sh
sh-4.2# cd code
sh-4.2# go build
// 编译生成的二进制就在/Users/user/Documents/disk_repair_baredisk

浙公网安备 33010602011771号