Apple M1でkubernetes/websiteを動かす
これはなに
Kubernetesの日本語ドキュメントの更新をしていたときのこと。
現在自分はApple M1のMacbookProを使っているのですが、kubernetes/werbsiteをローカルで起動するとエラーが発生してしまいHugoが起動しませんでした。
……とはいえ、すでにApple M1を一ヶ月触ってきたのでなんとなく原因はCPUアーキテクチャの問題だろうと目処はつきました。(もう慣れた)
そこでDockerfile含め少し修正してkubernetes/websiteを動かしました、というのが今回のお話です。もし参考になれば。
Dockerfileの問題の箇所
問題はシンプルで、ここが原因。
# 一部抜粋
# snip
RUN mkdir -p /usr/local/src && \
cd /usr/local/src && \
# ↓このバイナリのARM64向けが公開されていない
curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz | tar -xz && \
mv hugo /usr/local/bin/hugo && \
addgroup -Sg 1000 hugo && \
GithubのHugoのリポジトリから直接Hugo Extendedのバイナリを持ってきています。しかしこちらのバイナリはARM64向けにビルドされたものではないので、コンテナをビルドするだけではApple M1上で起動しません。
Hugoのreleaseページを確認してみましたが、ARM64対応のHugo Extendedのバイナリは公開していないっぽいです。
解決方法
仕方ないのでHugoを自分でビルドし、ARM64向けのバイナリを作成してDockerfileに噛ませてあげました。
# Hugoを自分でビルドするぞ!!
# Hugoのリポジトリを持ってくる
git clone https://github.com/gohugoio/hugo.git
cd hugo
# Hugoのビルドを実行、タグ名は適当に
docker build -t localhost/hugoextended --target build --build-arg HUGO_BUILD_TAGS=extended .
そしてDockerfileを微修正。
# snip
# 作成したビルダーイメージからHugo Extendedのバイナリを引っこ抜いてくる
COPY /go/bin/hugo /usr/local/src/hugo
RUN mkdir -p /usr/local/src && \
cd /usr/local/src && \
# バイナリは外から持ってこないためこのコマンドは削除
# curl -L https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.tar.gz | tar -xz && \
mv hugo /usr/local/bin/hugo && \
addgroup -Sg 1000 hugo && \
adduser -Sg hugo -u 1000 -h /src hugo
# snip
この状態でmake container-image
コマンドを使って作成したコンテナイメージを利用してmake container-serve
を実行したところ、無事kubernetes/websiteがローカルで動きました。
と言ったところで、無事ローカルでkubernetes/websiteが起動するようになりました。
GolangはCPUアーキテクチャ違っていても簡単にビルドができ、またDocker内部でビルド環境が完結していたので簡単に解決できました。
Discussion
こちらを参考にしてkubernetes/websiteを動かすことができました。ありがとうございます。
1点修正いただきたい箇所があります。
こちらを実行したところ、以下のエラーとなりました。
原因は
--target build
と--build-arg
の間が全角スペースになっていることです。半角スペースにしたらビルドできました。ぬぉぉぉ!?なんてこった……指摘ありがとうございます!
修正します〜!
修正しました〜!