From 9a20063f03b2eacc6abc8c4706f95384a3fae139 Mon Sep 17 00:00:00 2001 From: Matteo Date: Sun, 12 Jun 2022 18:30:49 +0200 Subject: [PATCH 1/8] Update Dockerfile added compatibility for apple silicon m1 --- docker/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index c144d97..735c45a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:20.04 +FROM --platform=linux/amd64 ubuntu:20.04 EXPOSE 9222 @@ -40,4 +40,4 @@ VOLUME /data ENV HOME=/data DEBUG_ADDRESS=0.0.0.0 DEBUG_PORT=9222 ENTRYPOINT ["/usr/bin/dumb-init", "--"] -CMD ["/usr/bin/entrypoint.sh"] \ No newline at end of file +CMD ["/usr/bin/entrypoint.sh"] From d7462f13805af0eed0c85767fdcc17c90572f58b Mon Sep 17 00:00:00 2001 From: Matteo Date: Sat, 25 Jun 2022 03:37:46 +0200 Subject: [PATCH 2/8] Update docker-compose.yml --- docker/docker-compose.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 35a99b6..47fa36c 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,9 +1,7 @@ version: "3" services: chromium: - build: - context: ./ - dockerfile: Dockerfile + image: bertuz/docker-chromium:chromium93.0.4577-1.2.4-6 shm_size: "1gb" ports: - "9222:9222" From 2c18891bbb8c3991da8ad6c811481b6283305b36 Mon Sep 17 00:00:00 2001 From: mbertamini Date: Tue, 28 Jun 2022 19:09:14 +0200 Subject: [PATCH 3/8] added option of running a specific docker image --- docker/docker-compose.yml | 6 ++++++ lib/index.js | 19 +++++++++++++++++-- tests/run-container/run-container.test.js | 12 ++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 47fa36c..0ee7918 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,7 +1,13 @@ version: "3" + services: chromium: image: bertuz/docker-chromium:chromium93.0.4577-1.2.4-6 shm_size: "1gb" ports: - "9222:9222" + chromium-image: + image: ${DOCKER_CHROMIUM_IMAGE} + shm_size: "1gb" + ports: + - "9222:9222" diff --git a/lib/index.js b/lib/index.js index c798876..e68fa39 100644 --- a/lib/index.js +++ b/lib/index.js @@ -14,6 +14,8 @@ const { const dockerComposePath = path.join(__dirname, '../docker/docker-compose.yml'); let serviceToBuild = 'chromium'; +let serviceToRun = serviceToBuild; +let image; let chromiumAdditionalArgs; let chromiumDownloadHost; let chromiumRevision; @@ -46,12 +48,12 @@ const dockerBuild = async () => { const dockerUp = async () => { try { console.log(`${CONSOLE_PREFIX} Starting Docker container...`.green); - await runCommand('docker-compose', [ + await runCommand(`DOCKER_CHROMIUM_IMAGE=${image} docker-compose`, [ '-f', `"${dockerComposePath}"`, 'up', '-d', - serviceToBuild + serviceToRun ]); console.log( `${CONSOLE_PREFIX} Successfully started Docker container`.green @@ -115,10 +117,23 @@ const contactChromium = async ({ config, maxAttempts, retryInterval }) => { const dockerConfig = ({ flags, + useImage, revision, downloadHost, useClosestUbuntuMirror }) => { + image = + useImage || + process.env.DOCKER_CHROMIUM_USE_IMAGE || + process.env.npm_config_docker_chromium_use_image || + process.env.npm_package_config_docker_chromium_use_image; + console.log(`${CONSOLE_PREFIX} Use Docker image ${useImage}`.green); + + if (image) { + serviceToRun = 'chromium-image'; + return; + } + shouldUseClosestUbuntuMirror = useClosestUbuntuMirror || process.env.USE_CLOSEST_UBUNTU_MIRROR || diff --git a/tests/run-container/run-container.test.js b/tests/run-container/run-container.test.js index 12090ff..0b7f7ee 100644 --- a/tests/run-container/run-container.test.js +++ b/tests/run-container/run-container.test.js @@ -19,4 +19,16 @@ describe('runContainer', () => { expect(webSocketUri).toContain('ws://'); }, 300000); + + it('runs container with a specific image and provides websocket uri', async () => { + dockerSetChromiumConfig({ + useImage: 'bertuz/docker-chromium:chromium103.0.5060.53-1', + flags: [' -–ignore-certificate-errors'], + revision: 754306 + }); + + const webSocketUri = await dockerRunChromium(); + + expect(webSocketUri).toContain('ws://'); + }, 300000); }); From a9773b05910d8779283dda593f4cd826e66f9644 Mon Sep 17 00:00:00 2001 From: mbertamini Date: Tue, 28 Jun 2022 19:27:49 +0200 Subject: [PATCH 4/8] removed unused platform specification on Dockerfile --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 735c45a..4f19910 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=linux/amd64 ubuntu:20.04 +FROM ubuntu:20.04 EXPOSE 9222 From c580ea6b6a9d99358db8b7268a2a8443ae819fc7 Mon Sep 17 00:00:00 2001 From: mbertamini Date: Thu, 30 Jun 2022 01:36:23 +0200 Subject: [PATCH 5/8] additional flags args to chromium-image and build Dockerfile to its pristine version --- docker/docker-compose.yml | 8 +++++++- docker/entrypoint.sh | 0 lib/index.js | 33 ++++++++++++++++++--------------- 3 files changed, 25 insertions(+), 16 deletions(-) mode change 100644 => 100755 docker/entrypoint.sh diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 0ee7918..19edfd1 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -2,12 +2,18 @@ version: "3" services: chromium: - image: bertuz/docker-chromium:chromium93.0.4577-1.2.4-6 + build: + context: ./ + dockerfile: Dockerfile shm_size: "1gb" ports: - "9222:9222" chromium-image: image: ${DOCKER_CHROMIUM_IMAGE} + environment: + - DEBUG_ADDRESS + - DEBUG_PORT + - CHROMIUM_ADDITIONAL_ARGS shm_size: "1gb" ports: - "9222:9222" diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh old mode 100644 new mode 100755 diff --git a/lib/index.js b/lib/index.js index e68fa39..3ce3201 100644 --- a/lib/index.js +++ b/lib/index.js @@ -48,13 +48,10 @@ const dockerBuild = async () => { const dockerUp = async () => { try { console.log(`${CONSOLE_PREFIX} Starting Docker container...`.green); - await runCommand(`DOCKER_CHROMIUM_IMAGE=${image} docker-compose`, [ - '-f', - `"${dockerComposePath}"`, - 'up', - '-d', - serviceToRun - ]); + await runCommand( + `DOCKER_CHROMIUM_IMAGE=${image} CHROMIUM_ADDITIONAL_ARGS='${chromiumAdditionalArgs}' docker-compose`, + ['-f', `"${dockerComposePath}"`, 'up', '-d', serviceToRun] + ); console.log( `${CONSOLE_PREFIX} Successfully started Docker container`.green ); @@ -129,8 +126,22 @@ const dockerConfig = ({ process.env.npm_package_config_docker_chromium_use_image; console.log(`${CONSOLE_PREFIX} Use Docker image ${useImage}`.green); + chromiumAdditionalArgs = flags || process.env.CHROMIUM_ADDITIONAL_ARGS; + if (chromiumAdditionalArgs) { + console.log( + `${CONSOLE_PREFIX} Setting Chromium flags to ${chromiumAdditionalArgs}...` + .green + ); + } + if (image) { serviceToRun = 'chromium-image'; + serviceToBuild = serviceToRun; + + console.log( + `Ignoring the rest of the parameters because a specific image is used.` + .green + ); return; } @@ -157,14 +168,6 @@ const dockerConfig = ({ .green ); - chromiumAdditionalArgs = flags || process.env.CHROMIUM_ADDITIONAL_ARGS; - if (chromiumAdditionalArgs) { - console.log( - `${CONSOLE_PREFIX} Setting Chromium flags to ${chromiumAdditionalArgs}...` - .green - ); - } - if (revision) { console.log( `${CONSOLE_PREFIX} Setting Chromium version to rev-${revision}...` From 2f2d8ef9ef379322706065387b72d106cb0db773 Mon Sep 17 00:00:00 2001 From: mbertamini Date: Thu, 30 Jun 2022 13:24:45 +0200 Subject: [PATCH 6/8] removed unused env variables from docker-compose moved into Dockerfile as default env variables --- docker/docker-compose.yml | 2 -- docker/import_cert.sh | 0 tests/run-container/run-container.test.js | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) mode change 100644 => 100755 docker/import_cert.sh diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 19edfd1..ec69b4d 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -11,8 +11,6 @@ services: chromium-image: image: ${DOCKER_CHROMIUM_IMAGE} environment: - - DEBUG_ADDRESS - - DEBUG_PORT - CHROMIUM_ADDITIONAL_ARGS shm_size: "1gb" ports: diff --git a/docker/import_cert.sh b/docker/import_cert.sh old mode 100644 new mode 100755 diff --git a/tests/run-container/run-container.test.js b/tests/run-container/run-container.test.js index 0b7f7ee..7875f67 100644 --- a/tests/run-container/run-container.test.js +++ b/tests/run-container/run-container.test.js @@ -22,7 +22,7 @@ describe('runContainer', () => { it('runs container with a specific image and provides websocket uri', async () => { dockerSetChromiumConfig({ - useImage: 'bertuz/docker-chromium:chromium103.0.5060.53-1', + useImage: 'bertuz/docker-chromium:chromium103.0.5060.53-test6', flags: [' -–ignore-certificate-errors'], revision: 754306 }); From 817f8719adb990cd24adfa89d4b89805829fb30d Mon Sep 17 00:00:00 2001 From: mbertamini Date: Thu, 30 Jun 2022 14:03:14 +0200 Subject: [PATCH 7/8] updated readme --- README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5359906..da74e8a 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ const { (async () => { await dockerSetChromiumConfig({ - revision: "123456" + revision: "123456", flags: [' -–ignore-certificate-errors'] }); const webSocketUri = await dockerRunChromium(); @@ -47,6 +47,34 @@ const webSocketUri = await dockerRunChromium({ Or by defining environment variables `DOCKER_CHROMIUM_MAX_ATTEMPTS` and `DOCKER_CHROMIUM_RETRY_INTERVAL`. Passing arguments to `dockerRunChromium` takes precedence over environment variables. +### Usage with a specified image +A specific image to be used can be set via the configuration or the environment variable. This is especially useful if you use an arm processor (Apple silicon) and the image you'll use +is platform compatible (more on this on [this repo](https://github.com/bertuz/docker-chromium-img)) + + +```javascript +const { + dockerSetChromiumConfig, + dockerRunChromium, + dockerShutdownChromium +} = require("docker-chromium"); + +(async () => { + await dockerSetChromiumConfig({ + image: 'bertuz/docker-chromium:chromium103.0.5060.53', + // this property will be used when running the image + flags: [' -–ignore-certificate-errors'], + // this property will be ignored: the image is built already + revision: "123456", + }); + const webSocketUri = await dockerRunChromium(); + // do some other stuff... + await dockerShutdownChromium(); +})(); +``` + +Alternatively, you can set the `DOCKER_CHROMIUM_USE_IMAGE` environment variable, but the config's property will take precedence on it, if passed. + ## How it works `docker-chromium` pulls a pre-built Docker image running a version of Chromium specified by you from a Docker Hub repository. You can then fetch the WebSocket URI to connect to the instance in your own application. If the pre-built image is unavailable or corrupt (rare case), a backup mechanism is in place, which builds the image from scratch locally instead. From 1be0e0b3d1be5fd2d2755fad4b010caf453d8d5a Mon Sep 17 00:00:00 2001 From: mbertamini Date: Sat, 2 Jul 2022 13:23:36 +0200 Subject: [PATCH 8/8] updated image tag used for the tests --- tests/run-container/run-container.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/run-container/run-container.test.js b/tests/run-container/run-container.test.js index 7875f67..e8d0ad1 100644 --- a/tests/run-container/run-container.test.js +++ b/tests/run-container/run-container.test.js @@ -22,7 +22,7 @@ describe('runContainer', () => { it('runs container with a specific image and provides websocket uri', async () => { dockerSetChromiumConfig({ - useImage: 'bertuz/docker-chromium:chromium103.0.5060.53-test6', + useImage: 'bertuz/docker-chromium:chromium103.0.5060.53', flags: [' -–ignore-certificate-errors'], revision: 754306 });