diff --git a/Dockerfile b/Dockerfile index 05a3376..211f9d0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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 diff --git a/Makefile b/Makefile index 4a02855..9384ae7 100644 --- a/Makefile +++ b/Makefile @@ -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=" + @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=)" + @echo " make docker-clean - Remove local images" + @echo "" @echo "Other:" @echo " make install - Install to GOPATH/bin" @echo " make clean - Clean build artifacts"