build(docker): 添加 Docker 构建支持

- Dockerfile: 添加 GOPROXY/GOSUMDB 代理设置,优化编译参数
- Makefile: 添加 docker/docker-push/docker-clean 命令

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-16 14:12:32 +08:00
parent 8ed800271d
commit 75317b44dd
2 changed files with 47 additions and 3 deletions

View File

@ -6,19 +6,25 @@ WORKDIR /build
# 安装构建依赖
RUN apk add --no-cache git make
# Go 代理设置(从宿主机传递)
ARG GOPROXY=https://proxy.golang.org,direct
ARG GOSUMDB=sum.golang.org
ENV GOPROXY=${GOPROXY}
ENV GOSUMDB=${GOSUMDB}
# 依赖缓存层
COPY go.mod go.sum ./
RUN go mod download
# 构建参数(版本信息)
ARG VERSION=0.2.0
ARG VERSION=dev
ARG GIT_COMMIT=unknown
ARG GIT_BRANCH=unknown
ARG BUILD_TIME=unknown
ARG GO_VERSION=unknown
ARG BUILD_PLATFORM=linux/amd64
ARG BUILD_PLATFORM=unknown
# 构建
# 构建(参数与 make build 保持一致)
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build \
-ldflags="-s -w \
@ -28,6 +34,8 @@ RUN CGO_ENABLED=0 GOOS=linux go build \
-X 'rua.plus/lolly/internal/app.BuildTime=${BUILD_TIME}' \
-X 'rua.plus/lolly/internal/app.GoVersion=${GO_VERSION}' \
-X 'rua.plus/lolly/internal/app.BuildPlatform=${BUILD_PLATFORM}'" \
-gcflags="-l=4" \
-asmflags="-l=4" \
-trimpath \
-o /build/lolly \
main.go

View File

@ -271,6 +271,37 @@ clean:
rm -f coverage.out coverage.html
@echo "Clean complete."
# ============================================
# Docker 命令
# ============================================
# 构建 Docker 镜像
docker:
@echo "Building Docker image..."
docker build --build-arg VERSION=$(VERSION) --build-arg GIT_COMMIT=$(shell git rev-parse HEAD 2>/dev/null || echo "unknown") --build-arg GIT_BRANCH=$(GIT_BRANCH) --build-arg BUILD_TIME='$(BUILD_TIME)' --build-arg GO_VERSION='$(GO_VERSION)' --build-arg BUILD_PLATFORM=linux/$(shell go env GOARCH 2>/dev/null || echo "amd64") --build-arg GOPROXY='$(shell go env GOPROXY)' --build-arg GOSUMDB='$(shell go env GOSUMDB)' -t $(APP_NAME):$(VERSION) -t $(APP_NAME):latest .
@echo "Docker image built: $(APP_NAME):$(VERSION), $(APP_NAME):latest"
# 推送 Docker 镜像(需要先 docker login
docker-push:
@echo "Pushing Docker image..."
@echo "Usage: make docker-push REGISTRY=<registry>"
@if [ -z "$(REGISTRY)" ]; then \
echo "Error: REGISTRY not specified"; \
echo "Example: make docker-push REGISTRY=docker.io/myuser"; \
exit 1; \
fi
docker tag $(APP_NAME):$(VERSION) $(REGISTRY)/$(APP_NAME):$(VERSION)
docker tag $(APP_NAME):latest $(REGISTRY)/$(APP_NAME):latest
docker push $(REGISTRY)/$(APP_NAME):$(VERSION)
docker push $(REGISTRY)/$(APP_NAME):latest
@echo "Pushed to: $(REGISTRY)/$(APP_NAME):$(VERSION)"
# 清理 Docker 镜像
docker-clean:
@echo "Cleaning Docker images..."
docker rmi $(APP_NAME):$(VERSION) $(APP_NAME):latest 2>/dev/null || true
@echo "Docker images cleaned."
# ============================================
# 帮助
# ============================================
@ -312,6 +343,11 @@ help:
@echo " make deps - Download dependencies"
@echo " make update-deps - Update dependencies"
@echo ""
@echo "Docker:"
@echo " make docker - Build Docker image"
@echo " make docker-push - Push to registry (REGISTRY=<url>)"
@echo " make docker-clean - Remove local images"
@echo ""
@echo "Other:"
@echo " make install - Install to GOPATH/bin"
@echo " make clean - Clean build artifacts"