# syntax=docker/dockerfile:1 FROM golang:1.24-alpine AS builder RUN apk add --no-cache git WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . # Build both binaries as static. RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /tunnel-server ./cmd/server/ RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /tunnel-client ./cmd/client/ # --- Server image --- FROM alpine:3.21 AS server RUN apk add --no-cache ca-certificates COPY --from=builder /tunnel-server /usr/local/bin/tunnel-server RUN mkdir -p /keys /etc/traefik/dynamic EXPOSE 2222 EXPOSE 10000-10100 ENTRYPOINT ["tunnel-server"] # --- Client image --- FROM alpine:3.21 AS client RUN apk add --no-cache ca-certificates COPY --from=builder /tunnel-client /usr/local/bin/tunnel-client RUN mkdir -p /keys ENTRYPOINT ["tunnel-client"]