# ============================================================================= # Multi-stage Dockerfile Example # ============================================================================= # This is a simple Dockerfile that will build an image of scratch-base image. # Usage: # docker build -t simple:local . && docker run --rm simple:local # ============================================================================= # ----------------------------------------------------------------------------- # Build Stage # ----------------------------------------------------------------------------- FROM golang:alpine3.18 AS build # Important: # Because this is a CGO enabled package, you are required to set it as 1. ENV CGO_ENABLED=1 RUN apk add --no-cache \ # Important: required for go-sqlite3 gcc \ # Required for Alpine musl-dev WORKDIR /workspace COPY . /workspace/ RUN \ cd _example/simple && \ go mod init github.com/mattn/sample && \ go mod edit -replace=github.com/mattn/go-sqlite3=../.. && \ go mod tidy && \ go install -ldflags='-s -w -extldflags "-static"' ./simple.go RUN \ # Smoke test set -o pipefail; \ /go/bin/simple | grep 99\ こんにちは世界099 # ----------------------------------------------------------------------------- # Main Stage # ----------------------------------------------------------------------------- FROM scratch COPY --from=build /go/bin/simple /usr/local/bin/simple ENTRYPOINT [ "/usr/local/bin/simple" ]