はじめに
この記事は、DiscordBotをDockerfile化してGoogleComputeEngine上のDebian9に乗せ、
動かすための手順をまとめたものです。DiscordBotの作り方は説明していません。
前回はDiscordBotを作成し、GCPのDebianに普通にpythonをインストールして実行しました。
それの続きです。
Discord Botを作ってGoogleComputeEngineに配置
作業の流れ
- Botを起動するためのDockerfileの作成
- GCP上のDebian9にdockerをインストール
- Dockerfileとソース一式をDebian9に配置して実行
Dockerfileの作成
こんなかんじのディレクトリ構成にしようと思います。
src
以下にはDiscordBotが置いてあります。DiscordBotを使用するためのDiscord側の設定などは割愛します。
<root>
│ Dockerfile
│ README.md
└─src
│ config.ini
│ main.py
└─img
daijobu.jpg
sonance.png
sonano.png
main.pyを実行するDockerfileを作ります。
FROM python:3.6
# 必要なライブラリをインストール
RUN pip install discord
RUN pip install jaconv
# ソースをコンテナ内にコピー
COPY ./src/ ./src/
# 作業フォルダを設定しコマンド実行
WORKDIR ./src/
CMD ["python", "main.py"]
Debian9にdockerをインストール
GCP上に作成したDebian9にdockerをインストールします。
公式サイトの手順を参考に、以下を順番に実行。
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
コンテナの配置と実行
無事にdockerのインストールが終わったら、コンテナを配置して実行してみましょう。
今回は/home/amama/docker/wobbuffetbot
にファイル一式を置きます。私はWinSCPでコピっちゃいました。
ファイルを置いたらファイルを置いたディレクトリに移動し、以下のコマンドでDockerfileをビルド。名前はamama/wobbuffetbot
にします。最後の.
はDockerfileがあるディレクトリ(カレントディレクトリ)です。
$ sudo docker build -t amama/wobbuffetbot .
(中略)
Successfully built fe2a3b8411c5
Successfully tagged amama/wobbuffetbot:latest
$
無事ビルドが終わったら、イメージの一覧を見てみましょう。
イメージamama/wobbuffetbot
が出来ています。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
amama/wobbuffetbot latest fe2a3b8411c5 3 minutes ago 926MB
python 3.6 bb8fb36e5fd8 4 days ago 912MB
起動してみましょう。
コンテナの名前は適当にbot
とします。
$ sudo docker run -d --name bot amama/wobbuffetbot
4605c2c15e9931b306cb8d81229a53b6e63e4429a84d49de9b9414941e375a29
$
実行できました。
Discordで何か発言すれば、結果が返ってきます。
おわりに
一式、GitHubに上げました。よろしければどうぞ。
これまでは手動でpythonのコマンド叩いて起動したり、終わったらKillする必要がありましたが、
コンテナ化によってデプロイがだいぶ楽になりました。
ボイスチャンネルに入れるBotも作ってみたいけど、何が出来るのか調べてみないとよくわかりませんね。。。