Docker部署Go程式

蓝易云發表於2024-11-23

Docker中部署Go程式是現代應用開發中常見的需求。透過Docker,您可以將應用程式及其依賴項打包在一個隔離的環境中,確保在不同環境下的一致性執行。以下是詳細的部署步驟:

📦 部署流程概覽

  1. 編寫Go程式
  2. 建立Dockerfile
  3. 構建Docker映象
  4. 執行Docker容器

1. 編寫Go程式 📝

首先,確保您已經編寫了一個可在本地執行的Go程式。例如,一個簡單的HTTP伺服器:

package main

import (
    "fmt"
    "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, Docker!")
}

func main() {
    http.HandleFunc("/", helloHandler)
    fmt.Println("Server is running on port 8080")
    http.ListenAndServe(":8080", nil)
}

解釋:

  • main函式:設定HTTP處理器並啟動伺服器監聽8080埠。
  • helloHandler:處理根路徑的HTTP請求,返回簡單的文字響應。

2. 建立Dockerfile 🐳

Go程式的根目錄下建立一個名為 Dockerfile 的檔案,用於定義Docker映象的構建過程。

# 使用官方golang映象作為構建環境
FROM golang:1.16 AS builder

# 設定工作目錄
WORKDIR /app

# 複製go.mod和go.sum並下載依賴
COPY go.mod go.sum ./
RUN go mod download

# 複製原始碼並構建可執行檔案
COPY . .
RUN go build -o main .

# 使用輕量級的映象作為執行環境
FROM alpine:latest

# 設定工作目錄
WORKDIR /root/

# 從構建階段複製可執行檔案
COPY --from=builder /app/main .

# 暴露8080埠
EXPOSE 8080

# 啟動應用
CMD ["./main"]

詳細解釋:

指令說明
FROM golang:1.16 AS builder使用官方Go語言1.16版本映象作為構建環境,命名為builder。
WORKDIR /app設定容器內的工作目錄為/app
COPY go.mod go.sum ./複製go.modgo.sum檔案到工作目錄,用於依賴管理。
RUN go mod download下載Go專案的依賴包。
COPY . .將當前目錄下的所有檔案複製到容器的工作目錄。
RUN go build -o main .構建Go程式,生成名為main的可執行檔案。
FROM alpine:latest使用Alpine作為基礎映象,體積小且適合生產環境。
WORKDIR /root/設定新的工作目錄為/root/
COPY --from=builder /app/main .從構建階段複製main可執行檔案到當前工作目錄。
EXPOSE 8080暴露容器的8080埠,供外部訪問。
CMD ["./main"]設定容器啟動時執行的命令,即執行main可執行檔案。

最佳化點

  • 多階段構建:使用AS builder分階段構建,減少最終映象的體積。
  • 輕量級基礎映象:選擇alpine映象,提升部署效率。

3. 構建Docker映象 🛠️

在終端中,導航到包含Dockerfile的Go程式目錄,執行以下命令構建映象:

docker build -t my-go-app .

解釋:

  • docker build:命令用於構建Docker映象。
  • -t my-go-app:為映象命名為my-go-app
  • .:指定當前目錄為構建上下文。

構建過程包括拉取基礎映象、安裝依賴、編譯程式等步驟,成功後會生成一個名為my-go-app的Docker映象。


4. 執行Docker容器 🚀

使用以下命令執行剛剛構建的Docker映象:

docker run -d -p 8080:8080 --name go-app-container my-go-app

詳細解釋:

引數說明
docker run建立並執行一個新的容器。
-d後臺執行容器,容器ID會被輸出。
-p 8080:8080將主機的8080埠對映到容器的8080埠。
--name go-app-container為容器指定名稱go-app-container,便於管理。
my-go-app要執行的映象名稱。

執行成功後,您的Go程式將在本地的8080埠上執行,可以透過訪問 http://localhost:8080 檢視效果。


🔍 總結與最佳實踐

  • 使用多階段構建:減少最終映象體積,提升部署效率。
  • 選擇合適的基礎映象:如alpine,確保映象輕量且安全。
  • 埠對映:確保容器內的埠正確對映到主機,便於訪問。
  • 命名規範:為映象和容器命名,便於管理和識別。

📊 工作流程圖

graph TD;
    A[編寫Go程式] --> B[建立Dockerfile];
    B --> C[構建Docker映象];
    C --> D[執行Docker容器];
    D --> E[訪問應用]

透過以上步驟,您可以高效地將Go程式部署到Docker容器中,享受隔離、便攜易管理的優勢。無論是在開發環境還是生產環境,Docker都能為您的應用提供穩定的執行基礎。

相關文章