Pythonで作った自動化をDocker化

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関係ないという・・・

でも、部屋の加湿器操作の自動化ができました!

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です