云计算核心技术Docker教程:为 Node.js 创建一个 Dockerfile
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 Dock术Der 镜像可以从其他镜像继承。因此,我们将使用官方的 Node.js 镜像,而不是创建我们自己的基础镜像,该镜像已经拥有运行 Node.js 应用程序所需的所有工具和包。您可以像考虑面向对象编程中的类继承一样考虑这一点。例如,如果我们能够在 JavaScript 中创建 Docker 镜像,我们可能会oc编写如下内容。 class MyImage extends NodeBaseImage {} 这将创建一个称为MyImage从基类继承功能的类NodeBaseImage。 同样,当我们使用该FROM命令时,我们会告诉 Docker 在我们的镜像中包含镜像中的所有功能node:12.18.1。 在keNODE_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.json 文件,而不是复制整个No工作目录。这使我们能够利用缓存的 Docker 层。一旦我们将文件放入映像中,我们就可以使用该RUN命令来执行命令 npm install。这与我们在本地机器上运行 npm install 完全相同,但这次这些 Node 模块将安装到node_modules我们映像内的目录中。 RUN npm installde --production 此时,我们有一个基于节点版本 12.18.1 的镜像,并且我们已经安装了我们的依赖项。我们需要做的下一件事是将我们的源代码添加到图像中。我们将像使用package.json上面的文件一样使用 COPY 命令。 COPY . . COPY 命令获取位于当前目录中的所有文件并将它们复制到.j映像中。现在,我们要做的就是告诉 Docker 当我们的镜像在容器内运行时我们想要运行什么命令。我们用CMD命令来做到这一点。 CMD [ "node", "server.js" ] 这是完整的 Dockerfile。 # syntax=docker/dockerfile:1 FROM node:12.18.1 Es NV NODE_ENV=production WORKDIR /app COPY ["package.json", "package-lock.json*", "./"] RUN npm install --production COPY . . CMD [ "node", "server.js" ]
- 最近发表
- 随机阅读
-
- 2万美元买个“家务替身”?OpenAI投资的1X Neo人形机器人开启预售,明年进美国家庭
- AWS、Azure和GCP:云服务的详细比较
- 标签: 袁娅维 音乐 大东北我的家乡
- 在家办公效率低?谷歌调查得出相反结论 但仍要求员工返回办公室
- 标签: 字节跳动 豆包AI眼镜 人工智能眼镜 AI硬件
- 标签: B站 游戏业务 广告收入 月均付费用户
- 标签: 瑞幸咖啡 压榨员工 克扣工时 BUG栏目
- 大脑模拟NLP,高德纳奖得主:神经元集合演算用于句子解析
- 标签: 抖音
- 木地板泡水了怎么处理
- 标签: 苹果 iPhone 17 M5芯片 Apple Intelligence
- 云计算核心技术Docker教程:Docker 守护进程dockerd运行多个守护程序
- 标签: 华硕 2026财年 财报 第一季度
- Facebook将开始在Oculus虚拟现实设备上测试广告
- Hdfs 相对路径与静态代码块引起的问题
- 2021年将会成为主流的四个云计算技术
- 标签: 小红书 童模经济 儿童保护 未成年人模式
- 标签: 法拉第未来 贾跃亭 EAI机器人 FF汽车机器人
- 标签: 罗永浩 科技创新大会 十字路口 创新产品
- 首发:量子算力正式“拥抱”AI,国产超导量子计算机“本源悟空”实现重大跨越
- 搜索
-
- 友情链接
-
- 标签: 康师傅
- 亚马逊云科技季度营收增速创3年来最高,CEO安迪•贾西:非常满意
- 标签: 鼎捷数智 EIOSpace 雅典娜平台 企业智能运行空间
- MIT给激光雕刻机安上AI,自动辨别材料确定雕刻力度,准确率达98%
- 云安全日报210312:IBM DB2数据库管理系统发现拒绝服务漏洞,需要尽快升级
- Facebook推出VR远程办公应用 称之为“向元宇宙迈出的一步”
- 阻冲之什么梗
- 云安全日报210319:GitLab开源代码管理仓库发现远程代码执行漏洞,需要尽快升级
- 标签: 苹果 Q.ai AirPods Vision Pro
- 标签: 虎牙 王者荣耀 鹅鸭杀 英雄联盟
- Google Research:哥德尔奖、高德纳奖得主解析「大脑中文字表征」