WAGO製のPLC(PFC200,CC100シリーズ)でDockerを動かしてみたマニュアル編。
今回のnoteについて
前回のnoteからしばらく間があいてしまいましたが、、、
前回は(WAGO Compact Controller(751-9301)にDockerとNode-Redをインストールしてみた※簡単コース)という事で有志の方が作成された Provisioning Toolを使用してごく簡単にDockerデーモンとNode-Redのインストールを試してみました。
実は2024年5月現在でのファームウェアバージョン、FW26環境下においては内蔵ウェブブラウザで動作している管理ツール(以下WBM)からDockerデーモンの有効化までを実施できるようになっています。
今回はこの手法を使用してDockerデーモンを有効化し、Dockerコンテナ管理ツールとしてお勧めのPortainerのインストールを通じて基本的なDockerコマンドを学んでいこうと思います。
2.ハードウェアの初期設定
まずはWAGO Compact Controller100(以下、CC100)の初期設定を行います。
CC100は工場出荷状態ではIPアドレスの取得方法がDHCPとなっています。別途DHCPサーバを立ててそこからアドレスを割り振っても良いのですが、DHCPサーバがない場合は筐体のRSTボタンをRUN/STOPスイッチが”STOP”の状態で7秒以上押すことで『192.168.1.17』というアドレスを強制的に割り振ることが出来るようになっています。
上記手順でIPアドレスを割り振ることが出来たら、PCのIPアドレスを『192.168.1.252』などの同じセグメントに割り当てたうえでMicrosoft Edgeなどでhttps://192.168.1.17にアクセスを行います。
正しくIPアドレスの設定ができていれば、以下のような管理画面(以下、WBM)が現れます。
ユーザ名とパスワードを求められるので、工場出荷状態の場合は
Username : admin
Password: wago
を入力します。
ログインが成功すると「パスワードを変えてね」って言われるので、Change nowをクリックの上初期パスワードを変更することを強くお勧めします。
無事ログインができるとまずはCC100の各種情報が確認できる画面が表示されます。
この画面では現状のエラー情報などのほか、Firmware Revisionの項目で動作ファームウェアバージョンの確認が可能です。特に( )の中、上記例だと26の数字が動作中のファームウェアバージョンを示します。
■WBMの中で特に重要な設定
今回、DockerとNode-Redをこのコントローラで試すうえで特に重要な設定は以下の設定となります。
Ethernetポートのブリッジ設定とIPアドレス設定
NTPクライアント(時刻同期)の設定
ファイアウォールの設定
Dockerデーモンの有効化
IP Fowarding設定の確認
1.Ethernetポートのブリッジ設定とIPアドレス設定
現在は仮のIPアドレスを指定してWBM画面に入っていますが、この仮IPアドレスは電源を切ると削除されてしまうアドレスです。
また、CC100コントローラはEthernetポートを2ポート備えており、それぞれ別のIPアドレスを割り振ることが出来るようになっています。
今回は
ETH1ポートを『192.168.1.100』に固定(メンテナンスポート)
ETH2ポートを『DHCP』でインターネットへのアクセスポートとします。
具体的に設定は以下の画面の個所を設定します。
それぞれ、一度パラメータを変更したら"Submit"をクリックして設定を確定します。
2.NTPクライアント(時刻同期)の設定
こちらは設定を行わないと各種Dockerコンテナを取得するときに証明書関係のエラーが発生することになります。
設定はWBMの中の Configuration - Port and Services - NTP Clientの設定を行います。
具体的には以下スクリーンショットの例となりますが
Service enabledを有効に。
Time Server 1~4に対象のNTPサーバを入力。
正しく入力ができたら Submit ボタンをクリックします。
FW25環境下では正しいDNSサーバと接続ができていれば、DNS名での入力が可能です。
タイムゾーンの設定はConfigration - Clock項目で行う事が可能です。
3.ファイアウォールの設定
昨今のサイバーセキュリティを確保する意味でもファイアウォールの設定は非常に重要です。テスト段階でうまく通信しない?インターネットにつながってない?などの疑いがあるときには無効にすることも解決手段の一つですが、基本的には有効するようにしてください。特にインターネット側からのSSHへのアクセスは非常に危険です。
WBM - Security - Firewall - General Configurationから
Global Firewall ConfigurationのFirewall enabled entirelyを有効にし、
Interface Configurationにて各々のポートで許可するプロトコルを選択します。
今回は、CC100のX1ポート(Firewall Configuration Bridge 1)のファイアウォール設定は仮に無効化し(X1ポートはインターネットに接続しないメンテナンスポートとして使用)
X2ポート(Firewall Configuration Bridge 2)のファイアウォール設定を有効化し(インターネットに接続するポート)、外部からのアクセスはすべてのポートにおいて遮断する設定にします。
本来、WBM - Firewall - User Filterを設定することでX1ポートも任意のパケット以外は通過しないような設定も可能なのですが、この設定については別の機会で解説したいと思います。
4.Dockerデーモンの有効化
以前ご紹介した手法では、Dockerデーモン手動でインストール・有効化させる必要があったのですが、FW26環境下においてはWBMの設定を変更することでDockerデーモンを有効化させることが可能です。
具体的にはWBM - Configuration - Docker 設定を開き、Service Enabledのチェックマークを有効状態にし、Submitをクリックします。
2.Portainer(管理ツール)のインストール(マニュアル編)
2-1. Linuxコンソールへのアクセス
1.上記までの手順が完了すると、システムでDockerデーモンが実行されDockerコンテナを動かすことができるようになっています。
Dcokerコンテナのインストールや操作はLinuxコンソールで行うことが多いため、まずはLinuxコンソールへのアクセスと簡単なコマンドを実行してみましょう。
LinuxコンソールはPuTTYなどのターミナルソフトを使用してアクセスします。
PuTTYをインストールしたらまずは接続先のIPアドレスをHost Name項目へ入力しLinuxコンソールにアクセスをします。
2-2. ログイン完了 - パスワード変更
Linuxコンソールにアクセスを試行するとLinuxのユーザ名とパスワードを確認されます。工場出荷状態の場合、
login as: root
root@IPアドレス's password: wago (※文字を入力しても非表示です)
を入力することでログインができます。
ログインが完了すると”New password”と表示され新しいパスワードの決定を求められますので2回同じパスワードを入力しパスワードの変更を行ってください。
なお、Linuxにおいてユーザ名"root"は一番権限を持つアカウントになります。このパスワードが破られる=コントローラのすべての機能が掌握されるという事にもなりますのでこのパスワードは強固なものを設定してください。
2-3. 簡単なLinuxコマンドでコンソールの操作に慣れてみる
Linuxコンソールにアクセスができたら、ごく簡単なコマンドを使用してコンソールで遊んでみましょう。
その昔、MS-DOS等を触ったことがある人は感覚的に理解ができるかと思いますが、Linuxコンソールではすべての操作をコマンドで実行します。
例えば、現在のディレクトリを移動するコマンド ”cd”
cd /home/
とか、現在(またはディレクトリを指定して)のディレクトリに存在するファイルを一覧する ”ls”
ls /home
とか。あとよく使うのはネットワークインターフェイスを表示する ”ifconfig"
ifconfig
とか。
他にもいろんなコマンドが使えます。ご興味がある方はGoogle先生に ”Debian コマンド一覧”と聞いてもらうとWAGOのコントローラでも動作するコマンドが色々と出てくると思います。※WAGOのコントローラのOSはEmbedded Linuxのため、必ずしもすべてのコマンドが動作するわけではありません。悪しからず。
”rm”コマンドとか、ファイル操作系のコマンドを実行しない限りはそうそうおかしなことにならないはずなのでいろいろ触ってまずはLinuxコンソールに慣れて見て頂くことをお勧めします。
ちなみにWAGOのコントローラはSDカードに専用のファームウェアファイルを書き込んでおくとSDカードから工場出荷状態に復元ができます。この機能があるのでもしおかしくなった!!という場合でもかなり高確率で復元ができます。(100%復旧できるというものでもないですが)
2-4. Docker rootをSDカードに移動する
さて、Linuxコンソールの操作に慣れたらDockerに関わる設定をコンソールで行いましょう。
WBMにてDockerを有効にした状態で使用してもいいのですが、WAGOのコントローラシリーズはあくまでPLC。内部ストレージ容量が潤沢にあるとは言えないのでもうひと手間加えてSDカードスロットに挿入したSDカードをDockerで使用するメインストレージに設定します。
あらかじめ所定のSDカードを本体に挿入し、WBMのConfiguration - Mass StorageメニューからSDカードを”Ext4"でフォーマットをかけておきます。
SDカードのフォーマットが完了したら、Linuxコンソールで以下のコマンドを入力し、起動しているdockerデーモンを一旦停止します
/etc/init.d/dockerd stop
dockerデーモンが停止したら、現在のdocker関連ファイルをSDカードディレクトリにコピーします。
cp -r /home/docker /media/sd/
その後nanoエディタを開き、dockerのデフォルトディレクトリをSDカードに移動します。
nano /etc/docker/daemon.json
nanoエディタが開いたら、
"data-root":"~~~項目を以下のような形に書き換えます。
"data-root":"/media/sd/docker",
書き換えが完了したらCtrl +Xを入力、続いてのメッセージは”y”を入力し、同名で上書き保存をします。
ここまで完了したら、本体の再起動をかけるか以下のコマンドを入力することでDockerルートディレクトリ=SDカードスロットでDockerが起動します。
/etc/init.d/dockerd start
2-5. Portainer(コンテナ管理ツール)コンテナのインストール
いよいよ、マニュアルで初めてのコンテナをインストールしてみましょう。
始めてインストールするコンテナとしてはPortainerというコンテナがおすすめです。
このコンテナはWebブラウザでアクセスすることで、GUIで現在動作しているコンテナなどの管理が可能になります。
インストールを行うためのコマンドは以下のコマンドになります。
docker run --restart always --name wago-portainer -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
ファイルのダウンロードとインストールには少し時間がかかります。
作業が進行する間に少しこのコマンドについて解説します。
今回のコマンドにはいくつかのオプションが含まれています。
docker +
run: コンテナの実行。もしdockerイメージがディレクトリに存在しない場合には指定されたリポジストリからダウンロード、インストールの上実行してくれる。
--restart always: 再起動ポリシーの設定。alwaysの指定で、コンテナが停止すると常に再起動がかかる。
--name wago-portainer: コンテナ名の指定。今回はwago-portainer
-d: バックグラウンドでコンテナを実行
-p 9000:9000 : ホスト(コントローラ)のEthernetポートとDockerコンテナのEthernetポートを接続します。 9000(ホスト):9000(コンテナ)
-v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data:
ホストの任意のディレクトリをコンテナの任意のディレクトリにマウントします。/var/run/docker.sock(ホスト):/var/run/docker.sock(コンテナ)
※2回 -vコマンドを実行しているのは複数のディレクトリをマウントしている
portainer/portainer-ce: 実行するコンテナイメージの指定。
※シンプルにはこのような形と覚えると想像しやすい。
docker run portainer/portainer-ce
どのようなコンテナイメージが存在するかは DockerHubを参照するとわかりやすいです。
注意点として各コンテナイメージはサポート可能なCPUが異なったりします。WAGO PFCで動作するコンテナは Arm/v7がキーワードとなります。
例えば、Node-REDをDockerHubで検索し、Tagsタブを見ると以下のように対応していることがわかります。
…上記のコマンドでPortainerのダウンロードとインストールが進行していき、特にエラー無く入力可能な状態に戻ってきたら正しくコンテナのインストールと実行ができているはずです。
dockerコマンドで実行中のコンテナを調べる場合には
docker ps
をLinuxコンソール上で実行します。
正しく実行されていることの確認ができたら、任意のウエブブラウザを開き
http://[CC100のIPアドレス]:9000
にアクセスをしてみましょう。コンテナ管理ツールであるPortainerにアクセスができると思います。
Portainerのセットアップ方法や使い方は別の機会で解説したいと思いますが、Portainerは稼働中のコンテナの監視や各種設定の変更などができる便利なツールです。ぜひ、一度試してみてくださいね。
3.Node-REDのインストール(マニュアル編)
3-1. Node-REDコンテナのインストール
それでは、Portainerコンテナのインストールと同じ手順でNode-REDコンテナのインストールをマニュアルで行いましょう。
以下のコマンドでNode-REDコンテナをインストールします。
docker run -d --name wago-node-red -d --privileged=true --restart always --user=root -p 1880:1880 -v node_red_user_data:/data nodered/node-red
Node-REDコンテナが無事インストール出来たら、
docker ps
コマンドでnode-redコンテナの実行状況を確認します。(STATUS項目)
上記例のようにSTATUS項目に(healthy)と表示されたら正常に起動ができている状態のため、任意のウェブブラウザで
http://[CC100のIPアドレス]:9000
にアクセスしてみましょう。
Node-REDの初回起動画面が表示されたらNode-REDコンテナは正しく実行できています。
3-2. CC100専用ノードのインストール
上記手順でNode-REDのインストールはできましたが、現状ではCC100の各種IOを制御するためのノードがインストールされていません。
以下の手順でこのノードのインストールを行います。
1.画面右上のメニューボタンをクリックし、パレットの管理をクリック
ノードを追加タブを選択し、検索ウィンドウに”CC100”を入力すると
”node-red-contrib-wago-cc100”が見つかります。*何も出てこない場合はホストPCのインターネット環境を確認してみてください。
”ノードを追加”をクリックすることでCC100のDIOをコントロールするノードがインストールされます。
後はノードをつなぎ、自由にIOをコントロールする形となります。
ModbusやOPC UAなど便利なノードもこの手順を使用して追加することができます。ぜひ試してみてくださいね。
4.おわりに
お疲れさまでした。今回はかなりの長文のnoteとなりましたが最後まで読んでいただきありがとうございます。
今回はPortainerとNode-REDのマニュアルインストールの方法を試してみましたが、DockerコンテナとしてはデータベースとしてのInflux DBや可視化ダッシュボードの作成な可能なGrafana等、便利なコンテナがたくさんあります。
上記に上げたコンテナはもちろんCC100でも動作させることができます。
いろいろなコンテナをぜひ、試してみてください!
それではまた、次の機会にお会いしましょう。