Apple Silicon 上の Docker で Chromium-browser を用いてスクリーンショットを撮った

# 環境

この記事のDockerfileは以下の環境で動作確認をしています。

- M2 MacBook Air
- Docker Engine: 20.10.21
- Docker Desktop: 4.15.0

# 完成したDockerfile

```Dockerfile
FROM --platform=linux/arm64 ubuntu:bionic
ENV LANG="C.UTF-8"

RUN apt-get update
RUN apt-get install -y \
    ca-certificates \
    sudo \
    libgbm1 \
    libnspr4 \
    libnss3 \
    xdg-utils \
    libwayland-server0 \
    libasound2 \
    libatk-bridge2.0-0 \
    libatk1.0-0 \
    libatspi2.0-0 \
    libcairo2 \
    libcups2 \
    libpango-1.0-0 \
    libxkbcommon0 \
    wget

RUN apt-get install -y \
    fonts-migmix \
    fonts-ipamj-mincho \
    fonts-horai-umefont \
    fonts-takao \
    xfonts-mona \
    fonts-kouzan-mouhitsu

RUN wget -P /tmp/ https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+files/chromium-browser_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN wget -P /tmp/ https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+files/chromium-chromedriver_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN wget -P /tmp/ https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+files/chromium-codecs-ffmpeg-extra_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN wget -P /tmp/ https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+files/chromium-codecs-ffmpeg_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb

RUN sudo dpkg -i /tmp/chromium-codecs-ffmpeg_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN sudo dpkg -i /tmp/chromium-codecs-ffmpeg-extra_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN sudo dpkg -i /tmp/chromium-browser_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb
RUN sudo dpkg -i /tmp/chromium-chromedriver_108.0.5359.71-0ubuntu0.18.04.5_arm64.deb

ARG CHROMIUM_USER_ID=1000
RUN CHROMIUM_USER_ID=1000 /bin/sh -c getent passwd "${CHROMIUM_USER_ID}" | adduser -D -H -u ${CHROMIUM_USER_ID} -h /usr/src -g "Chromium User,,," chromium-user

USER 1000

WORKDIR /home/screenshots

ENTRYPOINT ["chromium-browser", "--headless", "--disable-gpu", "--no-sandbox", "--screenshot"]

CMD ["https://google.com"]
```

# 注意点

## ubuntu のバージョンは Bionic です
https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+packages
こちらにある Chromium の最新パッケージは Bionic 用です。

## パッケージ最新版の URL は随時更新してください
https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+packages
ここを見ると最新の arm64 用のビルドの URL が分かるので、 `wget` で取ってきているパッケージの最新版 URL とファイル名は必要に応じてお手元で更新してください。

## 実行すると Error と Warning が出ます
が、目的の ScreenShot 自体は取れているので、そんなに深く追及しないことにします。
実際はいろいろ調べてみたのですが、解決策は分かりませんでした。

```sh
% docker build . --tag chromium:latest 
% docker run --rm -v $(pwd):/home/screenshots chromium https://google.com
[1227/120720.520117:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[1227/120720.520249:ERROR:bus.cc(399)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[1227/120720.526345:WARNING:bluez_dbus_manager.cc(247)] Floss manager not present, cannot set Floss enable/disable.
[1227/120720.561553:WARNING:sandbox_linux.cc(380)] InitializeSandbox() called with multiple threads in process gpu-process.
[1227/120720.640869:ERROR:nss_util.cc(55)] Failed to create /.pki/nssdb directory.
[1227/120722.066661:INFO:headless_shell.cc(623)] Written to file screenshot.png.
```

## ScreenShot のファイル名が固定されています
ここを柔軟にする方法もいまいち分かりませんでした。
なので、スクリーンショットを撮った後に、
```sh
mv screenshot.png $(date +"%y%m%d-%H%M%S").png
```
をするなどして、ユニークなファイル名をつけてあげてください。

# 出来上がった ScreenShot
![221227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116105/ccf9c9f2-e683-455d-b19b-6cae75c52dc1.png)


# 参考記事
- [arm64のubuntuにchromium, chromedriverを入れる方法](https://blog.saladbowl.work/blog/arm64-install-chromium-chromedriver)
- https://launchpad.net/~canonical-chromium-builds/+archive/ubuntu/stage/+packages
- http://www.coffeespark.com/chromium/
- https://hub.docker.com/r/icalialabs/chromium