使用 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

comments powered by Disqus

相關文章

Sublime Text 3/4 高階設定與快捷鍵技巧

Sublime Text 3/4 高階設定與快捷鍵技巧

Sublime Text 3/4 是一款輕巧且功能強大的文本編輯器,專為多語言程式設計打造,提供豐富的語法高亮和易於安裝的插件。其設定檔案採用 JSON 格式,便於用戶進行個性化

閱讀更多
小米二合一無線充電寶 30W 10000mAh:完美結合行動電源與無線充電座的體驗

小米二合一無線充電寶 30W 10000mAh:完美結合行動電源與無線充電座的體驗

今天我要帶大家探索一款新的科技產品,那就是小米的二合一無線充電寶 30W 10000mAh。自從我換了 Google Pixel 6,我就一直對無線充電充滿了好奇心。但市面

閱讀更多
使用 asdf 工具有效管理 Elixir、Erlang、Python 和 Node.js 等多種程式語言的版本

使用 asdf 工具有效管理 Elixir、Erlang、Python 和 Node.js 等多種程式語言的版本

在軟體開發領域中,維持團隊成員工具版本的一致性是非常關鍵的。這正是 asdf 版本管理工具發揮作用的時刻。 asdf 讓你能在一個文件( .tool-versions )裡面指定所有工具的版

閱讀更多