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:
parent
8ed800271d
commit
75317b44dd
14
Dockerfile
14
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
|
||||
|
||||
36
Makefile
36
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=<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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user