使用 Docker buildx 建立多平台 Docker Image

使用 Docker buildx 建立多平台 Docker Image

目錄

最近我在建設我的網站時選擇了 Hugo 這款靜態網站生成器,並選用了 Blowfish 主題。然而,我面臨了一個挑戰:Blowfish 主題要求 Hugo 的版本至少為 v0.115.0,但官方在 Docker Hub 上推薦的版本僅更新到了 v0.111.3。經過一番搜索,未能找到合適的 Docker Image,於是我決定自行創建一個

建立 Docker Image

為了建立一個適合的 Docker Image,我從創建一個 Dockerfile 開始。以下是我使用的 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

這個 Dockerfilegolang:1.20.6-bookworm Docker Image 為基礎,隨後安裝了最新版本的 hugo。安裝完成後,我們會透過執行 hugo version 指令來檢查其版本。這樣,我們就能確保所建立的 Docker Image 包含了我們需要的 Hugo 版本。

利用 buildx 建立跨平台 Docker Image

我通常在 Mac M2 系統上進行開發,但實際的部署環境是 Linux x86_64,因此我需要創建一個能在多平台運行的 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

相關文章

高效影音處理:用 FFmpeg 輕鬆轉換、合併及提取影片

高效影音處理:用 FFmpeg 輕鬆轉換、合併及提取影片

FFmpeg 是一款功能強大的開源影音處理工具,廣泛用於影片格式轉換、擷取影片中的聲音檔、添加字幕、擷取特定片段,以及進行批次處理等。考慮到其多功能性,

閱讀更多
小米水離子吹風機 H500:女性的福音 - 冷熱風交替

小米水離子吹風機 H500:女性的福音 - 冷熱風交替

家中的吹風機壞掉後,我開始尋找一款能夠提升生活質感的吹風機。在這次的探索中,我發現了一款名為小米水離子吹風機 H500 的產品。這款吹風機不僅具有獨特

閱讀更多
壓縮大師:使用 7-Zip 輕鬆個別壓縮多個資料夾

壓縮大師:使用 7-Zip 輕鬆個別壓縮多個資料夾

7-Zip 是一款開源的壓縮軟件,支持包括 7z、XZ、BZIP2、GZIP、TAR、ZIP、WIM 等多種壓縮格式。它提供了圖形用戶界面和右鍵選單,但並

閱讀更多