PYTHON + DOCKER MEMO

Dockerで自作Pythonプログラム(smbus2)を動かす備忘録

Ubuntu環境でDockerを使い、I2Cデバイス(センサー等)を制御するPythonスクリプトを実行する手順

1. 必要なファイル構成

作業用フォルダ(例: ~/pyimg)の中に、以下の3つのファイルを用意する。

pyimg/
 ┣ Dockerfile
 ┣ docker-compose.yml
 ┗ tmpapp.py (自作のPythonプログラム)

2. Dockerfile の書き方

コンテナ内に構築する環境(ベースのPythonと必要なライブラリ)の設計図。

FROM python:3.11-slim

WORKDIR /app

# smbus2 ライブラリをインストールする
RUN pip install --no-cache-dir smbus2

# ホストのファイルをコンテナ内の /app にコピーする
COPY . /app

# コンテナ起動時に実行するコマンド
CMD ["python", "tmpapp.py"]

各行の意味

3. docker-compose.yml の書き方と詳細解説

コンテナの起動オプションや、ハードウェア(I2C)の共有設定を行うファイル。

version: '3.8'

services:
  app:
    build: .
    container_name: python_on_Docker
    # 標準入出力(printなど)をリアルタイムでコンソールに出すため
    stdin_open: true
    tty: true
    # ホスト側のI2Cハードウェア(例: /dev/i2c-1)をコンテナ内に共有する
    devices:
     - "/dev/i2c-1:/dev/i2c-1"

各行・各項目の詳しい説明

4. 実行コマンドと「--build」の注意点

初回・プログラム修正時のビルド&起動

docker compose up --build

通常起動(2回目以降)

docker compose up
⚠️ 初回起動時に --build を付け忘れたらどうなるか?
もし初回に docker compose up--build なし)を実行してしまうと、Dockerfileに記述した pip install smbus2COPY . /app(ファイルの取り込み)が行われないまま、あるいは古いイメージが存在しない場合は No such file or directory などのエラーやファイル不足で起動に失敗します。
対策: 初めて起動するとき、または Dockerfiletmpapp.py などのファイルを書き換えたときは、必ず docker compose up --build を実行してイメージを作り直してください。

停止とコンテナの削除

docker compose down