🗂

Docker Playwrightのスリム化を考える

2021/06/29に公開

ChromiumとEdgeを撤去

------------------- ↓ 前書きはここから ↓-------------------

さて、PlaywrightDockerイメージを作ってみたわけだが、
ちょっと問題が。

(゚_゚) サイズがでかい

イメージデータで 2.5GB もある。
chrome, edge, chromium, firefox, webkitと5種類アプリが入っているので、
でかいに決まってるわけだけど、
もうちょっとどうにかしたい。。。

OSはUbuntuなのでOSを取り替えるのが手っ取り早い。
軽量化というとAlpineが真っ先に思い浮かびそうだが、
不可能ではないけど機能不足なので今回はdebian-slimを使う

あと、いらないアプリも消せば良いかな。

ヾ(・ω<)ノ" 三三三● ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

debian公式からDockerfileを作る

debian公式のDockerイメージを使う。
通常版とslim版があるのでスリム版を採用

Playwright公式と合わせるので pwuserというユーザーを追加しよう。

Dockerfile
FROM debian:stable-slim
RUN adduser pwuser
RUN chown pwuser.pwuser /home/pwuser
USER pwuser
WORKDIR /home/pwuser/app

nodejsは別途追加する

nodejsはデフォルトで入っていないので別途追加する。
インストール方法はnodejs公式を参照

Dockerfile
# 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本体だけインストールし、
バイナリは別途インストールする。

Dockerfile
# === 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一つで解決するようにしたので、
ディレクトリをコピーするなどは調整してもらえばと思う

https://gist.github.com/dohzoh/9732ba8a9751f05c5b9e9041a0f15260

Discussion