Docker:将docker的node-red容器连同安装的节点保存为docker镜像(打成tar包)

一、基础准备

  1. 在服务器1上安装docker,参考链接(实战总结):【docker使用安装教程
  2. 通过docker下载node-red镜像,启动node-red容器,参考链接(实战总结):【docker部署多个node-red操作过程

我这边启动的docker容器为:1

  1. 通过node-red容器安装常用的节点
    1

这里我工作中常用的节点如下:
(1)数据库相关:

  • mysql操作: node-red-contrib-stackhero-mysql@1.0.5
  • redis操作: node-red-contrib-redis@1.3.9
  • SqlServer操作:node-red-contrib-mssql@0.0.7

(2)数采相关:

  • node-red-contrib-modbus@5.30.0
  • node-red-contrib-opcua@0.2.323
  • node-red-contrib-s7@3.1.0
  • node-red-node-serialport@2.0.2
  • @meowwolf/node-red-contrib-amqp@2.4.1

(3)其他:

  • 定时器:node-red-contrib-cron-plus@2.1.0
  • ftp文件远程:node-red-contrib-ftp-sftp@1.8.8
  • 数组循环:node-red-contrib-loop-processing@0.5.1
  • 时钟转换:node-red-contrib-moment@5.0.0
  • 数据转换:node-red-contrib-buffer-parse

二、构建容器镜像, 将docker容器保存为 tar 包

1
  构建容器镜像有两种方法,通过docker commit或Dockerfile构建镜像,这里我们使用的是docker commit 构建镜像。步骤如下:

  1. 确保容器是运行状态,执行命令:
# 查看docker容器,展示的STATUS为容器状态
docker ps -a
# 如果容器状态为Exited关闭,则需要启动容器
docker start 容器名称
# 或者通过容器ID启动
docker start 容器ID

1

其他命令,如下:

# 关闭容器
docker stop 容器ID或容器名称
# 删除容器 - 删除前必须先关闭容器
docker rm 容器ID或容器名称
  1. 要想将node-red容器包含安装的节点一起保存,需要将节点的安装包目录复制到容器内部的2个目录:
  • /usr/local/lib/node_modules/:全局安装Node.js模块。当使用npm(Node.js的包管理器)以全局模式安装模块时,这些模块会被放置在这个目录下。
  • **/usr/src/node-red/node_modules/:**Node-RED项目的本地node_modules目录,会存储Node-RED项目所需要的所有Node.js模块。这些模块是项目依赖的一部分,而不是全局安装的。

(1) 先找到该容器安装节点的安装包目录,选择一个节点名称全局搜索:find / -name 节点名称
(2)找到对应的目录后,将node_modules目录下的所有内容复制到容器内部的/usr/local/lib/node_modules/和/usr/src/node-red/node_modules/目录,命令如下:

 docker cp 节点安装目录/. 容器ID:复制的目标目录
 # 示例
 docker cp /home/node_red/node_modules/. 3eb052b27233:/usr/local/lib/node_modules/
 docker cp /home/node_red/node_modules/. 3eb052b27233:/usr/src/node-red/node_modules/

1

  1. 通过docker commit 命令,将一个运行中的容器保存为镜像,详细如下:
docker commit 容器id 自定义镜像名称:镜像版本
# 示例
docker commit 3eb052b27233 mynodered:1.2

1

  1. 查看镜像是否保存成功,执行命令:docker images
    1

  2. 通过镜像创建容器,看镜像是否正确,执行命令:

docker run -u root:node-red -v /home/dataStore:/usr/src/node-red/data --privileged=true -p 端口号:1880 --name 容器名 -d 镜像名称:镜像版本
# 示例
docker run -u root:node-red -v /home/dataStore:/usr/src/node-red/data --privileged=true -p 1882:1880 --name nodered2 -d mynodered:1.2 --restart=always

1
成功运行后,进入页面看是否包含指定节点:
1
6. 打包镜像文件,执行命令:

docker save -o /存放目录/自定义镜像文件名称.tar 镜像名称:镜像版本
# 示例
docker save -o /home/mynodered1.2.tar mynodered:1.2 

1
打包成功后,在对应的目录下能看到tar文件。

三、从 tar 包导入docker镜像

  1. 将上面打好的tar包传输到需要运行这个镜像的服务器2上面
  2. 从 tar 包导入镜像,执行命令:
docker load -i <tar包名>.tar 
# 示例
docker load -i mynodered1.2.tar 

1
3. 查看镜像是否成功导入,执行命令:docker images
3
4. 通过镜像启动容器,执行命令:

docker run -u root:node-red -v /home/dataStore:/usr/src/node-red/data --privileged=true -p 端口号:1880 --name 容器名 -d 镜像名称:镜像版本
# 示例
docker run -u root:node-red -v /home/dataStore:/usr/src/node-red/data --privileged=true -p 1882:1880 --name nodered2 -d mynodered:1.2 --restart=always

1
成功运行后,进入页面看是否包含指定节点:
1

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值