【发布时间】:2022-09-26 17:31:31
【问题描述】:
我正在开发一个用 Astrojs 构建的网页。作为前端开发人员,我是相当新手,绝对不是 Docker 方面的专家,但我当前的工作文件夹大小为 270MB,包括依赖项,但当我构建 docker 映像时,它达到 1.32GB
这是我的 package.json 以防万一
{
\"name\": \"personalsite\",
\"version\": \"0.0.1\",
\"private\": true,
\"scripts\": {
\"dev\": \"astro dev\",
\"start\": \"astro dev\",
\"build\": \"astro build\",
\"preview\": \"astro preview\",
\"astro\": \"astro\"
},
\"dependencies\": {
\"@astrojs/image\": \"^0.5.1\",
\"@astrojs/svelte\": \"^1.0.0\",
\"@astrojs/tailwind\": \"^1.0.0\",
\"svelte\": \"^3.50.1\",
\"@fortawesome/free-brands-svg-icons\": \"^6.2.0\",
\"@fortawesome/free-solid-svg-icons\": \"^6.2.0\",
\"@tailwindcss/typography\": \"^0.5.7\",
\"astro\": \"^1.2.1\",
\"autoprefixer\": \"^10.4.8\",
\"daisyui\": \"^2.25.0\",
\"postcss\": \"^8.4.16\",
\"svelte-fa\": \"^3.0.3\"
}
}
这是我的 DockerFile
FROM node:lts-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY [\"package.json\", \"package-lock.json*\", \"npm-shrinkwrap.json*\", \"./\"]
RUN yarn install
COPY . .
EXPOSE 3000
RUN chown -R node /usr/src/app
USER node
CMD [\"yarn\", \"run\", \"start\", \"--host\"]
我什至在 Node.js 中使用了 alpine 图像,但它对我来说似乎仍然很大。 你知道这里可能是什么问题吗?
编辑:我按照 cmets 中用户的提示得到了一个多级 dockerfile,但图像大小还是有点大?现在它的大小为 654MB。
我知道这是一个很大的改进,但我仍然感到困惑,因为源代码大小为 60KB(它只是一个带有几个动画的小型个人作品集网站)
这是新更新的 dockerfile,我错过了什么吗?
FROM node:lts as builder
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY [\"package.json\", \"package-lock.json*\", \"npm-shrinkwrap.json*\", \"./\"]
RUN yarn install --silent --production=true --frozen-lockfile
COPY . .
FROM node:lts-slim
# I used slim because there were people online who recommended to not
# mix and match distros and lts-alpine uses a different linux distro
WORKDIR /usr/src/app
COPY --from=builder /usr/src/app /usr/src/app
EXPOSE 3000
RUN chown -R node /usr/src/app
USER node
CMD [\"yarn\", \"run\", \"start\", \"--host\"]
-
这是因为您的图像由节点图像和代码文件组成。
-
这也是我的猜测,但我该如何改变呢?如何在没有代码的情况下运行我的应用程序?
-
创建一个多阶段 dockerfile。在早期阶段您进行安装,在最后阶段您只复制文件。
-
用新的 dockerfile 更新了帖子,但它仍然有点大(650MB)
-
/usr/src/app 文件夹有多大?此外 node:lts-alpine 应该小于 node:lts-slim 但我对此并不积极。
标签: node.js docker yarnpkg-v2 astrojs