Skip to content

Instantly share code, notes, and snippets.

@jp
Created November 4, 2015 20:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jp/6072b62804c1f945b347 to your computer and use it in GitHub Desktop.
Save jp/6072b62804c1f945b347 to your computer and use it in GitHub Desktop.
Protractor / Selenium Dockerfile
FROM library/java:8-jre
ENV NODE_VERSION 4.2.0
ENV NVM_DIR /usr/local/nvm
ENV DISPLAY :10
ENV DEBIAN_FRONTEND noninteractive
# Replace shell with bash so we can source files
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
# Set debconf to run non-interactively
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get update
RUN apt-get install -y \
curl \
xvfb \
libgconf-2-4 \
libexif12 \
supervisor \
netcat-traditional
# install ffmpeg
RUN curl http://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2015.6.1_all.deb \
-o /tmp/deb-multimedia-keyring_2015.6.1_all.deb && \
dpkg -i /tmp/deb-multimedia-keyring_2015.6.1_all.deb && \
rm /tmp/deb-multimedia-keyring_2015.6.1_all.deb
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list && \
echo "deb http://www.deb-multimedia.org jessie main non-free" >> /etc/apt/sources.list && \
echo "deb http://www.deb-multimedia.org jessie-backports main" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y \
# ffmpeg \
google-chrome-stable
# remove packages & listings to reduce image size
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash \
&& source $NVM_DIR/nvm.sh \
&& nvm install $NODE_VERSION \
&& nvm alias default $NODE_VERSION \
&& nvm use default
ENV NODE_PATH $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
ENV PATH $NVM_DIR/versions/node/v$NODE_VERSION/bin:$PATH
RUN ln -s $NVM_DIR/versions/node/v$NODE_VERSION/bin/node /usr/bin/node
RUN npm install -g protractor
RUN echo -e "[program:xvfb]\n\
command=Xvfb :10 -extension RANDR -noreset -ac -screen 10 1920x1200x16\n\
process_name=%(program_name)s\n\
numprocs=1\n\
numprocs_start=0\n\
priority=999\n\
autostart=true\n\
autorestart=true\n\
startsecs=1\n\
startretries=3\n\
exitcodes=0,2\n\
stopsignal=TERM\n\
stopwaitsecs=10\n\
user=root\n\
redirect_stderr=false\n\
stdout_logfile=AUTO\n\
stdout_logfile_maxbytes=50MB\n\
stdout_logfile_backups=10\n\
stdout_capture_maxbytes=0\n\
stdout_events_enabled=false\n\
stderr_logfile=AUTO\n\
stderr_logfile_maxbytes=50MB\n\
stderr_logfile_backups=10\n\
stderr_capture_maxbytes=0\n\
stderr_events_enabled=false\n\
directory=/root\n\
serverurl=AUTO" > /etc/supervisor/conf.d/xvfb.conf
RUN echo -e "[program:webdriver]\n\
command=$NVM_DIR/versions/node/v$NODE_VERSION/bin/webdriver-manager start --seleniumPort 3003\n\
process_name=%(program_name)s\n\
numprocs=1\n\
numprocs_start=0\n\
priority=999\n\
autostart=true\n\
autorestart=true\n\
startsecs=1\n\
startretries=3\n\
exitcodes=0,2\n\
stopsignal=TERM\n\
stopwaitsecs=10\n\
user=node\n\
redirect_stderr=false\n\
stdout_logfile=AUTO\n\
stdout_logfile_maxbytes=50MB\n\
stdout_logfile_backups=10\n\
stdout_capture_maxbytes=0\n\
stdout_events_enabled=false\n\
stderr_logfile=AUTO\n\
stderr_logfile_maxbytes=50MB\n\
stderr_logfile_backups=10\n\
stderr_capture_maxbytes=0\n\
stderr_events_enabled=false\n\
directory=/tmp/\n\
serverurl=AUTO" > /etc/supervisor/conf.d/webdriver.conf
# Install Selenium and Chrome driver
RUN webdriver-manager update
# Add a non-privileged user for running Protrator
RUN adduser --home /project --uid 1000 \
--disabled-login --disabled-password --gecos node node
# Container's entry point, executing supervisord in the foreground
CMD ["/usr/bin/supervisord", "-n"]
VOLUME ["/scenarios"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment