Bot プログラミングスキル 環境構築・インフラ 開発ログ

🛠️開発記録#223(2025/5/14)トレードロジック以外の基礎部分🐳セクション2:Dockerfileで作られるMMBotイメージとは?

―「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 jqgettext-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が動き
  • ミスの少ない設定検証が自動で行われ
  • ランタイムの挙動が一貫して追跡できる

という状態を保てます。

-Bot, プログラミングスキル, 環境構築・インフラ, 開発ログ