javascript - 下一步.js。 docker 镜像所需的文件

标签 javascript dockerfile next.js docker-image zeit-pkg

我正在使用 Docker 创建 Next.js 项目,但每次运行 docker build , docker 镜像为 300 MB+。我的目标是减小 docker 镜像的大小。为此,我开始使用 zeit/pkg但它不能正常工作。

问题:
docker buildNext.js 中需要哪些文件? (我在每个教程中看到 COPY . .)以及如何减小 docker 图像的大小?

我跟着这个教程:https://medium.com/@evenchange4/deploy-a-commercial-next-js-application-with-pkg-and-docker-5c73d4af2ee

Dockerfile:

FROM node:lts-alpine as build-env
WORKDIR /app

COPY . .

RUN yarn install --pure-lockfile --ignore-engines
ENV NODE_ENV=production
RUN yarn run build
RUN yarn run pkg

FROM node:alpine

RUN apk update && \
  apk add --no-cache libstdc++ libgcc ca-certificates && \
  rm -rf /var/cache/apk/*

WORKDIR /app

COPY --from=build-env /app/pkg .

ENV NODE_ENV=production

EXPOSE 8080

CMD ./next-app

包.json:
{
  "name": "next-app",
  "bin": "server.js",
  "pkg": {
    "assets": [
      ".next/**/*"
    ],
    "scripts": [
      ".next/**/*.js"
    ]
  },
  "scripts": {
    "test": "jest",
    "dev": "next",
    "build": "next build",
    "start": "NODE_ENV=production node server.js",
    "pkg": "pkg . -t node13-linux-x64 -o pkg"
  },
  "dependencies": {
    "next": "^9.4.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1"
  },
  "devDependencies": {
    "pkg": "4.4.8",
    "typescript": "^3.9.2"
  }
}

最佳答案

我知道自从提出这个问题以来已经超过 5 个月了,但我遇到了同样的问题。
我通过在 docker 中设置多阶段构建解决了这个问题,并且只复制了运行生产 nextjs 应用程序所需的文件。
我的 Dockerfile

# Build the app
FROM node:14-alpine as build
WORKDIR /app

COPY . .
RUN npm ci
RUN npm run build
COPY ./.next ./.next


# Run app
FROM node:14-alpine

# Only copy files required to run the app
COPY --from=build /app/.next ./
COPY --from=build /app/package.json ./
COPY --from=build /app/package-lock.json ./

EXPOSE 3000

# Required for healthcheck defined in docker-compose.yml
# If you don't have a healthcheck that uses curl, don't install it
RUN apk --no-cache add curl

# By adding --production npm's devDependencies are not installed
RUN npm ci --production
RUN ./node_modules/.bin/next telemetry disable

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

USER nextjs
CMD ["npm", "start"]

摘自我的 package.json
  "dependencies": {
    "next": "^9.5.5",
    "next-compose-plugins": "^2.2.0",
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },

关于javascript - 下一步.js。 docker 镜像所需的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61794150/

相关文章:

javascript - Next.js - Eslint 不会在开发模式下检查任何页面(pages/_app.js 除外)

javascript - 回调 spy 不会在流结束时被调用

docker - 在 Azure Pipelines 中指定 Dockerfile 路径

docker - 如何从不在根目录中的dockerfile访问根文件夹

php - 无法通过 docker 容器中的 apache 访问本地网站(windows 和 docker 工具箱)

google-cloud-functions - 如何在 8.0 版中使用 `target: "无服务器”`通过 Next.js 正确实现无服务器 SSR

aws-lambda - 如何在不使用无服务器组件的情况下将 next.js 9 部署到 AWS Lambda

javascript - 如何在页面上拖放 <div>

javascript - 无法将我的 javascript 文件引用到我的 xhtml 模板中

javascript - toLowerCase、数组、Object.keys、查找和 Flow 语法