打造最小 Go Docker Image
簡短幾步驟輕鬆打造最小 Docker Image
文章目錄
先寫個簡單不斷印出 Hello World 的小程式
// main.go
package main
import (
"fmt"
"time"
)
func main() {
for {
fmt.Println("Hello World!")
time.Sleep(1 * time.Second)
}
}
若是 native build
的話 Go 預設會打開 CGO_ENABLED
這個參數,主要是讓 Go 執行檔能夠直接連結到系統上的函式庫(libraries),而不必另外打包進執行檔。但由於 scratch
這個特別的 Docker image 本身空空如也,連基本的函式庫也沒有。因此我們需要關閉 CGO_ENABLED 讓編譯器能夠將程式所需的函式庫一起打包進執行檔內。
如果是 cross compilation
的話,記得要加入 GOOS
、GOARCH
這兩個參數。
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main
我們只需要三行便完成所需的 Dockerfile
FROM scratch
ADD main /
CMD ["/main"]
構建映像檔
$ docker build -t minimal_go_docker_img .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
minimal_go_docker_img 1.0 8f836c8b219a 17 minutes ago 1.638 MB
$ docker run --rm minimal_go_docker_img
如果程式有需要存取 HTTPS 相關服務,記得要放入 CA 憑證。
通常你可以在任意 Linux distribution 的 /etc/ssl/certs/
底下找到 ca-certificates.crt
。
FROM scratch
ADD ca-certificates.crt /etc/ssl/certs/
ADD main /
CMD ["/main"]
相關文章
- Fission - Serverless Framework on Kubernetes
- Kubernetes Service 深度剖析 - 標籤對於 Service 的影響
- 從 Google Kubernetes Engine 移除節點
- Kubernetes Service 深度剖析 - 存取路徑差異
- Kubernetes 兩步安裝一次上手
文章內容的轉載、重製、發佈,請註明出處: https://tachingchen.com/tw/
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Pinterest
Email