Docker - 设置 Node.js
Docker - 设置 Node.js
Section titled “Docker - 设置 Node.js”Node.js 是一个流行的 JavaScript 运行时环境,用于构建服务器端应用程序。将 Node.js 应用程序 Docker 化可以实现开发、测试和部署环境的一致性。
我们将演示如何使用官方 Node.js Docker 镜像运行一个简单的 Node.js 脚本。
运行简单的 Node.js 脚本
Section titled “运行简单的 Node.js 脚本”第一步:拉取官方 Node.js 镜像。使用特定版本标签是个好习惯,通常基于 Alpine 的镜像体积较小。
# 拉取基于 Alpine Linux 的 Node.js 18 版本docker pull node:18-alpine第二步:在当前目录创建一个名为 HelloWorld.js 的简单 Node.js 脚本文件。
console.log('Hello World from Node.js inside Docker!');第三步:使用 docker run 在 Node.js 容器内运行该脚本。
docker run --rm -it \ --name node-hello \ -v "${PWD}":/usr/src/app \ -w /usr/src/app \ node:18-alpine node HelloWorld.js命令说明:
docker run: 启动新容器。--rm: 容器退出时自动移除(适用于一次性任务)。-it: 以交互模式并分配 TTY 运行(对于这个简单脚本并非严格必需,但这是常见做法)。--name node-hello: 为容器指定名称。-v "${PWD}":/usr/src/app: 将当前主机目录(Windows Cmd 上是${PWD}或%CD%)挂载到容器内的/usr/src/app目录。这使得容器能够访问HelloWorld.js。-w /usr/src/app: 设置容器内的工作目录为/usr/src/app。node命令将在此目录中查找脚本。node:18-alpine: 指定要使用的 Docker 镜像。node HelloWorld.js: 在容器内执行的命令(使用HelloWorld.js作为参数运行node可执行文件)。
输出:
Hello World from Node.js inside Docker!这演示了通过挂载主机目录来运行脚本的方法。对于实际的应用开发,您通常会使用 Dockerfile 构建自定义镜像。
Node.js 应用示例 Dockerfile
Section titled “Node.js 应用示例 Dockerfile”一个典型的 Node.js Web 应用 Dockerfile 可能看起来像这样:
# 使用官方 Node 运行时作为基础镜像(选择合适版本)FROM node:18-alpine
# 设置容器内的工作目录WORKDIR /usr/src/app
# 复制 package.json 和 package-lock.json(或 yarn.lock)# 先复制这些文件可以利用 Docker 缓存,如果依赖项未改变COPY package*.json ./
# 安装应用依赖RUN npm ci --only=production # 如果不使用 package-lock.json,则使用 'npm install'
# 将应用源代码打包到 Docker 镜像内COPY . .
# 使容器外部可访问端口 8080EXPOSE 8080
# 使用 CMD 定义运行时命令来运行你的应用CMD [ "node", "server.js" ]此 Dockerfile 的关键步骤:
- 从 Node 基础镜像开始。
- 设置工作目录。
- 复制
package.json和package-lock.json。 - 使用
npm ci只安装生产环境依赖(如果存在package-lock.json,这比npm install更快、更可靠)。 - 复制其余的应用代码。
- 暴露应用程序监听的端口。
- 设置启动应用程序的默认命令 (
node server.js)。
您可以使用 docker build -t my-node-app . 构建此镜像,然后使用 docker run -p 8080:8080 my-node-app 运行它。记住也要使用 .dockerignore 文件来排除 node_modules、.git 等内容,防止它们被包含在构建上下文中。