# 实战:部署 Node 服务

下面用一个最小 Node 服务演示从代码到容器运行的完整流程。

# 目录示例

demo-node
├─ app.js
├─ package.json
├─ Dockerfile
└─ .dockerignore
1
2
3
4
5

# app.js

const http = require("http");

const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
  res.end(JSON.stringify({ msg: "docker node service ok" }));
});

server.listen(3000, () => {
  console.log("server running at 3000");
});
1
2
3
4
5
6
7
8
9
10

# package.json

{
  "name": "demo-node",
  "version": "1.0.0",
  "main": "app.js",
  "scripts": {
    "start": "node app.js"
  }
}
1
2
3
4
5
6
7
8

# Dockerfile

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
1
2
3
4
5
6
7

# 构建镜像

docker build -t demo-node:1.0 .
1

# 运行容器

docker run -d --name demo-node -p 3000:3000 demo-node:1.0
1

浏览器访问 http://localhost:3000,返回:

{"msg":"docker node service ok"}
1

# 查看日志与排查

docker logs -f demo-node
docker exec -it demo-node /bin/sh
1
2

# 发布镜像(可选)

docker tag demo-node:1.0 yourname/demo-node:1.0
docker push yourname/demo-node:1.0
1
2

# 小结

通过这个流程可以掌握三件事:

  • 如何用 Dockerfile 构建应用镜像
  • 如何把容器端口映射到宿主机
  • 如何通过日志与 exec 做基础排查