―「Botの仮想的な中身」をどう設計しているのか
前回は、Mac上(ホスト)で何が行われているかを解説しました。
今回はその先――**Dockerの中でBotがどんな部品で構成され、どのように動き出すのか?**を見ていきます。
🔧2.1 そもそもDockerfileとは?(初心者向け解説)
Dockerfileは、Botが動くために必要な仮想環境の設計図です。
📦「このBotはどんなOSで、どんなPythonのバージョンで、どんなライブラリが入っていて、起動したときに何を実行するか?」
この全てを記述するのがDockerfileです。
Dockerはこの設計図を元に「コンテナイメージ」というBotの実行環境を作り出します。
🧱2.2 MMBotイメージの全体構成
MMBot用のDockerfileは、以下のような多層構造になっています:
FROM python:3.12-slim # 軽量Pythonベース RUN apt-get update && apt-get install -y gettext-base jq COPY poetry.lock pyproject.toml ./ RUN pip install poetry && poetry config virtualenvs.create false && poetry install COPY . . ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
この構成の意味を初心者向けに噛み砕いていきましょう。
🗂️2.3 各構成パーツの役割
| パート | 意味 | 
|---|---|
| FROM python:3.12-slim | ベースOS + Pythonを用意。 -slimは軽量なイメージで高速。 | 
| apt-get install gettext-base jq | gettext-base(テンプレ置換)とjq(JSON検証)を追加。 | 
| COPY poetry.lock pyproject.toml ./ | 依存パッケージ管理ファイルを先にコピー(ビルドキャッシュの最適化)。 | 
| RUN pip install poetryなど | PoetryでPythonパッケージをインストール。仮想環境は切らずにグローバルに導入。 | 
| COPY . . | Mac側のプロジェクト全体を /app/にコピー。 | 
| ENTRYPOINT | 起動時に entrypoint.shが実行されるよう指定。 | 
🔁2.4 イメージはどうやって「Botの中身」になるのか?
Botの「中身」は、Dockerfileをビルドしてできたイメージです。
このイメージが、docker compose up --build を実行したときに「コンテナ」という実行体として起動します。
🧭【図解】Dockerfileからコンテナが起動する流れ
flowchart TD
    A[Dockerfile] --> B[ビルド]
    B --> C[コンテナイメージ MMBot]
    C --> D[docker compose up 実行]
    D --> E[コンテナ起動]
    E --> F[entrypoint.sh 実行]
    F --> G[Bot ロジックへ core.py]
- Dockerfile → イメージ = Botの骨組みを作る
- イメージ → コンテナ = 実際に動くBotが誕生する
🧪2.5 なぜgettext-baseとjqを入れているの?
MMBotでは、Bot起動時に config_mainnet.tpl というテンプレートから JSON形式の設定ファイルを生成しています。
この処理は entrypoint.sh 内で行われています。
| ツール | 用途 | 
|---|---|
| envsubst(gettext-base) | .env.prodの変数をテンプレートに埋め込む。 | 
| jq | 生成されたJSONが壊れていないかをチェック(構文検証)。 | 
✅初心者向けに補足:
- envsubstとは:- $SYMBOLのような変数を- BTCUSDTなどの文字列に置き換えるコマンド
- jqとは:JSON形式のデータをチェックしたり、加工するためのコマンドライン専用ツール
🧵まとめ:Dockerfileは「Botの中身そのもの」
ここまでを一言でまとめると:
DockerfileはBotの実行環境と前準備を全部まとめた自己完結型のボディ構成書。
このDockerfileをベースにすれば、
- 誰が起動しても同じ環境でBotが動き
- ミスの少ない設定検証が自動で行われ
- ランタイムの挙動が一貫して追跡できる
という状態を保てます。
