# 1단계: Go 애플리케이션 빌드 # 개발 환경과 일치하는 특정 Go 버전 사용 FROM golang:1.25-alpine AS builder # 컨테이너 내부의 현재 작업 디렉토리 설정 WORKDIR /app # go.mod 및 go.sum 파일 복사 COPY backend/go.mod backend/go.sum ./ # 모든 종속성 다운로드. go.mod 및 go.sum 파일이 변경되지 않으면 종속성은 캐시됩니다. RUN go mod download # 소스 코드 복사 COPY backend/ . # Go 앱 빌드 # -ldflags="-w -s"는 디버그 정보를 제거하여 바이너리 크기를 줄입니다. # CGO_ENABLED=0은 정적 빌드를 위해 CGO를 비활성화합니다. RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /go/bin/server ./cmd/server # 2단계: 최종 경량 이미지 생성 # 더 작고 안전한 환경을 위해 distroless 이미지 사용 FROM gcr.io/distroless/static-debian11 # 빌더 스테이지에서 빌드된 실행 파일만 복사 COPY --from=builder /go/bin/server / # 외부 세계에 3000번 포트 노출 EXPOSE 3000 # 실행 파일을 실행하는 명령어 ENTRYPOINT ["/server"]