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デーモンの有効化までを実施できるようになっています。


FW26環境下では WBMの Configuration - Docker Settingsで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の各種情報が確認できる画面が表示されます。

WBM のトップ画面であるDevice Status画面。FWバージョンなどの確認ができる

この画面では現状のエラー情報などのほか、Firmware Revisionの項目で動作ファームウェアバージョンの確認が可能です。特に( )の中、上記例だと26の数字が動作中のファームウェアバージョンを示します。

■WBMの中で特に重要な設定

今回、DockerとNode-Redをこのコントローラで試すうえで特に重要な設定は以下の設定となります。

  1. Ethernetポートのブリッジ設定とIPアドレス設定

  2. NTPクライアント(時刻同期)の設定

  3. ファイアウォールの設定

  4. Dockerデーモンの有効化

  5. 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名での入力が可能です。

ntp.nict.jpへ正しく接続ができている様子

タイムゾーンの設定はConfigration - Clock項目で行う事が可能です。

WBM - Clock - タイムゾーンの設定

3.ファイアウォールの設定

昨今のサイバーセキュリティを確保する意味でもファイアウォールの設定は非常に重要です。テスト段階でうまく通信しない?インターネットにつながってない?などの疑いがあるときには無効にすることも解決手段の一つですが、基本的には有効するようにしてください。特にインターネット側からのSSHへのアクセスは非常に危険です。
WBM - Security - Firewall - General Configurationから
Global Firewall ConfigurationのFirewall enabled entirelyを有効にし、

Interface Configurationにて各々のポートで許可するプロトコルを選択します。
今回は、CC100のX1ポート(Firewall Configuration Bridge 1)のファイアウォール設定は仮に無効化し(X1ポートはインターネットに接続しないメンテナンスポートとして使用)

Firewall Enabled for Interface を無効化にしてすべてのパケットを受け付ける設定にする

X2ポート(Firewall Configuration Bridge 2)のファイアウォール設定を有効化し(インターネットに接続するポート)、外部からのアクセスはすべてのポートにおいて遮断する設定にします。

外部へつながるX2ポートはFirewall Enabled for Interfaceを有効にし、すべてのService Configurationを無効化する

本来、WBM - Firewall - User Filterを設定することでX1ポートも任意のパケット以外は通過しないような設定も可能なのですが、この設定については別の機会で解説したいと思います。

4.Dockerデーモンの有効化
以前ご紹介した手法では、Dockerデーモン手動でインストール・有効化させる必要があったのですが、FW26環境下においてはWBMの設定を変更することでDockerデーモンを有効化させることが可能です。
具体的にはWBM - Configuration - Docker 設定を開き、Service Enabledのチェックマークを有効状態にし、Submitをクリックします。

Docker - Docker Setting - Service Enabledを有効にし、Submitをクリック


Activating Docker…プロンプトが表示され、Dockerデーモンのインストールが行われる


システムによるDockerデーモンのインストールが終了し、 Current State項目に”running"と表示されたら無事にDockerのインストールは完了している

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
ls ”/参照したいディレクトリ"コマンドで指定ディレクトリの内容が表示される

とか。あとよく使うのはネットワークインターフェイスを表示する ”ifconfig"

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"でフォーマットをかけておきます。

任意のWebブラウザを開き、コントローラのIPアドレスをアドレスバーに入力することでWBM画面にアクセスが可能。 WBMにて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タブを見ると以下のように対応していることがわかります。

Node-REDはlinux/armV7に対応したコンテナが存在しているためCC100でも実行可能

…上記のコマンドでPortainerのダウンロードとインストールが進行していき、特にエラー無く入力可能な状態に戻ってきたら正しくコンテナのインストールと実行ができているはずです。

portainer-ceコンテナが正しくインストールできた

dockerコマンドで実行中のコンテナを調べる場合には

docker ps

をLinuxコンソール上で実行します。

portainer-ce が実行されていることが確認できる。

正しく実行されていることの確認ができたら、任意のウエブブラウザを開き
http://[CC100のIPアドレス]:9000
にアクセスをしてみましょう。コンテナ管理ツールであるPortainerにアクセスができると思います。

正しくPortainerコンテナが稼働しているとログイン画面が表示される

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の初回起動画面が表示されたらNode-REDコンテナは正しく実行できています。

3-2. CC100専用ノードのインストール

上記手順でNode-REDのインストールはできましたが、現状ではCC100の各種IOを制御するためのノードがインストールされていません。
以下の手順でこのノードのインストールを行います。

1.画面右上のメニューボタンをクリックし、パレットの管理をクリック

ノードを追加タブを選択し、検索ウィンドウに”CC100”を入力すると
”node-red-contrib-wago-cc100”が見つかります。*何も出てこない場合はホストPCのインターネット環境を確認してみてください。
”ノードを追加”をクリックすることでCC100のDIOをコントロールするノードがインストールされます。

node-red-contrib-wago-cc100を検索し、ノードを追加をクリック
画面左側のノード一覧にWAGO CC100ノードが追加された

後はノードをつなぎ、自由にIOをコントロールする形となります。
ModbusやOPC UAなど便利なノードもこの手順を使用して追加することができます。ぜひ試してみてくださいね。

ノードをつないでDOをコントロールする

4.おわりに

お疲れさまでした。今回はかなりの長文のnoteとなりましたが最後まで読んでいただきありがとうございます。
今回はPortainerとNode-REDのマニュアルインストールの方法を試してみましたが、DockerコンテナとしてはデータベースとしてのInflux DBや可視化ダッシュボードの作成な可能なGrafana等、便利なコンテナがたくさんあります。
上記に上げたコンテナはもちろんCC100でも動作させることができます。
いろいろなコンテナをぜひ、試してみてください!

それではまた、次の機会にお会いしましょう。

この記事が気に入ったらサポートをしてみませんか?