―「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が動き
- ミスの少ない設定検証が自動で行われ
- ランタイムの挙動が一貫して追跡できる
という状態を保てます。