减小Cypress Docker镜像的大小

4

我正在使用Cypress的docker镜像 cypress/browsers:node12.6.0-chrome75 运行UI测试。不幸的是,该镜像的大小为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"]
1个回答

3
您可以预先下载cypress/browsers:node12.6.0-chrome75用于您的测试环境,然后再次进行docker构建时,它会使用本地镜像,而不是尝试从互联网下载。
如果上述内容不符合您的需求,则使用轻量级镜像将是您的选择,请参见node12.6.0-chrome75 Dockerfile和其基础镜像cypress/base:12.6.0 Dockerfile,您可以发现它使用node:12.6.0,您可以使用node:12.6.0-slim构建自己的镜像,与node:12.6.0相比,它更小。
node              12.6.0-slim           2523ec7bd8fd        7 weeks ago         151MB
node              12.6.0                7c412a558705        7 weeks ago         907MB

合并所有Dockerfile后,最终可工作的Dockerfile如下(注意:由于您的情况似乎不需要git,因此我在合并的Dockerfile中删除了git --version,同时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等,以继续减小大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接