Bot 環境構築・インフラ

仮想通貨botの開発記録#92(2024/8/24)「DockerComposeを活用した複数botの並行稼働」

2024年8月24日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

Yodaka

今回はdockerComposeを使って同じサーバー上で複数の自動取引botを並行して実行する方法を調べました。

参考

Docker&仮想サーバー完全入門 Webクリエイター&エンジニアの作業がはかどる開発環境構築ガイド

Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース
→動画の中盤からDocker Composeを使った複数アプリの実演がある。コンテナを作成して操作する手順から解説しているため、段階を踏んで理解するのに役立つ。

コンテナを使用する (Docker)

概要:

Dockerを使用して各自動取引ボットをコンテナ化し、同じサーバー上で並行して実行します。Docker Composeを使えば、複数のコンテナを一括で管理できます。
利点:

各ボットが独立したコンテナで動作するため、依存関係の衝突を避けることができる。また、効率的なリソース管理が可能で、サーバー全体のオーバーヘッドが軽減される。

Yodaka

コンテナを使用して複数の自動取引ボットを同じサーバー上で並行して実行する方法について、具体的な手順を説明します。ここでは、各ボットをDockerコンテナとして構築し、Docker Composeを使って一括管理する方法を紹介します。

1. 各自動取引ボットのDockerfileを作成

まず、各取引ボットのためにDockerfileを作成します。これは、ボットをどのようにコンテナ化するかを指定するファイルです。

例: Dockerfile

# ベースイメージとしてPythonを使用
FROM python:3.9-slim

# 作業ディレクトリを設定
WORKDIR /app

# 依存関係をリスト化したファイルをコピー
COPY requirements.txt .

# 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt

# ボットのソースコードをコピー
COPY . .

# コンテナが起動したときに実行されるコマンド
CMD ["python", "your_bot_script.py"]
  • requirements.txt: ボットが必要とするPythonパッケージをリスト化したファイル。
  • your_bot_script.py: 実際に取引を行うPythonスクリプト。

2. Docker Composeファイルを作成

次に、複数のボットコンテナを管理するための docker-compose.yml ファイルを作成します。これは、複数のコンテナを定義し、一括で管理するための設定ファイルです。

例: docker-compose.yml

version: '3.8'

services:
  bot1:
    build:
      context: ./bot1
    container_name: bot1_container
    restart: always
    environment:
      - ENV_VAR1=value1
    volumes:
      - ./bot1/data:/app/data

  bot2:
    build:
      context: ./bot2
    container_name: bot2_container
    restart: always
    environment:
      - ENV_VAR1=value2
    volumes:
      - ./bot2/data:/app/data

  bot3:
    build:
      context: ./bot3
    container_name: bot3_container
    restart: always
    environment:
      - ENV_VAR1=value3
    volumes:
      - ./bot3/data:/app/data
  • services: 各ボット(コンテナ)の定義を行います。
  • context: 各ボットのDockerfileがあるディレクトリを指定します。
  • container_name: 各ボットのコンテナ名を指定します。
  • environment: 環境変数を指定します。取引所のAPIキーなどを指定する場合に使用します。
  • volumes: ホストとコンテナ間でデータを共有するための設定です。

3. プロジェクト構造の設定

以下のようにプロジェクトのディレクトリ構造を設定します。

my-trading-bots/
├── bot1/
│   ├── Dockerfile
│   ├── requirements.txt
│   └── your_bot_script.py
├── bot2/
│   ├── Dockerfile
│   ├── requirements.txt
│   └── your_bot_script.py
├── bot3/
│   ├── Dockerfile
│   ├── requirements.txt
│   └── your_bot_script.py
└── docker-compose.yml

各ボット(bot1, bot2, bot3)は、独自のディレクトリ内に Dockerfile と必要なスクリプトや設定ファイルを持っています。

4. Dockerコンテナのビルドと実行

  1. ターミナルで my-trading-bots ディレクトリに移動します。
cd /path/to/my-trading-bots

2. Docker Composeを使って、全てのボットコンテナをビルドします。

docker-compose build

3. 全てのボットコンテナを起動します。

docker-compose up -d

-d オプションは、コンテナをバックグラウンドで実行するためのものです。

5. コンテナの管理

ログの確認: 各ボットのログを確認するには、以下のコマンドを使用します。

docker-compose logs bot1  # bot1のログを確認

コンテナの停止: すべてのコンテナを停止するには、以下のコマンドを使用します。

docker-compose down

コンテナの再起動: あるボットコンテナを再起動するには、以下のコマンドを使用します。

docker-compose restart bot1

まとめ

これで、Dockerを使って複数の自動取引ボットを同じサーバー上で並行して実行できるようになります。各ボットは独立したコンテナで実行されるため、依存関係の衝突を避けつつ、効率的に管理することができます。Docker Composeを使うことで、複数のコンテナを一括でビルド・起動・停止することができ、運用が非常に楽になります。

まとめ

今回は複数のbotを並行して同時に稼働するための方法を調べました。

この方法を土台にして、個別稼働の調整方法も調べる予定です。

今後もこの調子で開発の状況をまとめていきます。

-Bot, 環境構築・インフラ