본문으로 건너뛰기

Deploy

Dockerfile

.dockerignore
.env
Dockerfile
FROM golang:1.20-alpine AS build
WORKDIR /app

# Private 리포지토리를 사용해야 하능 경우
# ARG GITHUB_TOKEN
# ENV GOPRIVATE=github.com/hhk7734
# RUN apk add --no-cache git
# RUN git config --global url.https://[email protected]/.insteadOf \
# https://github.com/

COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-a \
-ldflags '-s' \
-tags=go_json,nomsgpack \
-buildvcs=false \
-o app \
./cmd/server

FROM alpine:3.17 AS runtime
WORKDIR /app

COPY --from=build /app/app /usr/bin/

ENTRYPOINT [ "app" ]
  • scratch 이미지를 사용하면 작은 이미지를 만들 수 있지만, 디버깅이 어려울 수 있습니다.
  • https://github.com/gin-gonic/gin/blob/master/docs/doc.md#build-tags
    • msgpack을 사용하지 않는 다면 -tags nomsgpack 옵션으로 끌 수 있습니다.
    • encoding/json 대신 사용할 json 패키지를 tag를 사용하여 선택할 수 있습니다.
      • go-json: -tags go_json
      • jsoniter: -tags jsoniter
      • sonic: -tags sonic,avx