簡単！GCP+Dockerで新型コロナウィルス解析プロジェクトに参加しよう

# 新型コロナウィルス解析プロジェクト

今更なので説明は省略しますが、私も分散コンピューティングプロジェクト [Folding@Home](https://foldingathome.org/) の新型コロナウィルス解析プロジェクトに参加しました。
たくさんの参加者でかなりの演算能力になっているようですが、まだ解析は継続しています。
[Folding@Home](https://foldingathome.org/) について素晴らしい記事を既に書かれた人達と同様に、新型コロナウィルス解析プロジェクトに参加される方が増え、１日でも早く解析が進み好転に繋がることを願いこの記事を書きました。
本記事は Google Cloud Platform (以降、GCP) で、Docker コンテナを使った方法を記載しています。

## 解析プロジェクトの参加は簡単！
実際に GCP で参加するための環境構築手順を記載します。
環境構築の方法は複数ありますが、かなり簡単に構築できました。
GCP で Docker となると GKE が浮かびますが、GKE は使いません。

### 前提条件
* GCP を触ったことがある人向け。ある程度わかっている人向け。（細かく説明していません。）
* 簡単に構築ということで・・・
 * GPU 使用の手順は未記載。
 * VPC は Default をそのまま使用。
 * コマンドのオプションは使用したもののみ記載。


### 1. GCP プロジェクトを作成する
GCP の始め方など詳細説明は割愛しますが、本記事では analysis-covid19 という名前でプロジェクトを作成しました。

![2020-04-20_16h58_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/98d8a541-80fc-f7b2-40d0-4b056b8ec26e.png "GCP プロジェクト作成画面")


### 2. 実行用 Docker コンテナの Dokerfile の取得
Github にて john k tims さんが提供されている [Folding@Home 実行用 Docker コンテナ](https://github.com/johnktims/folding-at-home)から Dokerfile などをダウンロードします。
Cloud Shell を立ち上げ、以下のコマンドを実行します。

```shell:gitコマンド
git clone https://github.com/johnktims/folding-at-home.git
```

ダウンロードされると、folding-at-home フォルダが作成されます。
![2020-04-20_17h09_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/727b9e99-8420-beb4-0f30-1189bb78f2c5.png "Cloud Shell画面")


### 3. Cloud Build で Docker イメージの作成、Container Registry に保存
作成された folding-at-home フォルダに移動し、以下のコマンドを実行します。（Cloud Build を使わなくてもできますが楽なので・・・）
`gcloud builds submit --tag gcr.io/[PROJECT_ID]/[IMAGE_NAME] .`

Docker イメージ名を "folding-at-home" として、以下のコマンドを実行しました。(プロジェクト名は "analysis-covid19")

```shell:gcloudコマンド
gcloud builds submit --tag gcr.io/analysis-covid19/folding-at-home .
```

gcloud builds コマンドが SUCCESS となると、Cloud Build のビルド履歴画面に作成した履歴と　Container Registry のリポジトリ画面に作成したイメージが表示されます。

Cloud Build ビルド履歴画面は履歴が表示されます。
![2020-04-20_17h49_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/b2ee4534-7da7-6053-a563-d6e898230f05.png "Cloud Build ビルド履歴画面")


Container Registry リポジトリ画面は指定したリポジトリ名が表示され、リポジトリが作成されています。
![2020-04-20_17h50_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/97113da1-1024-b17d-3947-d5a2a07e8f5f.png "Container Registry リポジトリ画面")

### 4. ファイアウォールルールの作成
Folding@home の WEB コントロール画面のアクセスは、ポート7396を空ける必要があるので、ファイアウォールルールを作成します。

`gcloud compute firewall-rules create [FIREWALLRULE_NAME] --action (deny | allow ) --source-ranges [SOURCE_RANGE] --rules (PROTOCOL[:PORT[-PORT]]) `

本記事では以下のコマンドを実行しました。

```shell:gcloudコマンド
gcloud compute firewall-rules create default-allow-7396 --action allow --source-ranges 0.0.0.0/0 --rules tcp:7396
```

ファイアウォールルールが作成され、リストの１番上に表示されました。
![2020-04-20_20h06_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/08d70e0d-da99-ccec-0785-3493c5246f65.png "ファイアウォールルール画面")

### 5. Compute Engine インスタンスの作成
Compute Engine インスタンスを、コンテナ専用コマンドで作成します。
オプションはいろいろありますが、使用したものだけ記載しています。

`gcloud compute instances create-with-container [INSTANCE_NAME] --zone [ZONE_NAME] --machine-type [MACHINE_TYPE] --container-image [IMAGE_NAME]`

　--machine-type を指定しない場合は、デフォルト n1-standard-1 になります。
　前述していますが、本記事ではGPU使用の手順は未記載です。

```shell:gcloudコマンド
gcloud compute instances create-with-container foldingathome-covid19 --zone us-central1-b --machine-type n1-standard-4 --container-image gcr.io/analysis-covid19/folding-at-home
```
ここでは、n1-standard-4（４Core）を指定しています。変更可能ですので課金を考慮して指定しましょう。

指定したインスタンス名が表示され、VM インスタンスが作成されます。
![2020-04-20_19h37_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/5655a209-9796-9853-9d78-42c2ad110bfd.png "Compute Engine VMインスタンス画面")

インスタンス作成と同時にコンテナが実行されている状態となります。

### 6. Folding@home WEB コントロール画面の表示
Compute Engine の画面でコンテナが乗っている Compute Engine の外部IPアドレスを確認し、ブラウザでURLを指定し、Folding@home の WEB コントロール画面を表示します。
`http://[Compute Engine の外部IPアドレス]:7396`

正常に実行できていれば、以下のWEBコントロール画面が表示され実行中となっています。
![2020-04-20_20h05_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237667/f0f0881f-3e29-65fe-d858-b3bfb90f02b2.png "Folding@home")

## 終わりに
新型コロナウイルスの状況が好転する兆しはまだ見えませんが、好転に向けて少しでもできることがあればやっていきたいという思いはみなさん同じかと思います。
分散コンピューティングプロジェクトに更に多くの人が参加することで、早く解析が完了し次のステージに進めることを願っています。
みなさまが参加する上で、本記事が少しでも参考になったら幸いです。

# 謝辞
Folding@home 関係者の方々、Folding@homeの情報提供の記事、参考URLの記事を執筆された方々に厚く御礼申し上げます。

# 参考URL
https://qiita.com/jey0taka/items/24c5590ae9cb2b66d383

https://qiita.com/hirosys-biz/items/fa19e596c3872059bf2c

https://cloud.google.com/container-optimized-os/docs/how-to/run-container-instance?hl=ja

https://www.newsweekjapan.jp/stories/world/2020/04/folding-home.php

https://pc.watch.impress.co.jp/docs/news/1246939.html