Node-REDをDocker上で動かしてみる
以前、nvm+Node.js上でNode-REDを動かしてみましたが、今回はDocker上で動かしてみます。Dockerを使うとLinuxのディストリビューションの影響を受けることなく開発環境と同じ手順で運用環境を構築できるので、最近はアプリケーションの基本構成を理解したららなるべくDockerを使うようにしています。
とりあえずDocker上で起動
ドキュメントには以下のコマンドで起動できると書いてあるので、素直に実行します(Dockerはインストール済みの前提)。Node-RED公式イメージを指定して1880ポートを晒しているだけのようです。シンプルですね。
$ docker run -it -p 1880:1880 --name mynodered nodered/node-red Unable to find image 'nodered/node-red:latest' locally latest: Pulling from nodered/node-red 6a428f9f83b0: Pull complete 630852b09df4: Pull complete f13ad23a48a4: Pull complete 43df7c393f3d: Pull complete 47ba55791fa2: Pull complete c2ef95bab0b2: Pull complete 3e43fcf5cc3e: Pull complete 0596f2101de6: Pull complete c0750ee7682e: Pull complete cbee34ba177b: Pull complete b9ca9e756757: Pull complete 24ebeb41a4d9: Pull complete 343fda8f67f1: Pull complete Digest: sha256:ddd05759e91dce9db82d36a3df66011936cc49d59ac329589df379c44e74867e Status: Downloaded newer image for nodered/node-red:latest > node-red-docker@2.0.6 start /usr/src/node-red > node $NODE_OPTIONS node_modules/node-red/red.js $FLOWS "--userDir" "/data" 21 Sep 12:36:01 - [info] Welcome to Node-RED =================== 21 Sep 12:36:01 - [info] Node-RED version: v2.0.6 21 Sep 12:36:01 - [info] Node.js version: v14.17.6 21 Sep 12:36:01 - [info] Linux 5.10.47-linuxkit x64 LE 21 Sep 12:36:02 - [info] Loading palette nodes 21 Sep 12:36:02 - [info] Settings file : /data/settings.js 21 Sep 12:36:02 - [info] Context store : 'default' [module=memory] 21 Sep 12:36:02 - [info] User directory : /data 21 Sep 12:36:02 - [warn] Projects disabled : editorTheme.projects.enabled=false 21 Sep 12:36:02 - [info] Flows file : /data/flows.json 21 Sep 12:36:02 - [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. --------------------------------------------------------------------- 21 Sep 12:36:02 - [info] Server now running at http://127.0.0.1:1880/ 21 Sep 12:36:02 - [info] Starting flows 21 Sep 12:36:02 - [info] Started flows
全体的にログが英語なのが目に付きます(そう言えば、今までなんで日本語が出ていたのだろう。別の機会に掘ってみます)。起動時のログを上からサーッと眺めて気になった箇所をピックアップします。
- Unable to find image 'nodered/node-red:latest' locally〜
- DockerイメージがないのでPullしています
- これ以降はnvm+Node.js上で起動したのと流れは一緒のようです
- Node-REDバージョン:v2.0.6
- 以前の記事と同じ最新版ですね
- Node.jsバージョン:v14.17.6
- Node.jsのバージョンが少し違います
- ユーザディレクトリ:/data
- ユーザディレクトリが以前と違いますね
- これはDockerイメージがマウントしたボリューム上のパスなので、ホスト上のユーザディレクトリ(以前の記事で確認しました)を/dataにマウントしてやればDocker上に環境を複製できると想像できます
読んでみると、
- /dataにマウントされて起動されている
- コンテナを再デプロイもしくはアップグレードすると変更したフローが失われる
- 名前付きDockerボリュームを利用している場合はこの警告は無視していい
- 詳しくはinfoパネルを参照のこと
とあります。今回は名前付きボリュームを利用しているので、警告は無視しても大丈夫です。ちなみにinfoパネルにはこんな感じの内容が書かれています。-vオプションでマウントしろってことみたいです。予想通り、/dataにユーザディレクトリをマウントしてやればホスト上にフローファイル他設定が保存できそうです。
ホストのユーザディレクトリをマウントして起動
続いて、infoパネルにある通りホストのユーザディレクトリをマウントして起動してみます(先ほど作成したコンテナを一旦削除しています)。
$ docker rm mynodered $ docker run -it -p 1880:1880 -v /Users/wataru/.node-red:/data --name mynodered nodered/node-red
ブラウザでアクセスしてみるとホスト上のフローファイルが読み込まれました。
コンテナの起動と停止
ここまでできたら、あとはコンテナの起動と停止コマンドでNode-REDの起動および停止ができます。
$ docker stop mynodered $ docker start mynodered $ docker restart mynodered
さいごに
これでDocker上でNode-REDが使えそうです。もっと細かいことはドキュメントを確認するのが良さそうです。運用環境で便利なdocker-composeついては別の機会に深堀りしてみようと思います。
コメント
コメントを投稿