本文基于腾讯云云服务器CVM系统工具配置文章的基础上,在腾讯云云服务器(CentOS系统)上基于镜像文件Dockerfile制作 Nodejs 镜像。
本教程的示例代码: node-v16.14.0-image
Dockerfile
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
FROM centos:centos7.9.2009
WORKDIR /opt/app
LABEL maintainer="luqiangzeng@gmail.com"
ENV NODE_PATH /usr/local/services/node
COPY ./scripts/pod-tools/ /opt/app/scripts/
COPY ./packages/node-v16.14.0-linux-x64 ${NODE_PATH}
ADD ./src ./node
RUN ln -s ${NODE_PATH}/bin/node /usr/local/bin/node && \ ln -s ${NODE_PATH}/bin/npm /usr/local/bin/npm
ENTRYPOINT ["/opt/app/scripts/run.sh"]
|
run.sh 启动脚本
run.sh
1 2 3 4 5 6 7 8 9
| #!/bin/bash
cd /opt/app/node npm i nohup node /opt/app/node/app.js &
exec "$@"
|
node app demo
src/app.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| const http = require('http'); const os = require('os');
const { logger } = require('./utils/log4js/index'); const PORT = 9090;
const handler = (request, response) => { const remoteAddressInfo = `Recei ved request from ${request.connection.remoteAddress}`; logger.info(remoteAddressInfo);
response.writeHead(200); const resMsg = `You've hit ${os.hostname()}.\n`; logger.info(resMsg); response.end(resMsg); }
var app = http.createServer(handler); app.listen(PORT);
console.log(` You can now view node-app in the browser. Local: http://localhost:${PORT} `);
|
使用 log4js
打印日志。
构建镜像,并发布至 Docker Hub
构建镜像
1 2 3 4
| git clone https://github.com/lqmeta/examples.git cd examples/node-v16.14.0/ npm run docker:build docker images
|


发布至 Docker Hub
1 2 3 4 5
| docker image tag node-v16.14.0:latest luqiangzeng/node-v16.14.0:1.0.0 docker image tag node-v16.14.0:latest luqiangzeng/node-v16.14.0:latest
docker push luqiangzeng/node-v16.14.0:1.0.0 docker push luqiangzeng/node-v16.14.0:latest
|

使用 Docker Compose 部署
docker-compose.yaml
docker-compose/docker-compose.yaml1 2 3 4 5 6 7 8 9 10 11 12 13 14
| version: "2" networks: default: driver: bridge
services: node-app-demo: restart: always image: luqiangzeng/node-v16.14.0:1.0.0 container_name: node-app-demo ports: - "9090:9090" command: /usr/sbin/init
|
启动应用
1 2 3 4 5 6
| npm run compose:up
npm run compose:ps
curl http://localhost:9090
|

这里在项目中添加了些 npm scripts 指令:
1 2 3 4
| npm run compose:up
npm run compose:ps
|

更新 docker-compose.yml 文件镜像后容器的更新启动
- v1.0.0版本 -
luqiangzeng/node-v16.14.0:1.0.0
1 2
| [coder@VM-228-146-centos node-v16.14.0]$ curl http://localhost:9090 You've hit 7c2cdf1ddff9.
|
更新下一个版本迭代:
- v1.0.1版本 -
luqiangzeng/node-v16.14.0:1.0.1
1 2
| [coder@VM-228-146-centos node-v16.14.0]$ curl http://localhost:9090 You've hit 7c2cdf1ddff9.(v1.0.1)
|
下面三个步骤进行升级更新:
1、先发布镜像 v1.0.1版本。
2、修改 docker-compose/docker-compose.yaml 的 image。
3、执行 npm run compose:update
更新 node-app-demo 容器。

参考文档