拉取官方 Node.js 镜像
docker pull node:latest
创建 Dockerfile,并更改 NPM 下载源为淘宝源,设置为全局持久化
# 使用最新版本的Node.js作为基础镜像
FROM node:latest
# 设置工作目录为/app
WORKDIR /app
# 更改 NPM 下载源为淘宝源,并设置为全局持久化
RUN npm config set -g registry https://registry.npm.taobao.org
# 将当前目录中的package.json和package-lock.json复制到容器中
COPY package*.json ./
# 安装依赖项
RUN npm install
# 将当前目录中的所有文件复制到容器中
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用程序
CMD ["npm", "start"]
构建自定义镜像(仅当使用了 Dockerfile 时)
在包含 Dockerfile 的项目根目录下执行构建命令,注意最后的 小数点:
docker build -t my-node-app .
运行容器并挂载本地目录
假设你的 Node.js 应用代码位于本地 /opt/module/node/ 目录,你想将此目录挂载到容器中的 /app 目录,以便于在宿主机编辑代码并在容器中实时更新,可以执行以下命令:
docker run -it -p 3000:3000 --name my-node-app -v /opt/module/node/:/app my-node-app
- -v /opt/module/node/:/app 将本地的 Node.js 应用程序目录挂载到容器内的 /app 目录。
- -p 3000:3000 映射了宿主机的 3000 端口到容器的 3000 端口。
创建一个简单的 Node.js Web 应用程序(可选)
为了演示,我们可以在本地创建一个简单的 Express 应用。例如,在本地目录 /opt/module/node/ 创建 app.js 文件:
// /opt/module/node/app.js
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Node.js in Docker!');
});
app.listen(port, () => {
console.log(`App is running at http://localhost:${port}`);
});
在容器内安装应用依赖并启动服务
# 进入容器内部
docker exec -it my-node-app bash
# 在容器内部安装Express
npm install express
# 启动Node.js应用
node app.js
验证安装和部署是否成功
在宿主机上打开浏览器,访问 http://localhost:3000,如果能看到 “Hello from Node.js in Docker!” 的消息,则表明 Node.js 已经在 Docker 容器中成功安装和部署,并且 Web 服务可以通过网络访问。