Next.js Docker Images

Next.js Docker Images

Docker是一组平台即服务产品,可以创建用于构建、部署和测试应用程序的隔离虚拟化环境。在本教程中,我们将学习如何创建一个 Next.js 应用程序的镜像。Next.js是一个帮助构建服务器端渲染Web应用程序的React框架。

什么是 Docker 镜像?

为了运行这些应用程序,我们首先需要创建当前应用程序状态的一个镜像。镜像有时可以称为我们项目的快照。镜像是只读的,并包含了包含源代码、库、依赖项、工具和其他文件的文件,这些文件是应用程序运行所需的。

Docker镜像是一个只读模板,包含了一组用于在Docker平台上创建可以运行的容器的指令。

用一个编程类比来说,如果镜像是一个类,那么容器就是类的一个实例。容器是您使用Docker的原因。它是一个轻量级、便携的环境,用于运行我们的应用程序。

容器是Docker镜像的运行实例。容器运行实际的应用程序。

初始化NextJs Docker镜像的步骤: 按照以下步骤初始化NextJs Docker镜像:

步骤1: 初始化NextJs项目

进入您要初始化项目的目录,并使用npx下载所有所需文件。

$ npx create-next-app 

Next.js Docker Images

步骤2: 在您的代码编辑器上打开应用程序。我正在使用VS Code,并且在其上打开我的NextJs项目的命令将是:

$ cd my-app && code .

步骤3: 在你的Next.js应用的根目录中创建一个Dockerfile。

Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用的所有命令以组装镜像。在这一步中,我们将创建两个dockerfiles。

  • Dockerfile:用于生产环境的Dockerfile,或者你可以将其命名为prod.Dockerfile
  • dev.Dockerfile:用于开发环境的Dockerfile

生产环境指的是应用部署供使用,开发环境指的是应用正在开发中。

Next.js Docker Images

这是用于生产应用的 Dockerfile:

# Dockerfile for production
# 仅在需要时安装依赖
FROM node:16-alpine AS deps

# 检查 https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926
ef50a31506c3#nodealpine 了解为什么可能需要 libc6-compat。  
RUN apk add –no-cache libc6-compat

WORKDIR /app

# 基于首选的软件包管理器安装依赖
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./  
RUN   
if [ -f yarn.lock ]; then yarn –frozen-lockfile;   
elif [ -f package-lock.json ]; then npm ci;   
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i;   
else echo “Lockfile not found.” && exit 1;   
fi

# 仅在需要时重新构建源代码
FROM node:16-alpine AS builder  
WORKDIR /app  
COPY –from=deps /app/node_modules ./node_modules  
COPY . .

# Next.js 收集有关一般使用情况的完全匿名的遥测数据。
# 在这里了解更多:https://nextjs.org/telemetry
# 如果您想在构建过程中禁用遥测,请取消下面一行的注释。
# ENV NEXT_TELEMETRY_DISABLED 1

RUN yarn build

# 如果使用 npm,请取消上面的注释,并使用下面的命令
# RUN npm run build

# 生成镜像,复制所有文件并运行 next
FROM node:16-alpine AS runner  
WORKDIR /app

ENV NODE_ENV production  
# 如果您想在运行时禁用遥测,请取消下面一行的注释
# ENV NEXT_TELEMETRY_DISABLED 1

RUN addgroup –system –gid 1001 nodejs  
RUN adduser –system –uid 1001 nextjs

COPY –from=builder /app/public ./public

# 自动利用输出跟踪以减小镜像大小
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY –from=builder –chown=nextjs:nodejs /app/.next/standalone ./  
COPY –from=builder –chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 3000

ENV PORT 3000

CMD [“node”, “server.js”]

您可以在项目的根目录中创建一个名为 “Dockerfile” 的文件,并将这些指令粘贴到其中。

这是用于开发应用的 Dockerfile:

# dev.Dockerfile for development

FROM node:18-alpine

WORKDIR /app

# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
    if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
    elif [ -f package-lock.json ]; then npm ci; \
    elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i; \
    else echo "Lockfile not found." && exit 1; \
    fi

COPY . .

CMD yarn dev

步骤4: 在 next.config.js 中进行修改。要为现有项目添加对 Docker 的支持,只需将 Dockerfile 复制到项目的根目录,并将以下内容添加到 next.config.js 文件中:

// next.config.js
module.exports = {
    // ... rest of the configuration.
      output: 'standalone',
}

步骤5: 构建 Dockerfile 和 dev.Dockerfile

$ docker build -t nextjs-docker .
$ docker build -t nextjs-docker-dev -f dev.Dockerfile .

通常要花时间来第一次建立图像。

Next.js Docker Images

步骤6: 运行你的应用程序。根据你在Dockerfile上给出的标签,你现在可以使用 docker run 命令运行它们。

# For production
$ docker run -p 3000:3000 nextjs-docker
# For development, files wont be synced until step 8
$ docker run -p 3000:3000 nextjs-docker-dev

-p 标志将容器的端口暴露给 docker 外部的服务。

Next.js Docker Images

步骤7: 验证我们的应用程序是否正在运行。

Next.js Docker Images

步骤8: 允许文件更改检测:

目前一切看起来都很好,但我们还没有解决一个小问题。我们知道图像是只读的,任何在构建文件后进行的文件更改将不会在本地主机上反映出来。为了解决这个问题,我们需要使用绑定挂载(bind mount)。通过绑定挂载,我们可以控制主机上的确切挂载点。我们可以使用它来保存数据,但它通常用于向容器提供额外的数据。

$ docker run -p 3000:3000 -v $(pwd):/app  nextjs-docker-dev

-v $(pwd):/app 指定应用程序的挂载点,以便可以检测文件的更改。

Next.js Docker Images

尝试对您的文件进行一些更改,并查看是否对更改进行了跟踪。这就是关于创建NextJs Docker Images的所有内容。在geeks for geeks上阅读更多关于NextJs的内容。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程