基于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

posted @ 2025-08-27 10:21  LdreamerD  阅读(268)  评论(0)    收藏  举报