Build ARM64 (M1) Chromium Docker image for Selenoid
Selenoid is a powerful Golang implementation of original Selenium hub code. It is using Docker to launch browsers.1
Selenoid provides Chrome browser images,
but they are available only for
linux/amd64 architecture. If you try to use that images
on Mac M1 it will use an emulation to support different architecture and it will be much
slower than it can be.
Fortunately, sskorol already implemented Initial Chromium image support for arm64 #524.
You may ask why Chromium and not Chrome? And the answer is because Selenoid images are base on Ubuntu images. But Google does not provide Chrome ARM64 for Linux. There’s only Chromium is available for ARM64 Linux distributions.
Next, you may ask why this image is based on Ubuntu 18.04? I don’t have an answer why an old LTS Ubuntu 18.04 receives the latest Chromium updates and new LTS Ubuntu 22.04 does not. But you can see it at Ubuntu packages
- That’s Chromium package that we need
- The latest Chromium version in Ubuntu jammy (22.04 LTS) is 85.0. It does not have updates.
You may ask maybe someone already have built an appropriate image for Selenoid? Unfortunately, earlier mentioned sskorol has built an image only for chromium 100.0.
So, we are supposed to build a Docker image ourselves.
Docker image generation
- You need installed Go:
brew install go
- You need installed Maven (to run tests on built image):
brew install mvnor
sdk install maven
First, clone Selenoid Browser images repo:
Then build Chromium images using the following command:
107.0.5304.87-0ubuntu11.18.04.1is actual Chromium Ubuntu package version from Ubuntu packages;
chromium_107.0is a tag for generated Docker image. The whole image name will be
7.4.0is base image tag. Base image also builds with a script. Base image version for chromium image generation can be found at
After executing that command
selenoid/vnc:chromium_107.0 should be generated. All tests should pass.
Pushing Docker image and usage with Selenoid
You can tag generated Docker image and push to your private/personal registry:
Now we can use our image in