1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerを使ってDiscord Botを常設する

Last updated at Posted at 2024-08-18

はじめに

こんにちは。Udonです。

最近やっと本格的にDockerを使い始めました。なんとなく、Dockerを使わないといけない状況になかったんですよね。そんなとき、Discordをよく使うイベントがあったので、Discord Botを常設できたら便利だなと感じました。しかし、ローカルからいちいちBotを起動するのは面倒です。そこで、Dockerを使ってDiscord Botを常設することにしました。

というわけで、ここではDockerを使ってDiscord Botを常設する方法を紹介します。注意ですが、この記事のテーマはあくまでDockerを使ってDiscord Botを常設することです。Discord Botの作成方法については、他の記事を参考にしてください。そのため、Discord Botのファイルはブラックボックスとします。

想定環境

  • Docker:最新版
  • Docker Compose:最新版
  • Discord Bot:作成済み
  • Dockerを動かせるサーバー

完成イメージ

実際にDockerを動かすディレクトリは以下のような構成になっています。

.
├── .env
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
└── bot
    └── main.py

Docker環境のセットアップ

以下のファイルを作成し、Docker環境をセットアップします。

.env

TOKEN="YOUR_DISCORD_BOT_TOKEN"

このファイルには、Discord Botのトークンを記述します。場合によっては他の環境変数も記述することがあります。

このファイルを作っておく利点として、Dockerfileやdocker-compose.ymlで環境変数を使うことができるという点があります。また、環境変数を使うことで、セキュリティを向上させることができます。一括で環境変数を管理することができるので、環境変数を漏洩させるリスクを減らすことができます。

Dockerfile

FROM python:3.10.5-alpine3.16
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

このDockerfileはPythonの環境をセットアップする際に使います。Pythonのバージョンは3.10.5を使っています。また、Alpine Linuxを使っているので、軽量なイメージを使うことができます。そして、requirements.txtをコピーして、必要なパッケージをインストールします。

また、Docker-Composeを使えない場合はDockerfileのみでビルドすることとなります。

requirements.txt

py-cord == 2.2.2
discord.py == 2.4.0

このファイルには、Discord Botを動かすために必要なパッケージを記述します。この例では、py-cordとdiscord.pyを使っています。他に必要なものがあれば適宜追加することとなります。

docker-compose.yml

version: '3.8'
services:
  bot:
    build: .
    volumes:
      - ./bot:/usr/src/app:rw 
    environment:
      - TOKEN=${TOKEN}
    command: ["python3", "main.py"]
    tty: true

このファイルには、Docker Composeの設定を記述します。botというサービスを作成しています。このbotサービスは、Dockerfileを使ってビルドします。また、botディレクトリをコンテナ内の/usr/src/appにマウントします。そして、環境変数としてTOKENを渡します。最後に、main.pyを実行します。

tty: trueをつけておくことで、プロセスを実行されっぱなしにすることができるようです。

Discord Botの作成

Discord Botの本体はmain.pyでプログラミングしていくこととなります。

この辺は、Qiitaにもたくさん記事があるので、そちらを参考にしてください。

自分はこの記事などを参考にしました。

コンテナの起動

では、コンテナを起動します。以下のコマンドにより、まずはビルドします。

docker-compose build

ビルド出来たら、以下のコマンドでコンテナを起動します。

docker-compose up

これで、Discord Botが起動されました。Discord Botが起動しているかどうかは、Discordのサーバーに入って確認してください。

こうしてしまえば、サーバーからログアウトしてもDiscord Botは常時起動されているので、いつでも使える状態になります。

コンテナの停止

コンテナを停止する場合は、以下のコマンドを実行します。

docker-compose down

おわりに

結構簡単にDockerを使ってDiscord Botを常設することができました。これで、いつでもDiscord Botを使える状態になりました。便利ですね。

コンテナを永続化させることで、いつでもBotを使える状態にすることができました。やはりサービスを常設させておくには、Dockerが便利ですね。使えるサーバーがあるなら積極的に利用しておくといいかと思います。

ではまた。

参考文献

【Docker】.envの環境変数をDockerfileで使用する #docker-compose - Qiita

「そのコンテナのデータ、消えるよ……」とさせないための、イメージ図+実践で理解するDockerストレージ【Dockerコンテナ・グレートジャーニー③】 #container - Qiita

コンテナを永続化させる方法 – SAT Staff Blog

docker-compose up したコンテナを起動させ続ける方法 #Docker - Qiita

Dockerコンテナをずっと起動しておく - WEB開発ノート

Dockerのコンテナを起動したままにする #Docker - Qiita

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?