Docker for Windows をインストールしてDocker上でBFS-XとポジションサーバーとInfluxDBとGrafanaを稼働させてみた件

こんにちはくもすけです。

tatsuiさんの書かれたDocker上でBFS-Xを…の記事を読んで、重い腰を上げてDockerについて少し試してみたので情報共有してみます。

まず初めに、今回私はWindows 10 ProのPCで試しましたが、Homeではもう少し小技がいるのかもしれませんのでご注意ください。

Docker Desktop のインストール

まずは、Docker Desktop for Windows をインストールします。基本的にはインストーラーで簡単にインストールは完了しました。
(Hyper-Vを有効化して…などいろいろ書いているサイトはありましたが、2020/7/8の現時点では何も設定を変えることなくインストールするだけでした)

ダウンロードはこちらから行いました。

画像1

安定板のStableとベータ版的な扱いのEdgeがありますので、今回はStableを選択してダウンロードしました。

ダウンロードした Docker Desktop Installer.exe を起動すると、2つのチェックボックスがあるダイアログが出てきます。

画像2

WSL2 ってのはよくわからないけど、デフォルトのまま(どちらもチェック)でOKを押してインストールします。

画像3

画像4

インストールが完了すると「Close and restart」というボタンが現れるので押すとPCが再起動します。(ほかのソフトが立ち上がっていれば閉じておきましょう)

PCの再起動後、タスクバーには Docker Desktopのくじらのアイコンがあります。

画像5

最初は赤色くじらで failed と表示されていて、WSL2のインストールがまだ終わってないというダイアログが画面に出てきます。

画像10

書かれている説明に沿ってリンク (https://aka.ms/wsl2.kernel...)をクリックしてMicrosoftのページを開きます。

画像10

その中にある「最新のWSL2 Linuxカーネル更新プログラムパッケージをダウンロード」というリンクをクリックして wsl_update_x64.msi をダウンロードして実行します。

画像8

画像10

画像10

WSL2の更新インストールが終わったら、元のダイアログの 「Restart」 ボタンを押します。

画像11

今度はタスクトレイのくじらが白くじらでstartingとのこと。

画像12

初回の起動は数分かかるそうなので黙って待ちます。

画像13

起動完了するとダッシュボード(というのかな)が表示されます。

画像14

白くじらのステータスは running です。

ダッシュボードのチュートリアルをスタートしてみてもよいですし、そのまま黙って閉じてもOKです。

ダッシュボードはくじらアイコンを右クリックして dashboard でいつでも表示できます(何に使うのかはわかってないけどw)

画像42

これでインストールは完了です。

構成ファイルの用意

先に紹介したnoteで配布されている btcbot-docker .zip を使ってみましょう。

適当なデータフォルダを作って、その中に Docker のファイルを展開します。(下記の私の例では G:\Docker というフォルダを作りました)

ダウンロードした btcbot-docker .zip をフォルダに展開します。

画像15

このフォルダをカレントフォルダにして作業を行います。

少し中身を見てみましょう docker-compose.yaml というファイルがあり、この中に配布されているイメージ(コンテナ?)のビルド方法が列記されています。

例えば bfs-x というところを見ると、docker/bfs-x の中にビルドに関連するファイルがあるように見えます。

画像16

docker/bfs-x フォルダを開いてみましょう。その中に Dockerfile というファイルがあるので開いてみると、イメージのビルド方法についてここにいろいろと記載があるようです。

画像17

bfs-xイメージを作るには、こういう手順で…とスクリプトが書かれているようですね。

こんな感じに環境構築のための自動スクリプトがあって、それをもとに自動的に(それぞれの環境に合わせて)イメージを作ってくれます。

APIキーなどの設定

.env ファイルの中にAPIキーと(ポジションサーバー出力用の)Webhookを指定しておくことでイメージを作る際に書き込むことができます。

画像37

具体的な動作の説明としては docker-compose.yaml の environment の指定で環境変数として渡されて、Dockerfile で指定されている手順に沿って btcbot-docker\docker\bfs-x にある雛形の trade.yaml が所定の場所にコピーされた後に、entrypoint.sh が実行されてそれぞれの箇所の書き換えが行われるという手順になっています。(自動で行われますので知らなくてもいいです)

画像38

イメージの作成(build)

では、実際にイメージを構築してみましょう。コマンドライン操作はWindows Power Shellを使います。(古くからのコマンドプロンプトでもできる?のかもしれませんが、今回はWindows Power Shellを使いました)

MSYS2とかwinptyとかを使わないといけないのかと思っていろいろと試しましたが、結局windows標準のWindows Power Shellで問題なく操作できました。

Windows Power Shell を立ち上げて、docker-compose.yaml  があるフォルダをカレントフォルダにして、作業スタートです。

画像31

まずはイメージを確認してみましょう。

docker images

というコマンドでdocker内にできているコンテナのイメージを確認してみると、まだ空っぽなことがわかります。

画像31

ちなみに、実際のdocker内のイメージは c:\users\xxxx\AppData\Local\Docker\wsl\data 内のイメージファイルに入っているようです。現時点では883MBでした。

画像19

さて、イメージの作成スタートです。先のnoteで書かれていた下記のコマンドを実行します。

docker-compose build bfs-x

docker-compose.yaml に記述された内容に沿って bfs-xのためのイメージが build されます。

画像32

ベースのイメージを読み込んだり、必要なライブラリをpipでインストールしたり、TA-Libのコンパイルなどが順次実行されていきます。

画像32

一通りbuildが完了したら

Successfully tagged btcbotdocker_bfs-x:latest

と表示されました。

​改めて

docker images

コマンドでイメージを確認してみましょう

画像32

2つのイメージが出来上がっていますね。
bfs-xイメージは docker-compose コマンドに作成指示して出来たイメージです。
pythonというイメージはdocker\bfs-x\Dockerfile によって読み込まれて作られたイメージなのかな(よくわかってない)

先のcドライブにあったイメージファイルが3.3GBまで大きくなってるので、この中にたぶんイメージが作られたのでしょう。

画像22

コンテナの起動

作成したイメージをもとに、コンテナを起動してみます。

実行するコマンドは

docker-compose up -d bfs-x

です。

bfs-xのコンテナが立ち上がり、その際に docker-compose.yaml で関連するコンテナとして指定されているpos-serverコンテナとgrafanaコンテナ、そしてgrafanaコンテナに関連付けられているinfluxdbコンテナも自動的にネットから引っ張ってきてイメージ構築&コンテナ稼働まで行われます。

画像24

influxdサーバーやgrafanaサーバーが立ち上がったために、ファイアウォール開放するようにダイアログが出ることがありますので、「アクセスを許可する」ボタンで許可してやります。

画像25

すべてのコンテナの起動が完了しました。

画像33

イメージを確認すると、grafanaサーバーのイメージとinfluxdbサービスのイメージが増えていますね。

画像32

稼働中のコンテナを確認するには

docker ps -a

コマンドを使います。

画像32

bfs-xが動作しているコンテナと、pos_serverが動作しているコンテナ、influxdbサービスが動作しているコンテナとgrafanaサーバーが動作しているコンテナ、合計4つの仮想マシン(コンテナ?)が動作しているのがわかりますね。

ブラウザから

http://localhost:3000/

へアクセスしてみましょう。Grafanaコンテナの中でGrafanaサーバーが稼働していることがわかりますね。

画像30

初期ユーザー名 admin 初期パスワード admin でログインして(初回パスワード設定をして)みてください。

画像28

ダッシュボードのサンプルとして用意されているものを開いたらちゃんとダッシュボードも開きました。

画像32

たしかに用意されているイメージは簡単に構築できますね。
GrafanaやInfluxDBは誰かが用意してくれたイメージをサーバー(Docker hub)から引っ張ってきて起動させるだけで完成するようです。
bfs-xイメージ(コンテナ)やpos_serverイメージ(コンテナ)はpython:3.6-stretchというイメージを引っ張ってきてそれにちょっと必要なライブラリをインストールしたりしてカスタマイズする形で作られました。

起動するだけでinfluxdbコンテナの中ではinfluxdbが稼働していますし、pos-serverコンテナの中ではすでにpos_server.py が稼働しています。(entrypoint-pos-server.shの最後のところで python pos_server.py と記述されているので、コンテナを稼働させたときに自動的に pos_server.pyが起動されています)

画像33

稼働させるbotの準備

ロジックのファイル(.py + .yaml) はbfs-strategyフォルダに入れておきます。

画像39

このフォルダはdocker-compose.yaml の指定により、コンテナ側からは

/my-strategy

フォルダへマウントされていてアクセス可能です。

画像40

ロジックのログファイルフォルダ指定はこのように /work/xxxx/ と指定しましょう。

画像41

/work フォルダは ホスト(windows10)側のbtcbot-docker\workへマウントされています。

dockerではコンテナに保存されたデータは永続化されておらず、「 docker-compose down -v」等のコマンドでコンテナを停止すると、 コンテナ内に保存されたデータはすべて削除されてしまいますので、ポジション情報などが保存されるログファイルはこのマウントしたホスト側に保存するようにしておくのが良いでしょう。

コンテナの操作

では、botを起動させるために、bfs-xコンテナへログインしてみましょう。

docker-compose exec bfs-x bash

コマンドを実行すると、コンテナのなかでbashが起動します。
先に説明したように、/my-strategy フォルダへアクセスすると、ホスト側のbfs-strategyフォルダが見えています。

画像39

あとは、

python trade.py /my-strategy/mmbot.py /my-strategy/mmbot.yaml

のようにbfs-strategyフォルダの中に入れておいたロジックを指定して実行すると、botが走り出します。

画像40

これで完成です。

botは取引状況をpos_serverへ通知し、pos_serverが定期的にポジション・損益情報をinfluxdbへ書き込みますので、ホストからgrafanaへアクセスすることでいい感じに可視化できます。

画像41

 bfs-xコンテナ稼働中でもホスト側のbfs-strategyフォルダの中にあるロジックの設定ファイル(yamlファイル)を書き換えればリアルタイムでパラメータを変えたりすることも可能です。



この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
7
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。