新聞中心
PRESS CENTER
中的一些,并支持多種架構(gòu)(amd64、arm32v6、arm32v7、arm64v8 和 s390x)。
從 Node-RED 1.0 開始,Docker Hub上的存儲庫 已重命名為nodered/node-red.
快速開始
要以最簡單的形式在 Docker 中運(yùn)行,只需運(yùn)行:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
讓我們剖析一下這個(gè)命令:
docker run - run this container, initially building locally if necessary
-it - attach a terminal session so we can see what is going on
-p 1880:1880 - connect local port 1880 to the exposed internal port 1880
-v node_red_data:/data - mount a docker named volume called `node_red_data` to the container /data directory so any changes made to flows are persisted
--name mynodered - give this machine a friendly local name
nodered/node-red - the image to base it on - currently Node-RED v1.2.0
運(yùn)行該命令應(yīng)該會給出一個(gè)終端窗口,其中包含正在運(yùn)行的 Node-RED 實(shí)例。
Welcome to Node-RED
===================
10 Oct 12:57:10 - [info] Node-RED version: v1.2.0
10 Oct 12:57:10 - [info] Node.js version: v10.22.1
10 Oct 12:57:10 - [info] Linux 4.19.76-linuxkit x64 LE
10 Oct 12:57:11 - [info] Loading palette nodes
10 Oct 12:57:16 - [info] Settings file : /data/settings.js
10 Oct 12:57:16 - [info] Context store : 'default' [module=memory]
10 Oct 12:57:16 - [info] User directory : /data
10 Oct 12:57:16 - [warn] Projects disabled : editorTheme.projects.enabled=false
10 Oct 12:57:16 - [info] Flows file : /data/flows.json
10 Oct 12:57:16 - [info] Creating new flow file
10 Oct 12:57:17 - [warn]
---------------------------------------------------------------------
Your flow credentials file is encrypted using a system-generated key.
If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.
You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
---------------------------------------------------------------------
10 Oct 12:57:17 - [info] Starting flows
10 Oct 12:57:17 - [info] Started flows
10 Oct 12:57:17 - [info] Server now running at http://127.0.0.1:1880/
[...]
然后,您可以瀏覽以http://{host-ip}:1880獲取熟悉的 Node-RED 桌面。
這樣做的好處是,通過給它命名(mynodered)我們可以更容易地操作它,并且通過修復(fù)我們知道我們熟悉的主機(jī)端口。當(dāng)然,這確實(shí)意味著我們一次只能運(yùn)行一個(gè)實(shí)例……但是一次只能運(yùn)行一個(gè)步驟。
如果我們對所看到的感到滿意,我們可以將終端與Ctrl-p Ctrl-q- 容器將繼續(xù)在后臺運(yùn)行。
要重新連接到終端(查看日志記錄),請運(yùn)行:
docker attach mynodered
如果您需要重新啟動容器(例如在重新啟動或重新啟動 Docker 守護(hù)程序之后):
docker start mynodered
并在需要時(shí)再次停止:
docker stop mynodered
圖像變化
Node-RED 映像基于官方 Node JS Alpine Linux映像,以使它們盡可能小。使用 Alpine Linux 減少了構(gòu)建的映像大小,但刪除了本機(jī)模塊編譯所需的標(biāo)準(zhǔn)依賴項(xiàng)。如果要添加具有本機(jī)依賴項(xiàng)的依賴項(xiàng),請?jiān)谶\(yùn)行的容器上使用缺少的包擴(kuò)展 Node-RED 映像或構(gòu)建新映像,請參閱docker -custom,它在 Node-RED Docker 項(xiàng)目中的README.md上進(jìn)行了擴(kuò)展。
有關(guān)詳細(xì)的圖像、標(biāo)簽和清單信息,請參閱Github 項(xiàng)目自述文件。
例如:假設(shè)您在具有arm32v7as 架構(gòu)的 Raspberry PI 3B 上運(yùn)行。然后只需運(yùn)行以下命令來拉取鏡像(由 標(biāo)記1.2.0-10-arm32v7),然后運(yùn)行容器。
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red:latest
相同的命令可用于在 amd64 系統(tǒng)上運(yùn)行,因?yàn)?Docker 發(fā)現(xiàn)它在 amd64 主機(jī)上運(yùn)行并拉取帶有匹配標(biāo)簽 ( 1.2.0-10-amd64) 的映像。
這樣做的好處是您不需要知道/指定您正在運(yùn)行的架構(gòu),并使 docker run 命令和 docker compose 文件更加靈活且可跨系統(tǒng)交換。
注意:目前 Docker 的體系結(jié)構(gòu)檢測中存在一個(gè)錯(cuò)誤,arm32v6例如 Raspberry Pi 零或 1。對于這些設(shè)備,您當(dāng)前需要指定完整的圖像標(biāo)簽,例如:
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red:1.2.0-10-arm32v6
管理用戶數(shù)據(jù)
使用 Docker 運(yùn)行 Node-RED 后,我們需要確保在容器被破壞時(shí)不會丟失任何添加的節(jié)點(diǎn)或流??梢酝ㄟ^將數(shù)據(jù)目錄掛載到容器外部的卷來保存此用戶數(shù)據(jù)。這可以使用綁定掛載或命名數(shù)據(jù)卷來完成。
Node-RED 使用/data容器內(nèi)的目錄來存儲用戶配置數(shù)據(jù)。
使用主機(jī)目錄進(jìn)行持久化(綁定掛載)
要將容器內(nèi)的 Node-RED 用戶目錄保存到容器外的主機(jī)目錄,可以使用以下命令。要允許訪問此主機(jī)目錄,容器內(nèi)的 node-red 用戶(默認(rèn) uid=1000)必須與主機(jī)目錄的所有者具有相同的 uid。
docker run -it -p 1880:1880 -v /home/pi/.node-red:/data --name mynodered nodered/node-red
在此示例中,主機(jī)/home/pi/.node-red目錄綁定到容器/data目錄。
注意:從 0.20 版遷移到 1.0 版的用戶需要確保任何現(xiàn)有/data 目錄都具有正確的所有權(quán)。從 1.0 開始,這需要是1000:1000. 這可以通過命令強(qiáng)制sudo chown -R 1000:1000 path/to/your/node-red/data
有關(guān)權(quán)限的詳細(xì)信息,請參閱wiki。
使用命名數(shù)據(jù)卷
Docker 還支持使用命名數(shù)據(jù)卷 在容器外存儲持久或共享數(shù)據(jù)。
創(chuàng)建一個(gè)新的命名數(shù)據(jù)卷來保存我們的用戶數(shù)據(jù)并使用該卷運(yùn)行一個(gè)新容器。
$ docker volume create --name node_red_data
$ docker volume ls
DRIVER VOLUME NAME
local node_red_data
$ docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
如果你需要從掛載的卷中備份數(shù)據(jù),你可以在容器運(yùn)行時(shí)訪問它。
$ docker cpmynodered:/data/your/backup/directory
使用 Node-RED 創(chuàng)建和部署一些示例流程,我們現(xiàn)在可以銷毀容器并啟動一個(gè)新實(shí)例,而不會丟失我們的用戶數(shù)據(jù)。
$ docker stop mynodered
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
更新
由于 /data 現(xiàn)在保存在容器之外,因此更新基本容器映像現(xiàn)在就像
$ docker pull nodered/node-red
$ docker stop mynodered
$ docker rm mynodered
$ docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
Docker 堆棧/Docker 撰寫
下面是一個(gè)可以由docker stack或運(yùn)行的 Docker Compose 文件示例docker-compose。有關(guān)Docker 堆棧和Docker compose的更多信息,請參閱官方 Docker 頁面。
################################################################################# Node-RED Stack or Compose################################################################################# docker stack deploy node-red --compose-file docker-compose-node-red.yml# docker-compose -f docker-compose-node-red.yml -p myNoderedProject up################################################################################version: "3.7"services:
node-red:
image: nodered/node-red:latest
environment:
- TZ=Europe/Amsterdam
ports:
- "1880:1880"
networks:
- node-red-net
volumes:
- node-red-data:/datavolumes:
node-red-data:networks:
node-red-net:
上面的撰寫文件:
創(chuàng)建節(jié)點(diǎn)紅色服務(wù)
拉取最新的節(jié)點(diǎn)紅色圖像
將時(shí)區(qū)設(shè)置為歐洲/阿姆斯特丹
將容器端口 1880 映射到主機(jī)端口 1880
創(chuàng)建一個(gè) node-red-net 網(wǎng)絡(luò)并將容器附加到該網(wǎng)絡(luò)
/data將容器內(nèi)的目錄持久化到node-red-dataDocker 中的卷
在本地資源中復(fù)制的 Dockerfile
使用本地目錄中的文件填充 Node-RED Docker 映像有時(shí)會很有用(例如,如果您希望將整個(gè)項(xiàng)目保存在 git 存儲庫中)。為此,您需要本地目錄如下所示:
Dockerfile
README.md
package.json # add any extra nodes your flow needs into your own package.json.
flows.json # the normal place Node-RED store your flows
flows_cred.json # credentials your flows may need
settings.js # your settings file
注意:如果您想在外部掛載 /data 卷,此方法不適合。如果您需要使用外部卷進(jìn)行持久性,則將您的設(shè)置和流文件復(fù)制到該卷。
以下 Dockerfile 在基礎(chǔ) Node-RED Docker 映像上構(gòu)建,但另外將您自己的文件移動到該映像中:
FROM nodered/node-red
# Copy package.json to the WORKDIR so npm builds all
# of your added nodes modules for Node-RED
COPY package.json .
RUN npm install --unsafe-perm --no-update-notifier --no-fund --only=production
# Copy _your_ Node-RED project files into place
# NOTE: This will only work if you DO NOT later mount /data as an external volume.
# If you need to use an external volume for persistence then
# copy your settings and flows files to that volume instead.
COPY settings.js /data/settings.js
COPY flows_cred.json /data/flows_cred.json
COPY flows.json /data/flows.json
# You should add extra nodes via your package.json file but you can also add them here:
#WORKDIR /usr/src/node-red
#RUN npm install node-red-node-smooth
注意:該package.json文件必須在腳本部分中包含一個(gè)啟動選項(xiàng)。例如默認(rèn)容器是這樣的:
"scripts": {
"start": "node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS",
...
Dockerfile 順序和構(gòu)建速度
雖然沒有必要,但最好COPY package... npm install...盡早執(zhí)行這些步驟,因?yàn)楸M管flows.json在 Node-RED 中工作時(shí)會經(jīng)常更改,但package.json只有在更改項(xiàng)目中的模塊時(shí)才會更改。而且由于在更改npm install時(shí)需要執(zhí)行的步驟package.json有時(shí)可能很耗時(shí),因此最好在 Dockerfile 中更早地執(zhí)行耗時(shí)的、通常不變的步驟,以便可以重用這些構(gòu)建映像,從而使后續(xù)的整體構(gòu)建更快。
憑據(jù)、機(jī)密和環(huán)境變量
當(dāng)然,你永遠(yuǎn)不想在任何地方硬編碼憑證,所以如果你需要在 Node-RED 項(xiàng)目中使用憑證,上面的 Dockerfile 會讓你在你的settings.js…
module.exports = {
credentialSecret: process.env.NODE_RED_CREDENTIAL_SECRET // add exactly this
}
…然后當(dāng)你在 Docker 中運(yùn)行時(shí),你將一個(gè)環(huán)境變量添加到你的run命令中…
docker run -e "NODE_RED_CREDENTIAL_SECRET=your_secret_goes_here"
構(gòu)建和運(yùn)行
您通常構(gòu)建此 Dockerfile:
docker build -t your-image-name:your-tag .
要在本地運(yùn)行以進(jìn)行開發(fā),其中更改會立即寫入并且僅將您正在使用的本地目錄cd寫入項(xiàng)目目錄,然后運(yùn)行:
docker run --rm -e "NODE_RED_CREDENTIAL_SECRET=your_secret_goes_here" -p 1880:1880 -v `pwd`:/data --name a-container-name your-image-name
啟動
可以將環(huán)境變量傳遞到容器中以配置 Node-RED 的運(yùn)行時(shí)。
流配置文件使用環(huán)境參數(shù) ( FLOWS ) 設(shè)置,默認(rèn)為'flows.json'。這可以在運(yùn)行時(shí)使用以下命令行標(biāo)志進(jìn)行更改。
docker run -it -p 1880:1880 -v node_red_data:/data -e FLOWS=my_flows.json nodered/node-red
注意:如果您設(shè)置-e FLOWS="",則可以通過文件中的flowFile 屬性設(shè)置流settings.js文件。
其他有用的環(huán)境變量包括
-e NODE_RED_ENABLE_SAFE_MODE=false# 設(shè)置為 true 以安全(非運(yùn)行)模式啟動 Node-RED
-e NODE_RED_ENABLE_PROJECTS=false # 設(shè)置為 true 啟動 Node-RED 并啟用項(xiàng)目功能
Node.js 運(yùn)行時(shí)參數(shù)可以使用環(huán)境參數(shù) ( NODE_OPTIONS ) 傳遞給容器。例如,要修復(fù) Node.js 垃圾收集器使用的堆大小,您可以使用以下命令。
docker run -it -p 1880:1880 -v node_red_data:/data -e NODE_OPTIONS="--max_old_space_size=128" nodered/node-red
關(guān)鍵詞:工業(yè)網(wǎng)關(guān)