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

スクレイピングや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"]

パターン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と全く同じように操作できます。

まとめ

  • 公式Chromeにこだわる場合: --platform=linux/amd64 を指定して apt で無理やり入れる(ただしエミュレーションで少し遅い)。
  • パフォーマンス・安定性重視: apt から chromium-browser を入れる(ネイティブ動作で爆速。記述もスッキリ)。

コメント

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