それではチーム!私たちは Go API をDocker 化することで次のレベルに引き上げ、さらに重要なことに、マルチステージ ビルドで軽量かつ効率的にすることです。この投稿を終えるまでに、移植性があるだけでなく、より迅速なデプロイメントのために最適化された API が完成します。 ?
マルチステージビルドでは、ビルド環境をランタイム環境から分離することで、最終的なDockerイメージを無駄のない状態に保つことができます。 Go アプリケーションの場合、これは特に便利です。アプリケーションを 1 段階で (必要なツールと依存関係をすべて備えて) ビルドし、結果として得られるバイナリのみをより小さな最終イメージにコピーできるからです。
マルチステージビルドの利点:
多段階ビルドを利用する 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 がデプロイ可能であるだけでなく、盤石であることを確認します。 ??
また、最新情報については、ThrottleX GitHub リポジトリにも注目してください。カスタム レート リミッターの統合に関するチュートリアルを近々投稿する予定です。
以上がマルチステージビルドによる Go API の Docker 化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。