LoginSignup
2
2

discord bot開発で使っていたvenv環境をdockerに移行しよう

Posted at

はじめに

少し前に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も起動します。

スクリーンショット 2024-05-11 23.23.13.png

最後に

今回、初めてDockerを使いましたが、仮想環境がファイルを記述することで起動できることに魅力を感じましたし、これを共有できることにも魅力を感じました。まだ理解できていない自覚があるので今回の記事をきっかけにちゃんと理解を深めようと思います。

リポジトリはこちら↓

2
2
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
2
2