Pythonで作った自動化スクリプトを、Macで動かすこともできるけど、サーバー上でdockerの1つとして動作するようにしたい。
Python環境の明確化
venv使った利点でもある。以下のコマンドで使用しているライブラリを明確化
% . venv/bin/activate (venv) % pip freeze > requirements.txt (venv) % deactivate % cat requirements.txt pho-mqtt==1.5.0
あとから、
% pip install -r requirements.txt
とすると、同様の環境が簡単に構築できる(ハズ)。
PythonのDocker
まぁ、本家のPython以外を選択する理由はないです。特に追加の複雑なPackageが必要とすることもないので。
from python:3 WORKDIR /app COPY requirement.txt /app COPY App.py /app RUN pip install --no-cache-dir -r requirement.txt CMD ["python", "App.py"]
Docker imageの構築
% docker build -t myautomation:1.0 .
Docker imageの実行
% docker run myautomation:1.0
きちんと動作するか、条件が成立したときに期待するメッセージが送信されるか確認。(この場合は、部屋の明かりを消して、AC100がリモートでOFFされるか確認)
サーバー環境へ必要なファイルのコピー
サーバーにコピーが必要なファイルは、以下の通り。
- Dockerfile
- requirement.txt
- App.py
必要なファイルをサーバーへ持って行って、同じ操作をすれば、サーバーで動き出す。
- % docker build -t myautomation:1.0
- % docker run –restart=always –detach myautomation
ちなみに、以下のように起動すると、起動時にバックグラウンドで実行され、サーバーが再起動時に自動的に実行される
Docker imageの実行
% docker run --restart=always --detach myautomation:1.0
まとめ
venvを使って、ローカルに専用環境を構築して、その環境をサーバー上のDockerに再現して動作させる手順でした。
ほとんど、MQTT関係ないという・・・
でも、部屋の加湿器操作の自動化ができました!
Sponsor Link