[golang][docker]將golang撰寫的執行檔發佈到 Docker 的容器

要將用 Golang 撰寫的執行檔發佈到 Docker 容器,可以按照以下步驟進行:


1. 撰寫 Golang 程式

確保你的 Go 程式碼能夠正確執行,並且有 main.go 入口檔案。例如:

package main
import (
	"fmt""net/http"
)

funchandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, Docker with Golang!")
}

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


2. 建立 Dockerfile

在專案目錄下建立 Dockerfile,內容如下:

# 使用官方 Golang 版本作為建置階段
FROM golang:1.21 AS builder

# 設定工作目錄
WORKDIR /app

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

# 複製所有程式碼
COPY . .

# 編譯 Go 程式(靜態編譯)
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main .

# 使用更輕量級的基礎映像
FROM alpine:latest

# 設定工作目錄
WORKDIR /root/

# 複製編譯後的執行檔
COPY --from=builder /app/main .

# 指定容器啟動時要執行的指令
CMD ["./main"]

 

解釋:

  • 多階段建置:使用 golang:1.21 作為建置環境,然後將編譯後的執行檔複製到 alpine(輕量級 Linux)。
  • 靜態編譯:確保 CGO_ENABLED=0 以減少對系統庫的依賴,確保可攜性。
  • 最終映像:使用 alpine,最小化 Docker 容器大小。


3. 建立 .dockerignore(可選)

避免將不必要的檔案(如 vendor、本地編譯檔案等)加入 Docker 映像:

.git
bin/
*.exe
*.out
*.log
node_modules/


4. 建置與運行 Docker 容器

執行以下指令來建置和運行容器:

# 建置 Docker 映像
docker build -t my-go-app . # 執行容器(開放 8080 端口) docker run -p 8080:8080 my-go-app

然後,打開瀏覽器或使用 curl 測試:

curl http://localhost:8080

應該會看到 Hello, Docker with Golang!



5. 最佳化(可選)

如果想要更小的映像,可以改用 scratch

FROM golang:1.21 AS builder
WORKDIR /app COPY . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main . # 最小映像 FROM scratch COPY --from=builder /app/main . CMD ["/main"]

這樣映像大小可以從 幾百 MB 降到幾 MB




留言

這個網誌中的熱門文章

[Kotlin]如何學習Kotlin

[golang]如何使用 gorm 高效執行批量插入 (可以透過 Create()、CreateInBatches(),或者 原生 SQL 語句 來提升效率)

[Kotlin]Kotlin Multiplatform (KMP) 如何安裝使用和部署