前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker - 制作Nodejs镜像

Docker - 制作Nodejs镜像

原创
作者头像
lqmeta
发布2022-02-13 15:09:47
5.5K0
发布2022-02-13 15:09:47
举报
文章被收录于专栏:得一得一

本文基于腾讯云云服务器CVM系统工具配置文章的基础上,在腾讯云云服务器(CentOS系统)上基于镜像文件Dockerfile制作 Nodejs 镜像。

本教程的示例代码: node-v16.14.0-image

Dockerfile

Dockerfile

代码语言:shell
复制
# Nodejs 服务镜像
# - https://hub.docker.com/_/centos?tab=tags&page=1
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/
# nodejs 安装包
COPY ./packages/node-v16.14.0-linux-x64 ${NODE_PATH}

# node app demo 代码
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

代码语言:shell
复制
#!/bin/bash

# 启动 nodejs 服务
cd /opt/app/node
npm i
nohup node /opt/app/node/app.js &

# run the command given as arguments from CMD
exec "$@"

node app demo

src/app.js

代码语言:javascript
复制
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

构建镜像

代码语言:shell
复制
git clone https://github.com/issaczeng/examples.git
cd examples/node-v16.14.0/
npm run docker:build
docker images

发布至 Docker Hub

代码语言:shell
复制
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

代码语言:yml docker-compose/docker-compose.yaml
复制
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

启动应用

代码语言:shell
复制
# 启动
npm run compose:up
# 查看
npm run compose:ps
# 测试验证
curl http://localhost:9090

这里在项目中添加了些 npm scripts 指令:

代码语言:shell
复制
npm run compose:up
# 实际执行了 `docker-compose -f ./docker-compose/docker-compose.yaml up -d`
npm run compose:ps
# 实际执行了 `docker-compose -f ./docker-compose/docker-compose.yaml ps`

更新 docker-compose.yml 文件镜像后容器的更新启动

  • v1.0.0版本 - luqiangzeng/node-v16.14.0:1.0.0[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[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 容器。

代码语言:shell
复制
npm run compose:update

参考文档

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dockerfile
  • run.sh 启动脚本
  • node app demo
  • 构建镜像,并发布至 Docker Hub
    • 构建镜像
      • 发布至 Docker Hub
      • 使用 Docker Compose 部署
        • 启动应用
          • 更新 docker-compose.yml 文件镜像后容器的更新启动
            • 参考文档
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档