您的当前位置:首页 > 热点 > 云计算核心技术Docker教程:为 Node.js 创建一个 Dockerfile 正文
时间:2026-11-15 来源:网络整理 编辑:热点
谷歌留痕外推【tg:seogoogle987】
Dockerfile 是一个文本文档,其中包含组装 Docker 映像的说明。当我们通过执行docker build 命令告诉 Docker 构建我们的镜像时,Docker 会读取这些指令,执行它们,并因此创建一个 Docker 镜像。
让我们来看看为我们的应用程序创建 Dockerfile 的过程。在项云计目的根目录中,创建一个名为的文件Dockerfile并在文本编辑器中打开该文件。
添加到 Dockerfile 的第一行是# syntax解析器指令。虽然是可选的,但该指令指示 Docker 构建器在解析 Dockerfile 时使用什么语法,并允许启用 BuildKit 的旧 Docker 版本在开始构建算核之前升级解析器。解析器指令 必须出现在 Dockerfile 中任何其他注释、空格或 Dockerfile 指令之前,并且应该是 Dockerfiles 中的第一行。
# syntax=docker/dockerfile:1
我们建议使用docker/dockerfile:1,它始终指向版本 1 语法的心技最新版本。BuildKit 在构建之前会自动检查语法的更新,确保您使用的是最新版本。
接下来,我们需要在我们的 Dockerfile 中添加一行,告诉 Docker 我们希望为我们的应用程序使用什么基础镜像。
# syntax=docker/dockerfile:1
FROM node:12.18.1
D术Docker 镜像可以从其他镜像继承。因此,我们将使用官方的 Node.js 镜像,而不是创建我们自己的基础镜像,该镜像已经拥有运行 Node.js 应用程序所需的所有工具和包。您可以像考虑面向对象编程中的类继承一样考虑这一点。例如,如果我们能够在 JavaScript 中创建 Docker 镜像,oc我们可能会编写如下内容。
class MyImage extends NodeBaseImage {}
这将创建一个称为MyImage从基类继承功能的类NodeBaseImage。
同样,当我们使用该FROM命令时,我们会告诉 Docker 在我们的镜像中包含镜像中的所有功能node:1ke2.18.1。
在NODE_ENV环境变量指定在其中的应用程序运行的环境(通常,开发或生产)。为提高性能可以做的最简单的事情之一是设置NODE_ENV为production.
ENV NODE_ENV=production
为了在运行其余命令时更容易,让我们创建一个工作目录。这会指示 Docker教r 使用此路径作为所有后续命令的默认位置。这样我们就不必输入完整的文件路径,而是可以使用基于工作目录的相对路径。
WORKDIR /app
通常,一旦您下载了用 Node.js 编写的项目,您要做的第一件事就是安装 npm 包。这可确保您的应用程序将其所有依赖项安装到node_modulesNode 运程:行时能够找到它们的目录中。
在我们可以运行之前npm install,我们需要将我们的package.json和package-lock.json文件放入我们的图像中。我们使用COPY命令来做到这一点。该COPY命令有两个参数。第一个参数告诉 Docker 您想要复制到镜像中的文件。第二为 个参数告诉 Docker 您希望将该文件复制到何处。我们将把package.json和package-lock.json文件复制到我们的工作目录中/app。
COPY ["package.json", "package-lock.json*", "./"]
请注意,我们只是复制 package.Nojson 文件,而不是复制整个工作目录。这使我们能够利用缓存的 Docker 层。一旦我们将文件放入映像中,我们就可以使用该RUN命令来执行命令 npm install。这与我们在本地机器上运行 npm install 完全相同,但这次这些 Node 模块将安装到node_modules我们映像内的目录中de。
RUN npm install --production
此时,我们有一个基于节点版本 12.18.1 的镜像,并且我们已经安装了我们的依赖项。我们需要做的下一件事是将我们的源代码添加到图像中。我们将像使用package.json上面的文件一样使用 COPY 命令。
COPY . .
COPY 命令获取位于当.j前目录中的所有文件并将它们复制到映像中。现在,我们要做的就是告诉 Docker 当我们的镜像在容器内运行时我们想要运行什么命令。我们用CMD命令来做到这一点。
CMD [ "node", "server.js" ]
这是完整的 Dockerfile。
# syntax=docker/dockerfils e:1
FROM node:12.18.1
ENV NODE_ENV=production
WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
CMD [ "node", "serv创建er.js" ]
2021年值得关注的5个大数据趋势2026-11-04
阿里云宣布将关停澳大利亚、印度地域数据中心服务2026-08-28
消息称谷歌与SpaceX正洽谈将数据中心送入太空2026-06-15
OpenStack的HugePages内存大页动态分配的探索与实践2026-11-04
英伟达拟向AI初创公司Poolside投资10亿美元,估值飙升至120亿2026-06-15
标签: 铜师傅 铜葫芦系列 大圣系列 文创产品2026-09-15
医疗 AI 新突破!百川推出 “医生版 ChatGPT”,让诊疗更精准2026-05-24
标签: 剑桥科技 高速光模块 财报分析 2026年Q12026-05-19
工信部:加强通用大模型和行业大模型研发布局,加快建设工业领域高质量数据集2026-06-09
标签: 中国移动 2026年一季度报告 财报 通信运营商2026-08-25
马斯克旗下xAI将投资200多亿美元在密西西比州建设数据中心2026-11-06
强化学习与3D视觉结合新突破:高效能在线码垛机器人2026-10-25
标签: 源策未来 ArchonRobotics 人形基座模型 全身智能2026-09-29
甄嬛传钮钴禄是什么梗2026-06-03
标签: 豆包 春晚 火山引擎 宇树机器人2026-08-11
自变量机器人完成近10亿元A+轮融资,阿里云、国科投资领投2026-07-03
详解 Pandas 与 Lambda 结合进行高效数据分析2026-08-23
云安全日报210602:红帽核心应用程序组件发现内存损坏漏洞,需要尽快升级2026-05-29