Docker与JavaScript:从零开始容器化Node.js应用

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Docker 和 JavaScript:Node.js 应用容器化完全指南



现代 Web 开发离不开容器化技术。Docker 已成为在隔离环境中打包、交付和运行应用的事实标准。本文将详细介绍如何使用 Docker 对基于 Node.js 的 JavaScript 应用进行容器化。您将学习如何创建优化的 Dockerfile、管理镜像和容器,并了解最佳实践。



什么是 Docker,JavaScript 开发者为何需要它?



Docker 是一个用于在容器中开发、交付和运行应用的平台。容器是一种轻量级、独立的可执行环境,包含应用运行所需的一切:代码、运行时、系统工具、库和设置。



对于使用 Node.js 的 JavaScript 开发者来说,Docker 解决了几个关键问题:



  • 环境可重现性:“在我的机器上能运行”——这不再是问题。Docker 确保应用在开发者的电脑、CI/CD 服务器和生产环境中运行一致。
  • 依赖隔离:每个应用拥有自己的一套依赖,不会与其他项目冲突。
  • 简化部署:Docker 镜像可以轻松在任何支持 Docker 的平台上运行(Linux、Windows、macOS、云服务器)。
  • 可扩展性:容器易于使用 Docker Compose 或 Kubernetes 等编排工具进行水平扩展。


为 Node.js 应用创建 Dockerfile



Dockerfile 是一个包含构建 Docker 镜像指令的文本文件。让我们逐步为典型的 Express.js 应用创建 Dockerfile。



假设我们有一个简单的 Node.js 应用,结构如下:



my-node-app/├── package.json├── package-lock.json├── src/│   └── index.js└── Dockerfile


src/index.js 的内容:



const express = require('express');const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.send('Hello from Dockerized Node.js!');});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


现在我们来创建 Dockerfile:



# 使用官方 Node.js 18 版本镜像 (LTS)FROM node:18-alpine

# 设置容器内的工作目录WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json 文件COPY package*.json ./

# 安装应用依赖RUN npm ci --only=production

# 复制应用源代码COPY . .

# 指定应用监听的端口EXPOSE 3000

# 启动应用的命令CMD ["node", "src/index.js"]


关键点解析:

  • FROM node:18-alpine — 使用基于 Alpine Linux 的最小镜像,这能显著减小最终镜像的大小。
  • WORKDIR — 设置工作目录,后续所有命令都将相对于此目录执行。
  • COPY package*.json ./ — 在复制源代码 之前 仅复制依赖文件。这样如果 package.json 没有变化,可以缓存安装依赖的层。
  • RUN npm ci --only=production — 根据 lock 文件安装依赖。标志 --only=production 排除了开发依赖(测试、代码检查工具等),从而减小镜像体积。
  • EXPOSE 3000 — 文档化地指明应用监听端口 3000。这不会自动打开端口,但为 Docker 提供提示信息。


构建并运行容器



博客

书籍推荐