[Docker]M1 Mac環境でChromeとChromeDriverをインストールする方法

TIPS
TIPSツール

スクレイピングやE2Eテスト環境をDockerで構築する際、M1 Mac(Apple Silicon / ARM64)環境で、Google ChromeをDocker上で動かす場合、大きな罠(アーキテクチャの違い)が存在します。

Linux版の公式「Google Chrome」は amd64(Intel系)アーキテクチャ向けしか配布されていないため、普通にインストールしようとするとエラーになってしまいます。

これを解決する2つのアプローチを紹介します。

パターン1:プラットフォーム指定でエミュレートする(公式Chromeを使いたい場合)

Dockerfileの先頭で --platform=linux/amd64 を指定し、M1 Macの「Rosetta 2」を使ってIntelアーキテクチャとしてコンテナを動かす方法です。ご提示いただいたコマンドをそのまま再現する場合はこちらになります。

ポイント:

Docker内ではデフォルトで root ユーザーとして実行されるため、元のコマンドにあった sudo は削除しています。また、Chromeのバージョン出力(例: Google Chrome 133.0.x.x)からバージョン番号だけを抽出するため、awk コマンドを噛ませています。

# M1 Macでamd64をエミュレートして動かす指定
FROM --platform=linux/amd64 ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# 必要なツールのインストール
RUN apt-get update && apt-get install -y \
    curl gnupg wget unzip \
    && rm -rf /var/lib/apt/lists/*

# Google Chrome & ChromeDriverのインストール手順
RUN curl -fSsL https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor -o /usr/share/keyrings/google-chrome.gpg \
    && echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main\" | tee /etc/apt/sources.list.d/google-chrome.list \
    && apt-get update \
    && apt-get install -y google-chrome-stable \
    # バージョン番号のみを抽出(\"Google Chrome 1xx.x\" の3番目の要素を取得)
    && CHROME_VERSION=$(google-chrome --version | awk \'{print $3}\') \
    # ChromeDriverのダウンロードと配置
    && wget -q \"https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION}/linux64/chromedriver-linux64.zip\" \
    && unzip chromedriver-linux64.zip \
    && mv chromedriver-linux64/chromedriver /usr/bin/chromedriver \
    && chmod +x /usr/bin/chromedriver \
    # 不要なファイルのクリーンアップ
    && rm -rf chromedriver-linux64.zip chromedriver-linux64 /var/lib/apt/lists/*

CMD [\"bash\"]
[Docker]M1 Mac環境でChromeとChromeDriverをインストールする方法
[Mac] gitでerror: non-monotonic index対策
Mac環境のGitで発生する「error: non-monotonic index」の原因と解決策を解説。macOS特有の「._」から始まる不要なメタデータファイルを、dot_cleanやfindコマンドで安全に削除して即座に復旧する方法と予防策を紹介します。

パターン2:Chromiumブラウザを使用する(M1 Macの推奨・ベストプラクティス)

パターン1はエミュレーションを挟むため、動作が遅くなったり不安定になることがあります。

もし「絶対に公式のGoogle Chromeじゃないとダメ」という理由がなければ、オープンソース版である Chromium(クロミウム) を使うのが圧倒的におすすめです。

Ubuntuの公式リポジトリにはARM64(M1 Macネイティブ)向けのChromiumとChromeDriverが用意されているため、非常にシンプルかつ高速に動作します。

# プラットフォーム指定不要(M1 Macでネイティブに動きます)
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

# Chromiumと対応するChromeDriverをaptで一括インストール
RUN apt-get update && apt-get install -y \
    chromium-browser \
    chromium-chromedriver \
    && rm -rf /var/lib/apt/lists/*

CMD [\"bash\"]

使い方:

Seleniumなどで呼び出す際、ブラウザの実行パスを /usr/bin/chromium-browser、ドライバーのパスを /usr/bin/chromedriver に指定するだけで、Google Chromeと全く同じように操作できます。

[Docker]M1 Mac環境でChromeとChromeDriverをインストールする方法
[Mac]脱初心者!差がつくコマンド8選
Macの作業効率を劇的に向上させる標準コマンド8選を紹介。pbcopyやopenなどの定番から、画像処理のsips、回線測定のnetworkQualityなど、外部ツール不要で即戦力となる隠れた名コマンドの具体的な使い方を解説します。

まとめ

  • 公式Chromeにこだわる場合: --platform=linux/amd64 を指定して apt で無理やり入れる(ただしエミュレーションで少し遅い)。
  • パフォーマンス・安定性重視: apt から chromium-browser を入れる(ネイティブ動作で爆速。記述もスッキリ)。
Q よくある質問 (FAQ)
Q. M1 Mac上のDockerで公式Google Chromeがインストールエラーになるのはなぜですか?
A.
公式のLinux版Google Chromeはamd64(Intel系)アーキテクチャ向けのみの提供であり、M1 MacのARM64アーキテクチャと異なるためです。
Q. Docker上で公式ChromeとChromiumを使用する際、どちらが推奨されますか?
A.
パフォーマンスと安定性の観点から、ARM64にネイティブ対応しているChromiumの利用が推奨されます。公式ChromeはRosetta 2によるエミュレーションが必要なため、動作が遅くなる可能性があります。
Q. Chromiumを使用する場合、Seleniumなどのコード側で設定変更は必要ですか?
A.
はい。ブラウザの実行パスを「/usr/bin/chromium-browser」に、ドライバーのパスを「/usr/bin/chromedriver」に指定する必要があります。

コメント

タイトルとURLをコピーしました