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

相關文章

如何修改 LBRY 的 blobfiles 資料夾位置

如何修改 LBRY 的 blobfiles 資料夾位置

由於 LBRY 的 blobfiles 預設位置沒有辦法修改,很容易造成 C 槽空間不足的問題,因此我們可以透過以下方法將 blobfiles 資料夾的位置修改到其他位置來解決這個問題。 在新的位

閱讀更多
如何在 Windows 使用 WSL2 建立 Linux 開發環境

如何在 Windows 使用 WSL2 建立 Linux 開發環境

安裝 WSL2 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart wsl --update --web-download wsl --set-default-version 2 安裝 Ubuntu 20.04 wsl --install -d Ubuntu-20.04 --web-download wsl --set-default Ubuntu-20.04 Linux 初始化及環境設定 將系統更新至最新 sudo apt-get install -y software-properties-common sudo apt update && sudo apt upgrade -y 讓使用者不需要

閱讀更多
如何在 Hugo 網站中加入 LikeCoin 讚賞鍵提升創作收入

如何在 Hugo 網站中加入 LikeCoin 讚賞鍵提升創作收入

因為我本身是 LikeCoin 支持者,也是推崇文章開源但內容有價的創作者。 因此希望即便從 WordPress 轉移至 Hugo ,依然能夠使用 LikeCoin 作為連結我與讀者間的橋梁。 本文以 hugo v0.114.1 搭配 LoveIt

閱讀更多