Docker Playwrightのスリム化を考える
ChromiumとEdgeを撤去
------------------- ↓ 前書きはここから ↓-------------------
さて、PlaywrightのDockerイメージを作ってみたわけだが、
ちょっと問題が。
(゚_゚) サイズがでかい
イメージデータで 2.5GB
もある。
chrome, edge, chromium, firefox, webkitと5種類アプリが入っているので、
でかいに決まってるわけだけど、
もうちょっとどうにかしたい。。。
OSはUbuntuなのでOSを取り替えるのが手っ取り早い。
軽量化というとAlpineが真っ先に思い浮かびそうだが、
不可能ではないけど機能不足なので今回はdebian-slimを使う
あと、いらないアプリも消せば良いかな。
ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪
------------------- ↓ 本題はここから ↓-------------------
debian公式からDockerfileを作る
debian公式のDockerイメージを使う。
通常版とslim版があるのでスリム版を採用
Playwright公式と合わせるので pwuser
というユーザーを追加しよう。
FROM debian:stable-slim
RUN adduser pwuser
RUN chown pwuser.pwuser /home/pwuser
USER pwuser
WORKDIR /home/pwuser/app
nodejsは別途追加する
nodejsはデフォルトで入っていないので別途追加する。
インストール方法はnodejs公式を参照
# prepare install
RUN apt-get update && apt-get install -y git curl ssh ca-certificates
# Install node14
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install -y nodejs
Chromium(あとffmpeg)を除去してPlaywrightをインストール
Playwrightはインストールすると設定に合わせてバイナリをダウンロードするが、
ダウンロードを止めてPlaywright本体だけインストールし、
バイナリは別途インストールする。
# === INSTALL Chromium, Firefox, Webkit ===
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
RUN mkdir /ms-playwright
RUN cd \
&& touch package.json \
&& echo '{"name": "root","description":"","license":"ISC"}' > package.json \
&& PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm i -D playwright \
&& npm i -D playwright-webkit \
&& npm i -D playwright-firefox \
&& rm -Rf /root/node_modules
ビルド
ではビルドしてみよう。
docker build -t pw:slim .
docker images
REPOSITORY | TAG | SIZE |
---|---|---|
pw | 1.0 | 2.5GB |
pw | slim | 1.3GB |
(・∀・) 半分ぐらいになった
------------------- ↓ 後書きはここから ↓-------------------
上記、Dockerfileは細切れに記述したので、
全体は以下のリンクからどうぞ。
Dockerfile一つで解決するようにしたので、
ディレクトリをコピーするなどは調整してもらえばと思う
Discussion