Docker container to do cross compilation (Linux, windows, macOS, ARM, ARM64) of go packages including support for cgo.
- golang-cross
docker pull ghcr.io/gythialy/golang-cross:latest
- golang-cross-builder
docker pull ghcr.io/gythialy/golang-cross-builder:v1.22.0-0-bullseye docker pull ghcr.io/gythialy/golang-cross-builder:v1.17.1
-
Build base image (optional)
docker build -f Dockerfile_builder -t ghcr.io/gythialy/golang-cross-builder:v1.17.1 . # if running docker on M1 (arm64) macOS: docker build --platform linux/amd64 -f Dockerfile.builder -t ghcr.io/gythialy/golang-cross-builder:v1.18 .
Note: Pack the SDK first or use GitHub Action
-
Build golang-cross image
docker build --build-arg GO_VERSION=1.22.0 \ --build-arg OS_CODENAME=bullseye \ --build-arg GOLANG_DIST_SHA=542e936b19542e62679766194364f45141fde55169db2d8d01046555ca9eb4b8 \ --build-arg GORELEASER_VERSION=1.24.0 \ --build-arg GORELEASER_SHA=4b7d2f1e59ead8047fcef795d66236ff6f8cfe7302c1ff8fb31bd360a3c6f32e \ -f Dockerfile \ -t ghcr.io/gythialy/golang-cross:latest .
Override default arguments with
--build-arg
-
Prepare GoReleaser configuration
-
Set up GPG signing (optional), if enable the signing feature
export PRIVATE_KEY=$(cat ~/private_key.gpg | base64)
-
Build the binaries:
export GO_BUILDER_VERSION=v1.17.1; docker run --rm --privileged \ -e PRIVATE_KEY=$(PRIVATE_KEY) \ -v $(CURDIR):/golang-cross-example \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(GOPATH)/src:/go/src \ -w /golang-cross-example \ ghcr.io/gythialy/golang-cross:$(GO_BUILDER_VERSION) --snapshot --rm-dist