快轉到主要內容

使用 Docker buildx 建立多平台的 Docker Image

· 0
目錄

最近為了架設這個網站,我使用了 Hugo 這個靜態網站產生器,掛載 Blowfish 主題。但是因為這個主題需要 Hugo v0.115.0 以上的版本來編譯,而目前官方推薦的 Docker Hub 只有更新到 v0.111.3 版,搜尋之下也找不到有適合的 Docker Image,所以只好 自己動手做一個

建立 Docker Image #

首先,我們先建立一個 Dockerfile,內容如下:

FROM golang:1.20.6-bookworm as builder
RUN go version
RUN go install -tags extended github.com/gohugoio/hugo@latest
RUN hugo version

這個 Dockerfile 會使用 golang:1.20.6-bookworm 這個 Docker Image 作為基底,並且安裝 hugo 這個套件,最後輸出 hugo 的版本。

使用 buildx 建立多平台的 Docker Image #

由於我平常是在 Mac 上開發,可是我實際部署的環境是 Linux,所以我需要建立一個多平台的 Docker Image,這時候就可以使用 buildx 來建立。

在已經安裝好 Docker 的環境下,我們可以使用以下指令來建立多平台的 Docker Image 並推送到 Docker Hub 上:

username=<your-docker-hub-username>
ver=$(curl --silent "https://api.github.com/repos/gohugoio/hugo/releases/latest" | jq -r .tag_name) # 取得最新的版本號,這邊需要安裝 jq
ver=${ver#v}
builder=builder
if ! docker buildx ls | grep -q $builder; then
    docker buildx create --name $builder # 建立 builder
fi
docker buildx use $builder # 使用 builder
docker buildx inspect --bootstrap # 啟動 builder
docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7 --push -t $username/hugo:$ver-ext-debian -t $username/hugo:latest . # 建立並推送到 Docker Hub

這邊需要注意的是,如果你的 Mac 是 Apple Silicon (M1, M2) 的話,需要先打開 Docker Desktop 的設定,勾選 experimental feature,並且關閉 Use Rosetta for x86/amd64 emulation on Apple Silicon 才能正常使用 linux/amd64 的編譯。

這樣就可以建立一個多平台的 Docker Image 了,可以到 Docker Hub 上看到我建立的 Docker Image。

由於我只提供 Hugo v0.115.4 之後的版本,若有需要 Hugo v0.111.3 之前的版本,可以自己修改 Dockerfile,或是直接使用 klakegg/hugo 這個 Docker Image。

使用 Docker Image #

使用這個 Docker Image 的方式很簡單,只要在你的 Hugo 專案目錄下執行以下指令,這樣就可以在你的專案目錄下看到 public 這個資料夾,裡面就是編譯好的靜態網站檔案了。

docker run --rm -it -v $(pwd):/src jafee201153/hugo:latest hugo

或是你也可以參考 透過 Google Cloud Run 發布 Hugo 網站 這篇文章,來建立你自己的 Dockerfile

Related

透過 Powershell 設定 PATH 環境變數
· 0
Sublime Text 3/4 常用設定與指令
· 0
在 Windows 上透過 Chocolatey 使用命令列管理軟體
· 0

boba-icon
請我喝珍奶!