容器化 Go 語言應用程式

容器化有助於您將應用程式及其依賴項打包到一個名為容器的單一包中。此包可以在任何平臺上執行,而無需擔心環境。在本節中,您將學習如何使用 Docker 容器化 Go 語言應用程式。

要容器化 Go 語言應用程式,您首先需要建立一個 Dockerfile。Dockerfile 包含在容器中構建和執行應用程式的指令。此外,在建立 Dockerfile 時,您可以遵循不同的最佳實踐集來最佳化映象大小並使其更安全。

建立 Dockerfile

在 Go 語言應用程式的根目錄中建立一個名為 Dockerfile 的新檔案。Dockerfile 包含在容器中構建和執行應用程式的指令。

以下是 Go 語言應用程式的 Dockerfile。您也可以在 go-prometheus-monitoring 目錄中找到此檔案。

# Use the official Golang image as the base
FROM golang:1.24-alpine AS builder

# Set environment variables
ENV CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# Set working directory inside the container
WORKDIR /build

# Copy go.mod and go.sum files for dependency installation
COPY go.mod go.sum ./

# Download dependencies
RUN go mod download

# Copy the entire application source
COPY . .

# Build the Go binary
RUN go build -o /app .

# Final lightweight stage
FROM alpine:3.21 AS final

# Copy the compiled binary from the builder stage
COPY --from=builder /app /bin/app

# Expose the application's port
EXPOSE 8000

# Run the application
CMD ["bin/app"]

理解 Dockerfile

Dockerfile 由兩個階段組成

  1. 構建階段:此階段使用官方 Go 語言映象作為基礎,並設定必要的環境變數。它還在容器內部設定工作目錄,複製 go.modgo.sum 檔案以進行依賴項安裝,下載依賴項,複製整個應用程式原始碼,並構建 Go 二進位制檔案。

    您使用 golang:1.24-alpine 映象作為構建階段的基礎映象。CGO_ENABLED=0 環境變數停用 CGO,這對於構建靜態二進位制檔案很有用。您還將 GOOSGOARCH 環境變數分別設定為 linuxamd64,以針對 Linux 平臺構建二進位制檔案。

  2. 最終階段:此階段使用官方 Alpine 映象作為基礎,並從構建階段複製編譯後的二進位制檔案。它還暴露應用程式的埠並執行應用程式。

    您使用 alpine:3.21 映象作為最終階段的基礎映象。您將編譯後的二進位制檔案從構建階段複製到最終映象。您使用 EXPOSE 指令暴露應用程式的埠,並使用 CMD 指令執行應用程式。

    除了多階段構建之外,Dockerfile 還遵循最佳實踐,例如使用官方映象、設定工作目錄以及僅將必要檔案複製到最終映象。您可以透過其他最佳實踐進一步最佳化 Dockerfile。

構建 Docker 映象並執行應用程式

一旦有了 Dockerfile,您就可以構建 Docker 映象並在容器中執行應用程式。

要構建 Docker 映象,請在終端中執行以下命令

$ docker build -t go-api:latest .

構建映象後,您可以使用以下命令在容器中執行應用程式

$ docker run -p 8000:8000 go-api:latest

應用程式將在容器內部開始執行,您可以透過 https://:8000 訪問它。您還可以使用 docker ps 命令檢查正在執行的容器。

$ docker ps

摘要

在本節中,您學習瞭如何使用 Dockerfile 容器化 Go 語言應用程式。您建立了一個多階段 Dockerfile 來在容器中構建和執行應用程式。您還學習了最佳化 Docker 映象大小並使其更安全的最佳實踐。

相關資訊

後續步驟

在下一節中,您將學習如何使用 Docker Compose 連線和執行多個服務,以使用 Prometheus 和 Grafana 監控 Go 語言應用程式。