减小 Cypress docker 图像大小
Reduce Cypress docker image size
我正在 运行 UI 测试使用 Cypress 及其 docker 图像 cypress/browsers:node12.6.0-chrome75
。不幸的是,图像的大小为 1.276GB,这大大降低了我的测试速度。
有什么方法可以减少这种情况,或者是否有较小的图像可用?
这是我的 docker 文件:
FROM cypress/browsers:node12.6.0-chrome75
WORKDIR /opt/app
COPY ./.npmrc /opt/app/.npmrc
COPY ./package.json /opt/app/package.json
COPY ./yarn.lock /opt/app/yarn.lock
RUN yarn
COPY . /opt/app/
ENTRYPOINT ["yarn"]
CMD ["build"]
您可以为您的测试环境预下载 cypress/browsers:node12.6.0-chrome75
,然后当 docker 再次构建时,它将使用本地图像,而不是尝试从互联网下载。
如果以上不是您所需要的,那么您可以选择使用 slim 图像,参见 node12.6.0-chrome75 Dockerfile & its base image cypress/base:12.6.0 Dockerfile,您可以使用 node:12.6.0
找到它,您可以使用 [= 构建自己的图像15=] 比 node:12.6.0
:
小
node 12.6.0-slim 2523ec7bd8fd 7 weeks ago 151MB
node 12.6.0 7c412a558705 7 weeks ago 907MB
合并所有 docker 文件后,下一个是最终可用的 Dockerfile(注意:我删除了合并的 docker 文件中的 git --version
,因为似乎不需要 git您的方案,同时 node:12.6.0-slim
没有 git 预安装):
Dockerfile:
FROM node:12.6.0-slim
## https://superuser.com/a/1423685/458816
# RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list
RUN apt-get update && \
apt-get install --no-install-recommends -y \
libgtk2.0-0 \
libgtk-3-0 \
libnotify-dev \
libgconf-2-4 \
libnss3 \
libxss1 \
libasound2 \
libxtst6 \
xauth \
xvfb \
# install Chinese fonts
# this list was copied from https://github.com/jim3ma/docker-leanote
fonts-arphic-bkai00mp \
fonts-arphic-bsmi00lp \
fonts-arphic-gbsn00lp \
fonts-arphic-gkai00mp \
fonts-arphic-ukai \
fonts-arphic-uming \
ttf-wqy-zenhei \
ttf-wqy-microhei \
xfonts-wqy \
# clean up
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g npm@6.10.0
RUN npm install -g yarn@1.16.0
# a few environment variables to make NPM installs easier
# good colors for most applications
ENV TERM xterm
# avoid million NPM install messages
ENV npm_config_loglevel warn
# allow installing when the main user is root
ENV npm_config_unsafe_perm true
# versions of local tools
RUN echo " node version:$(node -v) \n" \
"npm version: $(npm -v) \n" \
"yarn version:$(yarn -v) \n" \
"debian version: $(cat /etc/debian_version) \n" \
"user:$(whoami) \n"
USER root
RUN node --version
RUN echo "force new chrome here"
# install Chromebrowser
RUN \
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
RUN apt-get update
# disabled dbus install - could not get it to install
# but tested an example project, and Chrome seems to run fine
# RUN apt-get install -y dbus-x11
RUN apt-get install -y google-chrome-stable
RUN rm -rf /var/lib/apt/lists/*
# "fake" dbus address to prevent errors
# https://github.com/SeleniumHQ/docker-selenium/issues/87
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null
# Add zip utility - it comes in very handy
RUN apt-get update && apt-get install -y zip
# versions of local tools
RUN echo " node version:$(node -v) \n" \
"npm version: $(npm -v) \n" \
"yarn version:$(yarn -v) \n" \
"debian version: $(cat /etc/debian_version) \n" \
"Chrome version: $(google-chrome --version) \n"
最后,使用 docker build -t cypress/browsers:custom .
构建您自己的映像,将其放入 dockerhub,您的应用程序 Dockerfile 可以切换到使用此 docker 映像。
$ docker images | grep cypress/browsers
cypress/browsers custom 15b31db2df81 About a minute ago 810MB
cypress/browsers node12.6.0-chrome75 a029268ee2c8 8 weeks ago 1.41GB
当然,你可以继续减少上面Dockerfile中不需要的包,比如zip等,继续减小体积。
我正在 运行 UI 测试使用 Cypress 及其 docker 图像 cypress/browsers:node12.6.0-chrome75
。不幸的是,图像的大小为 1.276GB,这大大降低了我的测试速度。
有什么方法可以减少这种情况,或者是否有较小的图像可用?
这是我的 docker 文件:
FROM cypress/browsers:node12.6.0-chrome75
WORKDIR /opt/app
COPY ./.npmrc /opt/app/.npmrc
COPY ./package.json /opt/app/package.json
COPY ./yarn.lock /opt/app/yarn.lock
RUN yarn
COPY . /opt/app/
ENTRYPOINT ["yarn"]
CMD ["build"]
您可以为您的测试环境预下载 cypress/browsers:node12.6.0-chrome75
,然后当 docker 再次构建时,它将使用本地图像,而不是尝试从互联网下载。
如果以上不是您所需要的,那么您可以选择使用 slim 图像,参见 node12.6.0-chrome75 Dockerfile & its base image cypress/base:12.6.0 Dockerfile,您可以使用 node:12.6.0
找到它,您可以使用 [= 构建自己的图像15=] 比 node:12.6.0
:
node 12.6.0-slim 2523ec7bd8fd 7 weeks ago 151MB
node 12.6.0 7c412a558705 7 weeks ago 907MB
合并所有 docker 文件后,下一个是最终可用的 Dockerfile(注意:我删除了合并的 docker 文件中的 git --version
,因为似乎不需要 git您的方案,同时 node:12.6.0-slim
没有 git 预安装):
Dockerfile:
FROM node:12.6.0-slim
## https://superuser.com/a/1423685/458816
# RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list
RUN apt-get update && \
apt-get install --no-install-recommends -y \
libgtk2.0-0 \
libgtk-3-0 \
libnotify-dev \
libgconf-2-4 \
libnss3 \
libxss1 \
libasound2 \
libxtst6 \
xauth \
xvfb \
# install Chinese fonts
# this list was copied from https://github.com/jim3ma/docker-leanote
fonts-arphic-bkai00mp \
fonts-arphic-bsmi00lp \
fonts-arphic-gbsn00lp \
fonts-arphic-gkai00mp \
fonts-arphic-ukai \
fonts-arphic-uming \
ttf-wqy-zenhei \
ttf-wqy-microhei \
xfonts-wqy \
# clean up
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g npm@6.10.0
RUN npm install -g yarn@1.16.0
# a few environment variables to make NPM installs easier
# good colors for most applications
ENV TERM xterm
# avoid million NPM install messages
ENV npm_config_loglevel warn
# allow installing when the main user is root
ENV npm_config_unsafe_perm true
# versions of local tools
RUN echo " node version:$(node -v) \n" \
"npm version: $(npm -v) \n" \
"yarn version:$(yarn -v) \n" \
"debian version: $(cat /etc/debian_version) \n" \
"user:$(whoami) \n"
USER root
RUN node --version
RUN echo "force new chrome here"
# install Chromebrowser
RUN \
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
RUN apt-get update
# disabled dbus install - could not get it to install
# but tested an example project, and Chrome seems to run fine
# RUN apt-get install -y dbus-x11
RUN apt-get install -y google-chrome-stable
RUN rm -rf /var/lib/apt/lists/*
# "fake" dbus address to prevent errors
# https://github.com/SeleniumHQ/docker-selenium/issues/87
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null
# Add zip utility - it comes in very handy
RUN apt-get update && apt-get install -y zip
# versions of local tools
RUN echo " node version:$(node -v) \n" \
"npm version: $(npm -v) \n" \
"yarn version:$(yarn -v) \n" \
"debian version: $(cat /etc/debian_version) \n" \
"Chrome version: $(google-chrome --version) \n"
最后,使用 docker build -t cypress/browsers:custom .
构建您自己的映像,将其放入 dockerhub,您的应用程序 Dockerfile 可以切换到使用此 docker 映像。
$ docker images | grep cypress/browsers
cypress/browsers custom 15b31db2df81 About a minute ago 810MB
cypress/browsers node12.6.0-chrome75 a029268ee2c8 8 weeks ago 1.41GB
当然,你可以继续减少上面Dockerfile中不需要的包,比如zip等,继续减小体积。