deno-puppeteerをalpine (Docker)で使いたかった
Denoにポートされたpuppeteerがある。ここではこれをdeno-puppeteerと呼ぶことにする
これをalpineベースのコンテナイメージに突っ込んで、なるべく軽いイメージを作ろうとした。
できなかったので、いつかまた解決策が見つかった時のためにメモ。
alpineでchromeをセットアップしようと思ったらこれのDockerfileをベースにするのが良さそう。
apkは現在は3.15のリポジトリがedgeで、Dockerhubに上がっているこの人のイメージは若干chromeが古い。denoを一緒にインストールする例もあった
が、結構面倒そう上記の例は面倒そうなので、Denoをalpineにセットアップしたイメージをベースにしてchromeをセットアップするのが良さそうと考えた。
alpineにDenoを入れたのはこちら
tagでバージョンを固定してやると良い。
しかしdeno-puppeteerはサポートしているchromeのリビジョンが決まっていて、それ以外のリビジョンのchromeは動作しないようになっている。
9.0.2時点では869685で、これはバージョン 91.0.4469.0
に相当。
apkでインストールできるchromeは以下の通り。合致するものがない。
apkのrepositoryのバージョン | chromiumのバージョン |
---|---|
3.15 | 93.0.4577.82-r2 |
3.14 | 93.0.4577.82-r0 |
3.13 | 86.0.4240.111-r0 |
deno-puppeteerにはchromeのインストーラーが付属していて、
ここに記載のある方法でインストールが可能。この方法でインストールしてもchromeが起動しない。
必要そうなパッケージを足しまくっても起動しなかった。
(エラーログを紛失してしまったが、Segmentation faultだった)
alplineを使うという縛りは外さないとして、解決方法として考えられるのは以下の方法
- deno-puppeteerをchromeの
93.0.4577.82-r2
など、apkからインストールできるバージョンに対応させる - alpineで
91.0.4469.0
を動作させる方法を探す - alpineで
91.0.4469.0
をソースからビルドする
1が一番簡単そうに見えてしまう。どんな障害が転がっているのかわからないけれど…
2は現状のまま突き進む道。今の自分の知識では難しそう。
3は開発環境とか作るのが大変そう。時間がある時にする感じかな…
alpine縛りなしでいいならDebianを使う公式のサンプルがあるので、これを流用するのが一番早そう。
サンプルをビルドしたときのコンテナサイズは 727.26 MB だった。
alpineで試した時、一番大きく膨れたときが600MB代だったので、まあ許容範囲かもしれない。
alpine-chromeが400MB代だというのでできれば600MB代で抑えたいけど…
distrolessというのを使うと軽くできるという話も見た
denoのdistroless版はこう作っているらしい
どこか特定のディレクトリをコピーしてくれば良いのであればchromiumをインストールした後の増分をまるっとコピーしてくればいける…?
いや、その前に動作させられるのか?動作確認できるのか?
クラスタを組めるのであれば、headless-chromeを別コンテナで立ち上げて置いてそこにconnectしに行くのでも良い。
VM一台の上でdocker-composeするので良ければそれが一番いいかな