자, 팀! 우리는 Docker화를 통해 Go API를 다음 단계로 끌어올리고 있으며, 더 중요한 것은 다단계 빌드를 통해 가벼우면서 효율적으로 만드는 것입니다. 이 게시물이 끝나면 이식 가능하고 더 빠른 배포에 최적화된 API를 갖게 될 것입니다. ?
다단계 빌드를 사용하면 빌드 환경과 런타임 환경을 분리하여 최종 Docker 이미지를 간결하게 유지할 수 있습니다. Go 애플리케이션의 경우 이는 한 단계에서(필요한 모든 도구 및 종속성을 포함하여) 애플리케이션을 구축한 다음 결과 바이너리만 더 작은 최종 이미지로 복사할 수 있기 때문에 특히 유용합니다.
다단계 빌드의 이점:
다단계 빌드를 활용하는 Dockerfile을 만들어 보겠습니다. 이는 최종 이미지 크기를 줄여 프로덕션용 Go API를 최적화하는 데 도움이 됩니다.
다음 콘텐츠로 프로젝트 루트에 Dockerfile을 만듭니다.
# Build stage FROM golang:1.21.0-alpine3.17 AS builder WORKDIR /app COPY . . # Install dependencies and build the application RUN go mod download RUN go build -o main . # Run stage (lightweight) FROM alpine:3.18.3 WORKDIR /app # Copy the binary from the builder stage COPY --from=builder /app/main . # Expose the API port EXPOSE 8000 # Run the binary CMD ["/app/main"]
빌더 스테이지:
런타임 단계:
이 접근 방식을 사용하면 최종 이미지에 API를 실행하는 데 필요한 것만 포함되므로 상당히 작은 이미지가 됩니다.
이제 최적화된 Dockerfile이 있으므로 Docker 이미지를 빌드하고 실행해 보겠습니다.
docker build -t my-go-api .
docker run -p 8000:8000 my-go-api
로컬 시스템에서와 마찬가지로 API가 http://localhost:8000에서 실행되는 것을 볼 수 있습니다!
추가 최적화를 위해 Alpine 런타임 단계를 스크래치 이미지로 대체할 수 있습니다. 스크래치 이미지는 OS나 유틸리티 없이 완전히 비어 있으므로 이미지 크기가 더욱 작아집니다. 그러나 이는 컨테이너 내부의 디버깅 도구에 액세스할 수 없다는 의미이기도 합니다.
스크래치 이미지를 적용한 Dockerfile의 모습은 다음과 같습니다.
# Build stage FROM golang:1.21.0-alpine3.17 AS builder WORKDIR /app COPY . . RUN go mod download RUN go build -o main . # Run stage FROM scratch WORKDIR /app COPY --from=builder /app/main . EXPOSE 8000 CMD ["/app/main"]
이 방법을 사용하면 최종 이미지 크기를 10-15MB로 줄일 수 있습니다! 그러나 스크래치를 사용하는 것은 매우 기본적이고 독립적인 애플리케이션에 가장 적합하다는 점을 명심하세요.
컨테이너가 예상대로 작동하는지 테스트해 보겠습니다.
curl http://localhost:8000/books
API가 올바르게 응답한다면 축하합니다! Docker를 사용하여 Go API를 성공적으로 최적화하고 컨테이너화했습니다. ?
이제 API가 Docker에서 지원되고 프로덕션에 최적화되었으므로 원활한 배포 및 확장이 가능하도록 설정되었습니다! 다음번에는 Go용 단위 테스트에 대해 알아보고 API가 배포 가능할 뿐만 아니라 견고함인지 확인하겠습니다. ??
또한 ThrottleX GitHub 저장소에서 업데이트를 확인하세요. 곧 사용자 정의 속도 제한기 통합에 대한 튜토리얼을 게시할 예정입니다!
위 내용은 다단계 빌드로 Go API Docker화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!