目前在用 Strapi 这个项目作为后端提供服务,为了让服务器环境尽量“干净”一点,整个项目是跑在 Docker 中的,包括 Node.js 程序和 MySQL 数据库。
由于 Strapi 经常有功能更新和安全更新,所以服务器上的 Docker 镜像也需要经常更新。
目前的 Docker 镜像在编译的时候分成了两部分,不会变化的 Node.js 和基础环境作为一个底层镜像,在此基础之上,再给不断升级版本的 Strapi 安装好 npm 包,然后编译成最终要用的镜像。
底层镜像和最终镜像的 Dockerfile 内容如下面两段代码所示,分别用命令 docker build -t strapi.node-base -f ./Dockerfile.node-base .
和 docker build -t strapi.final -f .\Dockerfile.final .
来构建镜像。
想问一下以下两段 Dockerfile 有什么可以优化的地方么?去年给 4.15.5 版本的 Strapi 生成的镜像是 890MB ,今年给 4.24.2 版本的 Strapi 生成的镜像已经 1.23GB 了。希望能够优化一下 Dockerfile ,减小生成的镜像体积。
# 底层镜像
FROM node:18-alpine as strapi.node-base
# 设置时区为东八区,这样在查看日志时才能显示正确的时间
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Installing libvips-dev for sharp Compatibility
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update \
&& apk add --no-cache build-base gcc autoconf automake zlib-dev libpng-dev nasm bash vips-dev git
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV}
WORKDIR /opt/
COPY package.json yarn.lock ./
RUN yarn global add node-gyp
# 最终镜像
FROM strapi.node-base as build
RUN yarn config set network-timeout 600000 -g && yarn config set registry https://registry.npmmirror.com && yarn install
ENV PATH /opt/node_modules/.bin:$PATH
WORKDIR /opt/app
COPY . .
RUN chown -R node:node /opt/app
USER node
RUN ["yarn", "strapi", "ts:generate-types"]
RUN ["yarn", "build"]
EXPOSE 1337
CMD ["yarn", "develop"]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.