Add two-stage Dockerfile with CGO support
- Build stage: golang:1.24-alpine with vips-dev for CGO image libs - Runtime stage: alpine:3.21 with vips runtime only - Pass VERSION build arg for ldflags embedding - Add 'make docker' target to build image with git version
This commit is contained in:
parent
467237c849
commit
4b2d85010e
7
.dockerignore
Normal file
7
.dockerignore
Normal file
@ -0,0 +1,7 @@
|
||||
.git
|
||||
.gitignore
|
||||
*.md
|
||||
Dockerfile
|
||||
.dockerignore
|
||||
.env*
|
||||
.claude
|
||||
42
Dockerfile
Normal file
42
Dockerfile
Normal file
@ -0,0 +1,42 @@
|
||||
# Build stage
|
||||
FROM golang:1.24-alpine AS builder
|
||||
|
||||
ARG VERSION=dev
|
||||
|
||||
# Install build dependencies for CGO image libraries
|
||||
RUN apk add --no-cache \
|
||||
build-base \
|
||||
vips-dev \
|
||||
pkgconfig
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
# Copy go mod files first for better layer caching
|
||||
COPY go.mod go.sum ./
|
||||
RUN GOTOOLCHAIN=auto go mod download
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build with CGO enabled
|
||||
RUN CGO_ENABLED=1 GOTOOLCHAIN=auto go build -ldflags "-X main.Version=${VERSION}" -o /pixad ./cmd/pixad
|
||||
|
||||
# Runtime stage
|
||||
FROM alpine:3.21
|
||||
|
||||
# Install runtime dependencies only
|
||||
RUN apk add --no-cache \
|
||||
vips \
|
||||
ca-certificates \
|
||||
tzdata
|
||||
|
||||
# Copy binary from builder
|
||||
COPY --from=builder /pixad /usr/local/bin/pixad
|
||||
|
||||
# Create non-root user
|
||||
RUN adduser -D -H -s /sbin/nologin pixad
|
||||
USER pixad
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/pixad"]
|
||||
10
Makefile
10
Makefile
@ -1,4 +1,4 @@
|
||||
.PHONY: check lint test fmt build clean
|
||||
.PHONY: check lint test fmt build clean docker
|
||||
|
||||
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
||||
LDFLAGS := -X main.Version=$(VERSION)
|
||||
@ -29,11 +29,15 @@ test:
|
||||
# Build the binary
|
||||
build: ./bin/pixad
|
||||
|
||||
./bin/pixad: ./internal/*/*.go ./cmd/pixad/*.go
|
||||
./bin/pixad: ./internal/*/*.go ./cmd/pixad/*.go ./internal/static/* ./internal/templates/*
|
||||
@echo "Building pixad..."
|
||||
go build -ldflags "$(LDFLAGS)" -o $@ ./cmd/pixad
|
||||
|
||||
# Clean build artifacts
|
||||
clean:
|
||||
rm -rf bin/
|
||||
rm -f data.db
|
||||
rm -rf ./data
|
||||
|
||||
# Build Docker image
|
||||
docker:
|
||||
docker build --build-arg VERSION=$(VERSION) -t pixad:$(VERSION) -t pixad:latest .
|
||||
|
||||
Loading…
Reference in New Issue
Block a user