Node.js 优化Dockerfile
我们的前端有这样的Dockerfile:Node.js 优化Dockerfile,node.js,docker,Node.js,Docker,我们的前端有这样的Dockerfile: FROM node:13.12.0 RUN apt-get update && apt-get install -y --no-install-recommends \ apt-utils \ git \ xvfb \ libgtk-3-0 \ libxtst6 \ libgconf-2-4 \ libgtk2.0-0 \ libnotify-dev \ libns
FROM node:13.12.0
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-utils \
git \
xvfb \
libgtk-3-0 \
libxtst6 \
libgconf-2-4 \
libgtk2.0-0 \
libnotify-dev \
libnss3 \
libxss1 \
libasound2 \
tzdata && \
rm -rf /var/lib/apt/lists/* && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
WORKDIR /code
COPY ./ /code
RUN npm set registry <registry-url> && \
npm cache clean --force && npm install && npm run bootstrap
来自节点:13.12.0
运行apt-get-update&&apt-get-install-y--不建议安装\
apt utils\
吉特\
xvfb\
libgtk-3-0\
libxtst6\
libgconf-2-4\
libgtk2.0-0\
libnotifydev\
libnss3\
libxss1\
libasound2\
tzdata&\
rm-rf/var/lib/apt/lists/*&&\
ln-snf/usr/share/zoneinfo/$TZ/etc/localtime&&\
echo$TZ>/etc/时区
复制./docker-entrypoint.sh/docker-entrypoint.sh
入口点[“/docker ENTRYPOINT.sh”]
WORKDIR/代码
复制//代码
运行npm集合注册表&&\
npm缓存清理--强制和&npm安装和&npm运行引导
据我所知,它并没有得到优化,因为代码复制发生在依赖项安装之前,对吗?更好的方法是复制package.json并首先安装依赖项,然后复制代码?大概是这样的:
FROM node:13.12.0
RUN apt-get update && apt-get install -y --no-install-recommends \
apt-utils \
git \
xvfb \
libgtk-3-0 \
libxtst6 \
libgconf-2-4 \
libgtk2.0-0 \
libnotify-dev \
libnss3 \
libxss1 \
libasound2 \
tzdata && \
rm -rf /var/lib/apt/lists/* && \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \
echo $TZ > /etc/timezone
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
WORKDIR /code
COPY package*.json ./
RUN npm set registry <registry-url> && \
npm cache clean --force && npm install && npm run bootstrap
COPY ./ /code
ENTRYPOINT ["/docker-entrypoint.sh"]
来自节点:13.12.0
运行apt-get-update&&apt-get-install-y--不建议安装\
apt utils\
吉特\
xvfb\
libgtk-3-0\
libxtst6\
libgconf-2-4\
libgtk2.0-0\
libnotifydev\
libnss3\
libxss1\
libasound2\
tzdata&\
rm-rf/var/lib/apt/lists/*&&\
ln-snf/usr/share/zoneinfo/$TZ/etc/localtime&&\
echo$TZ>/etc/时区
复制./docker-entrypoint.sh/docker-entrypoint.sh
WORKDIR/代码
复制包*.json/
运行npm集合注册表&&\
npm缓存清理--强制和&npm安装和&npm运行引导
复制//代码
入口点[“/docker ENTRYPOINT.sh”]
我认为与Dockerfile优化相关的最重要的事情之一是将可能更改的元素放入容器的未来版本中,最新的原因是在代码部分发生任何更改的情况下,因为最新的版本不会强制在其他层上重新创建
我认为这就是Dockerfile看起来像第一个示例中的Dockerfile的原因
关于Dockerfile优化,您还可以阅读其他注意事项,例如:
我认为与Dockerfile优化相关的最重要的事情之一是将可能更改的元素放入容器的未来版本中,最新的原因是在代码部分发生任何更改的情况下,因为最新的版本不会强制在其他层上重新创建 我认为这就是Dockerfile看起来像第一个示例中的Dockerfile的原因 关于Dockerfile优化,您还可以阅读其他注意事项,例如:
hadolint/hadolint
Dockerfile
linter是一个很好的起点。使用例如docker run--rm-i hadolint/hadolintDockerfile
挂起:
/dev/stdin:5 SC2086 info: Double quote to prevent globbing and word splitting.
/dev/stdin:5 DL3008 warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
注意:次要更改由优先选择,即复制
至将从上下文复制到/code
目录中,该目录由WORKDIR
指令设置
将通过NPM_注册表的映像构建为构建参数,即:docker Build--rm--Build arg NPM_注册表=https://yarn.npmjs.org -t so:66493910。
hadolint/hadolint
Dockerfile
linter是一个很好的起点。使用例如docker run--rm-i hadolint/hadolint
将您的Dockerfile
挂起:
/dev/stdin:5 SC2086 info: Double quote to prevent globbing and word splitting.
/dev/stdin:5 DL3008 warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
注意:次要更改由优先选择,即复制
至将从上下文复制到/code
目录中,该目录由WORKDIR
指令设置
将通过NPM_注册表的映像构建为构建参数,即:docker Build--rm--Build arg NPM_注册表=https://yarn.npmjs.org -所以:66493910。
这样问下去会更好。这样问下去会更好。(由于非当前软件包几乎会立即从归档文件中删除,因此建议将其固定到确切的Debian软件包版本似乎有些奇怪;因此,标准建议始终在一行中运行apt get update和apt get install
)我喜欢它,更新包时会很快失败。可以通过在Dockerfile
或docker run
中设置#hadolint ignore=DL3008
忽略警告,即:docker run--rm-I hadolint/hadolint--ignore DL3008-
。(由于非当前软件包几乎会立即从归档文件中删除,因此建议将其固定到确切的Debian软件包版本似乎有些奇怪;因此,标准建议始终在一行中运行apt get update和apt get install
)我喜欢它,更新包时会很快失败。可以通过在Dockerfile
或docker run
中设置#hadolint ignore=DL3008
忽略警告,即:docker run--rm-I hadolint/hadolint--ignore DL3008-
。