根目录中创建一个 Dockerfile。
# use node 16 alpine image
FROM node:16-alpine
# create work directory in app folder
WORKDIR /app
# install required packages for node image
RUN apk --no-cache add openssh g++ make python3 git
# copy over package.json files
COPY package.json /app/
COPY package-lock.json /app/
# install all depencies
RUN npm ci && npm cache clean --force
# copy over all files to the work directory
ADD . /app
# build the project
RUN npm run build
# expose the host and port 3000 to the server
ENV HOST 0.0.0.0
EXPOSE 3000
# run the build project with node
ENTRYPOINT ["node", ".output/server/index.mjs"]
Docker阶段构建
多阶段构建使用一个带有多个 FROM 指令的 Dockerfile。每个从指令都是一个新的构建阶段,可以复制前几个阶段的工件。通过从构建阶段复制构建工件,可以摆脱所有不必要的软件包和文件。所有这些步骤都会创建额外的图层,从最终图像中删除它们。从而减少最终图像的大小。
# use node 16 alpine image as build image
FROM node:16-alpine as builder
# create work directory in app folder
WORKDIR /app
# install required packages for node image
RUN apk --no-cache add openssh g++ make python3 git
# copy over package.json files
COPY package.json /app/
COPY package-lock.json /app/
# install all depencies
RUN npm ci && npm cache clean --force
# copy over all files to the work directory
ADD . /app
# build the project
RUN npm run build
# start final image
FROM node:16-alpine
WORKDIR /app
# copy over build files from builder step
COPY --from=builder /app /app
# expose the host and port 3000 to the server
ENV HOST 0.0.0.0
EXPOSE 3000
# run the build project with node
ENTRYPOINT ["node", ".output/server/index.mjs"]