Skip to content

Instantly share code, notes, and snippets.

@RyosukeCla
Last active October 13, 2022 19:49
Show Gist options
  • Save RyosukeCla/9f2547d89dd8fef673404848a1094b8d to your computer and use it in GitHub Desktop.
Save RyosukeCla/9f2547d89dd8fef673404848a1094b8d to your computer and use it in GitHub Desktop.
docker with vnc

Docker上で動くchromeをvncで確認する。

preliminary

Virtual Network Computing: ネットワーク上の離れたコンピュータを遠隔操作するためのRFBプロトコルを利用する、リモートデスクトップソフト。サーバー、クライアントで別れている。

RFB: GUI操作によるリモートアクセス用の通信プロトコル。RFBはフレームバッファレベルで動作するため、X11やWin, Macを含む全てのウィンドウシステムとアプリケーションに適応できる。

Xvfb (X virtual framebuffer): ディスプレイのハードウェアや物理的な入力デバイスを持たないマシン上で動作する X server のこと。X11 display server protocolを実装した、display server。

X Window System (X, X11): ビットマップディスプレイ上でウィンドウシステムを提供する表示プロトコル。

Objective

  • docker
    • run xvfb in container
    • run vnc server
    • run chrome on xvfb
  • host machine (mac)
    • run vnc client

Dockerfile

FROM node:11.3.0-alpine

# install headless chrome
ENV CHROME_BIN="/usr/bin/chromium-browser"
RUN echo http://dl-cdn.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories \
    && echo http://dl-cdn.alpinelinux.org/alpine/edge/main >> /etc/apk/repositories \
    && apk upgrade \
    && apk update \
    && apk add --no-cache \
    ttf-freefont \
    chromium \
    xvfb \
    x11vnc

ENV DISPLAY=:0

docker-compose.yml

version: '3.4'
services:
  web:
    image: developers-dev-web
    build:
      context: ./
    ports:
      - 5900:5900

run xvfb and vnc

Xvfb $DISPLAY -screen 0 1600x950x24 & \
x11vnc -display $DISPLAY -rfbport 5900 -passwd PASSWORD -forever

puppeteer

await puppeteer.launch({
  headless: process.env.CHROME_HEADLESS === 'true', // set true when run chrome on xvfb
  executablePath: process.env.CHROME_BIN,
  args: ['--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage']
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment