当前位置:首页 > 编程语言 > 正文内容

如何将Next.js应用程序容器化

a811625533年前 (2023-09-09)编程语言21

本文介绍如何使用 dockerfile应用程序进行容器化,以实现自定义部署。

使用 ,我们可以将应用程序、其环境和依赖关系打包到一个隔离的容器中。容器由在 Linux 简化版中运行的应用程序组成。Docker 映像是容器的蓝图,而容器则是映像的运行实例。

要对应用程序进行容器化,我们通过 Dockerfile 使用声明式 *** 。Docker 会读取并执行该文件中定义的脚本来构建和部署应用程序。

将应用程序容器化的优势

将应用程序容器化有很多好处,比如可移植性、稳定性、可扩展性、安全性和性能。

可移植性

封装了应用程序运行所需的一切,允许它们在不同环境之间轻松转换。无论您是在本地运行,还是在使用不同操作系统计算机上运行,抑或是在暂存和生产环境中运行,Docker 都会使用相同的组件构建应用程序,使其更易于编码测试和部署。

可扩展性

使用 Docker,你可以在不同的服务器上运行多个容器实例。容器协调器可以处理增加的流量,而不会影响应用程序的性能。

稳定性

通过在隔离的容器中运行应用程序,在开发、测试和生产系统之间移动代码时,您可以获得可预测的结果。由于容器中包含必要库和软件包的精确版本,因此可以更大限度地降低因依赖关系修订不同而出现错误的风险。

此外,当您的应用程序部署到生产服务器时,Docker 会将其与其他应用程序隔离,从而更大限度地降低受其他应用程序流量峰值影响的风险。

安全性

与传统模式相比,Docker 容器能为您的工作负载提供更安全的环境。它们将应用程序分解成更小的、松散耦合的组件,每个组件之间相互隔离,从而大大降低了攻击面。Docker 容器减少了黑客利用您的计算机系统的机会,并在发生攻击时使漏洞更难扩散。在本文中了解更多信息: 。

性能

容器不像虚拟机和传统服务器那样包含整个操作系统。因此,容器的占用空间更小,构建和启动速度更快。

要求

要使用 Docker 部署 应用程序,您需要:

  • 已安装 和 。
  • 计算机上安装并运行 (或 )。

注:在本教程中,我们假设您对 Next.js 和 Docker 有基本的了解。

从 Next.js 应用程序开始

如果从现有应用程序开始,可以跳过这一步。如果从新开始,请创建一个新的 Next.js 应用程序:

  1. 打开终端,安装 create-next-app
npm i -g create-next-app@latest
  1. 导航到要安装它的目录,并在其自己的目录中创建一个新的 Next.js 应用程序:
npx create-next-app@latest new-app

下一步会提示你为新应用程序指定一些配置选项。在本教程中,您只需接受建议的默认值即可。

  1. 要预览新应用程序,请导航到 new-app 目录并运行:
npm run dev

我们使用这种 *** 创建了一个,供您参考。

使用 Dockerfile 将 Next.js 应用程序容器化

要将 Next.js 应用程序容器化并使用 Docker 进行部署,请在应用程序的根目录中创建一个 Dockerfile

构建阶段

在您的 Dockerfile 中,首先创建应用程序的 build 阶段来构建您的应用程序:

  1. 使用官方最新稳定版 Node.js alpine 映像作为 build 阶段的基础映像:
FROM node:18-alpine AS build
WORKDIR /app
  1. package.jsonpackage-lock.json 文件复制到容器中:
COPY package*.json ./
  1. 用以下命令安装应用程序依赖项:
RUN npm ci
  1. 将应用程序代码的其余部分复制到容器中:
COPY . .
  1. 构建应用程序:
RUN npm run build

运行阶段

创建 runtime 时阶段以部署您的应用程序:

  1. 使用官方最新稳定版 Node.js alpine 映像作为 runtime 时阶段的基础映像:
FROM node:18-alpine AS runtime
  1. 将工作目录设置为 /app
WORKDIR /app
  1. package.jsonpackage-lock.json 文件复制到容器中:
COPY package*.json ./
  1. 只安装生产依赖项:
RUN npm ci --only=production
  1. 将已构建的应用程序从 build 阶段复制到 runtime 阶段:
COPY --from=build /app/.next ./.next
  1. 将公共文件夹从code>build阶段复制到 runtime 阶段:
COPY --from=build /app/public ./public
  1. 公开 3000 端口
EXPOSE 3000
  1. 以非特权用户身份运行容器:
USER node
  1. 启动 Next.js 应用程序:
CMD ["npm", "start"]

我们最终得到了下面的 Dockerfile

FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:18-alpine AS runtime
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=build /app/.next ./.next
COPY --from=build /app/public ./public
EXPOSE 3000
USER node
CMD ["npm", "start"]

使用 Docker 在本地部署应用程序

尽管您仍然可以通过运行 run npm dev 来预览应用程序,但还是要使用 Docker 在本地运行,以模拟生产环境,并测试和预览您对应用程序的 Dockerfile 所做的任何更改。

预览应用程序:

  1. 使用 docker build 构建应用程序:
docker build -t next-docker .
  1. 运行容器预览应用程序:
docker run -p 3000:3000 next-docker
  1. 浏览器上打开 http://localhost:3000

小结

在本文中,我们讨论了与传统模式相比使用 Docker 的一些优势;我们介绍了如何为 Next.js 应用程序创建 Dockerfile,使用 Docker 在本地构建和部署。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/8062.html

分享给朋友:

“如何将Next.js应用程序容器化” 的相关文章

宝塔面板教程之不同环境安装篇

宝塔面板教程之不同环境安装篇

Linux面板环境安装,主要支持LNMP和LAMP、Tomcat、node.js。不过对于大部分站长来说,主要是LNMP和LAMP两个环境的安装。 LNMP和LAMP两个环境的最大区别是,前者采用Nginx作为Web服务器,后者则采用Apache作为Web服务器。(选择哪个作为您的Web服务器,可...

宝塔面板教程之FTP管理篇

宝塔面板教程之FTP管理篇

使用宝塔面板,您可以快速地创建一个FTP管理账户,对网站文件进行管理。但有必要提醒大家的是,使用FTP远不如使用SFTP安全,你可以查看文章“”进一步了解两者之间的差异。 此外,宝塔面板的文件管理模块其实已经能够满足站长的大部分文件管理需求。当然,如果你非得要使用FTP管理服务器文件,可以参照以下...

宝塔面板教程之数据库管理篇

宝塔面板教程之数据库管理篇

宝塔的数据库管理,是基于phpmyadmin管理和新建数据库。其最大的便利性就是类似,通过面板可以快速访问进行管理操作,无需单独访问phpmyadmin的主页。 此外,在宝塔面板进行数据库管理,你也对数据库名、用户名及密码等信息一目了然,及可以对数据库执行快速备份或者导入。 添加数据...

宝塔面板教程之文件管理篇

宝塔面板教程之文件管理篇

宝塔面板其中一个最为便捷的功能之一,无需SFTP或者FTP即可对服务器的文件内容进行上传、下载、编辑及删除等管理操作。 文件管理,用于管理该服务器上的文件内容。 文件的基础操作 文件的基础操作有哪些了,主要有这些方面:复制、粘贴、剪切、删除、重命名、压缩、刷新、新建文件、新建目录。...

宝塔面板教程之软件管理篇

宝塔面板教程之软件管理篇

宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...

优化Laravel性能的17种方法

优化Laravel性能的17种方法

您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...