go 1.25
Runtime · Language runtime · standard · v1.25
Hardened Go toolchain for builds; pair with a minimal base for the runtime. Latest 3 stable (1.24/1.25/1.26).
Version line
The latest line lives at the base page; older lines have their own page so you can pin and verify exactly that version.
Use it as a base image
Reference it in the FROM line of your Dockerfile. Nonroot, read-only
root filesystem, built for amd64 and arm64.
FROM ghcr.io/quenchworks/images/go:1.25 Or pull it directly
docker pull ghcr.io/quenchworks/images/go:1.25 - Version line
- 1.25
- Latest line
- 1.24, 1.25, 1.26
- Architectures
- amd64, arm64
- Runs as
- nonroot (uid 1001)
- Root filesystem
- read-only
- License
- BSD-3-Clause
Verify the supply chain
This image is cosign-signed and carries an SPDX SBOM and a SLSA build-provenance attestation on the same digest. Check all three before you build on it:
# 1. signature — built and signed by QuenchWorks CI
cosign verify ghcr.io/quenchworks/images/go:1.25 \
--certificate-identity-regexp 'https://github.com/quenchworks/.+' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
# 2. SLSA build provenance — which workflow built it, from what
gh attestation verify oci://ghcr.io/quenchworks/images/go:1.25 --owner quenchworks
# 3. SPDX SBOM — the package inventory
gh attestation verify oci://ghcr.io/quenchworks/images/go:1.25 --owner quenchworks \
--predicate-type https://spdx.dev/Document See the SBOM & provenance guide for reading the SBOM and using these checks in CI.
Best-practice Dockerfile for 1.25
The classic two-stage Go build: compile a fully static binary with CGO disabled on the go image, then copy that one file onto the tiny static base. No toolchain, no shell, no package manager in the final image.
# Build stage: compile a fully static binary.FROM ghcr.io/quenchworks/images/go:1.25 AS buildUSER rootWORKDIR /src# CGO off makes the binary static; caches go to /tmp for the read-only rootfs.ENV CGO_ENABLED=0 \ GOOS=linux \ GOCACHE=/tmp/gocache \ GOMODCACHE=/tmp/gomodcache
COPY go.mod go.sum ./RUN ["go", "mod", "download"]COPY . .RUN ["go", "build", "-trimpath", "-ldflags=-s -w", "-o", "/out/app", "./cmd/app"]
# Runtime stage: just the binary on the tiny static base, nonroot.FROM ghcr.io/quenchworks/images/staticCOPY --from=build /out/app /appUSER 1001EXPOSE 8080ENTRYPOINT ["/app"]This Dockerfile is pinned to the 1.25 line. For the line-by-line walkthrough and ecosystem variants (npm/Yarn, pip/uv/Poetry, Maven/Gradle), see the Build a Go or Rust binary guide.
Upstream project: https://github.com/golang/go