はじめに
少し前にdiscord botの記事をvenv環境で作っていたのですが、友人にdockerを教えていただき、かなり魅力的だったのでvenvで作成した仮想環境から Dockerに移行しようと思いました。
今回はdiscord botの環境構築をdockerでやる+venv環境で開発していたのを、Dockerに移行できるようにしてみようと思います。
Dockerとは
Dockerとは、コンテナ型の仮想環境を作成、実行、配布ができるプラットフォームです。特徴としては、開発環境を迅速に構築できる、Vscodeなどの既存ツールとの連携、あらゆる環境で一貫した動作が可能であることです。
また、今回はdocker-composeというツールも使います。docker-composeは複数のコンテナを一度に起動操作ができるツールです。
dockerは理解できている自信がないので簡単にしか説明できないです、すいません
botのコードについて
少し前に作成したこちらの記事で作ったbotを使っています。そのbotを使った.envファイルの作成の記事もあるので、そちらも参考にしてください。
Dockerfileの作成
imageにあたるDockerfileを作成します。
Dockerfileは以下のように作成します。
FROM python:3.12.2
WORKDIR /bot
COPY requirements.txt /bot/
RUN pip install requirements.txt
COPY . /bot/
-
FROM python:3.12.2
でpythonのバージョンを指定します。 -
WORKDIR
で作業ディレクトリを指定、もし存在しなければ作成します。コマンドを打つ際に基準となるディレクトリになります。今回はbotディレクトリを作成しました。 -
COPY requirements.txt /bot/
で、botディレクトリの中に ライブラリを記述しているrequirements.txtをコピーします。requirements.txtはこの後作成しますので、とりあえず気にしないでください。 -
RUN pip install requirements.txt
は、requirements.txtに書いてあるライブラリを再起的にインストールします。 -
COPY . /bot/
でアプリケーションの中身を全てbotディレクトリの中に入れます。
docker-compose.ymlの作成
今回はdocker-composeも使用するので、docker-compose.ymlも作成します。
docker-compose.ymlは以下のように作成します。
version: '3'
services:
bot:
build: .
command: python main.py
volumes:
- .:/bot
environment:
- TOKEN = ${TOKEN}
-
version: '3'
でdocker-composeの使用バージョンを指定しています。 -
services:
で作成するサービス(コンテナ)をこの下に書いています。今回はbotというコンテナの設定について記述しています。 -
build:
でアプリケーションをビルドする場所を指定しています。 -
command
でコンテナ起動時に実行するコマンドを指定しています。(今回はbot起動に使うコマンドを指定しています。) -
volumes
でボリュームを設定しています。 -
enviroment
で環境変数を設定しています。今回は.envファイルから読み込みたいため、.envファイルに書かれているTOKEN
を`${TOKEN}で取得します。
requirements.txtの作成
ライブラリを指定するため、requirements.txt
を作成します。
- venv環境を作っていた場合
まずアクティベートして、仮想環境に入ります。
source venv/bin/activate
その後、以下のコマンドでインストールしているライブラリを書き出してください。
pip freeze > requirements.txt
今回は以下のようなものが生成されました。
aiohttp==3.9.5
aiosignal==1.3.1
attrs==23.2.0
frozenlist==1.4.1
idna==3.7
multidict==6.0.5
py-cord==2.5.0
python-dotenv==1.0.1
yarl==1.9.4
- venv環境じゃなく、1から作る場合
上のように必要なライブラリを書いてください。おそらくpycordとdotenvで十分だと思います。
コンテナの作成、起動
コンテナの作成と起動は以下のコマンドで実行します。
docker-compose up
こうすることでコンテナが起動し、botも起動します。
最後に
今回、初めてDockerを使いましたが、仮想環境がファイルを記述することで起動できることに魅力を感じましたし、これを共有できることにも魅力を感じました。まだ理解できていない自覚があるので今回の記事をきっかけにちゃんと理解を深めようと思います。
リポジトリはこちら↓