M1 MacにDocker版OrthoFinderをインストールする


M1 Macの場合、デフォルトでdockerイメージに入っているdiamondがコケるので、手動でインストールし直します。

試験環境：
MacBook Air
チップ Apple M1
メモリ 16GB
OS Sonoma 14.4


最新のDockerをインストール済みとします。
ちなみにMacでdockerの使用するリソースの量を変更するにはこの画面から行えます。デフォルトだとCPUやメモリの使用量が控え前になっていると思います。使用環境に応じて変更してください。

![スクリーンショット 2024-12-09 11.57.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77995/5447579f-f104-69b1-e777-2ac3b374849b.png)



# Orthofinderをインストール
ターミナルを立ち上げ、
```
$ docker pull davidemms/orthofinder
Using default tag: latest
latest: Pulling from davidemms/orthofinder
349d5c06b276: Download complete 
fe9f5cfcf49b: Download complete 
8d9c1f0287f8: Download complete 
b685bc90db92: Download complete 
14f89c3e0b4d: Download complete 
afcfc7856866: Download complete 
e0392ddd5dba: Download complete 
76b1f1a2fcef: Download complete 
184536648910: Download complete 
9e3ea8720c6d: Download complete 
68fc9964a394: Download complete 
d573939d7fe2: Download complete 
113a3d970e46: Download complete 
e35ae20d6b00: Download complete 
cd36e3745e5c: Download complete 
a0b040f25a5f: Download complete 
Digest: sha256:690dcec8f68035f8eca7f2e3248ed47afff6a89d4c2d5ddbc372a4cba05909f2
Status: Downloaded newer image for davidemms/orthofinder:latest
docker.io/davidemms/orthofinder:latest
```
```
docker run --platform linux/amd64 davidemms/orthofinder orthofinder -h
```
でヘルプ画面が出れば成功。

Orthofinderは、指定したディレクトリにあるfastaファイルを全て対象にして、そのディレクトリの下で実行します。仮に、fastaファイルを置いたディレクトリがデスクトップ上に作られたフォルダOrthoFinderだったとします。
<USER NAME> はご自身のPC名に合わせてください。

このまま、orthofinderを実行するには、
```
docker run -v /Users/<USER NAME>/Desktop/orthofinder:/data davidemms/orthofinder orthofinder -f /data
```
を打てば良いのですが、実行すると、以下のようなdiamondのエラーが出ます。

```
docker run -v /Users/<USER NAME>/Desktop/orthofinder:/data davidemms/orthofinder orthofinder -f /data
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

OrthoFinder version 2.5.5 Copyright (C) 2014 David Emms

2024-11-29 00:03:41 : Starting OrthoFinder 2.5.5
10 thread(s) for highly parallel tasks (BLAST searches etc.)
1 thread(s) for OrthoFinder algorithm

Checking required programs are installed
----------------------------------------
diamond produced the following output:

Illegal instruction


Illegal instruction


ERROR: Cannot run diamond

Environment:
{'PATH': '/opt/OrthoFinder_source/scripts_of/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'HOSTNAME': '951e93a09698', 'LANG': 'C.UTF-8', 'GPG_KEY': 'A035C8C19219BA821ECEA86B64E628F8D684696D', 'PYTHON_VERSION': '3.10.11', 'PYTHON_PIP_VERSION': '23.0.1', 'PYTHON_SETUPTOOLS_VERSION': '65.5.1', 'PYTHON_GET_PIP_URL': 'https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py', 'PYTHON_GET_PIP_SHA256': '96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207', 'DEBIAN_FRONTEND': 'noninteractive', 'PACKAGES': 'wget mafft mcl libatlas-base-dev ncbi-blast+', 'FASTTREE_URL': 'http://www.microbesonline.org/fasttree/FastTree', 'FASTME_VER': '2.1.6.2', 'ORTHOFINDER_FILE_NAME': 'OrthoFinder_source.tar.gz', 'ORTHOFINDER_URL': 'https://github.com/davidemms/OrthoFinder/releases/latest/download/OrthoFinder_source.tar.gz', 'ORTHOFINDER_PATH': '/opt/OrthoFinder_source', 'HOME': '/root'}

Command:
export PATH=/opt/OrthoFinder_source/scripts_of/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
diamond makedb --ignore-warnings --in /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/Species0.fa -d /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/diamondDBSpecies0
diamond blastp --ignore-warnings -d /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/diamondDBSpecies0 -q /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/Species0.fa -o /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/test_search_results.txt --more-sensitive -p 1 --quiet -e 0.001 --compress 1

Resolve any issues so that you can successfully run the above commands for OrthoFinder's dependencies on your computer and then re-run OrthoFinder.
Please check diamond is installed and that the executables are in the system path

ERROR: An error occurred, ***please review the error messages*** they may contain useful information about the problem.
```

エラーメッセージを読むと"Checking required programs are installed"の項目で"ERROR: Cannot run diamond" が出ています。
内部で使用するdiamondのインストールに失敗しているようです。

# diamondを再インストール
そこで以下のようにorthofinderのdocker imageに修正を加えます。
```
docker run --platform linux/amd64 -it -v /Users/<USER NAME> /Desktop/orthofinder:/data davidemms/orthofinder bash
```
このコマンドを実行すると、docker imageの中に入ることができます。
diamondは
```
/opt/OrthoFinder_source/scripts_of/bin
```
の中に入っています。これを最新版のdiamondに置き換えます。

```
# 適時、v2.1.10は最新版にしてください。
wget http://github.com/bbuchfink/diamond/releases/download/v2.1.10/diamond-linux64.tar.gz -O diamond.tar.gz

```
ダウンロードがうまくできていれば以下のようなメッセージが出てくるはずです。
```

## ダウンロードのメッセージ中略 ###
`diamond-linux64.tar.gz' に保存中

diamond-linux64.tar.gz      100%[===============================================================>] 27.79M 22.1MB/s 時間 1.3s   

2024-11-30 12:18:20 (22.1 MB/s) - `diamond-linux64.tar.gz' へ保存完了 [29135618/29135618]

```
もしダウンロードが失敗したときはdiamondのURLが変更されている可能性がありますので、diamondのgithubのページにアクセスして調べてください。
```
tar -xzf diamond.tar.gz
chmod +x diamond
```

次に（ファイルをコピーする）cp コマンドで、orthofinderにデフォルトで入っているdiamondを別のファイル名として保存しておきます。
```
cp /opt/OrthoFinder_source/scripts_of/bin/diamond /opt/OrthoFinder_source/scripts_of/bin/tmp_diamond 
```
lsでdiamondとtmp_diamondというファイル名が２つとも存在することを確認します。
```
ls -lh /opt/OrthoFinder_source/scripts_of/bin
```
以下のコマンド（自分でインストールしたdiamondをorthofinderのフォルダにコピーする）を実行します。
```
cp /usr/local/bin/diamond  /opt/OrthoFinder_source/scripts_of/bin/
```
以下のコマンドでtmp_diamondとdiamondの両方のファイルがあることを確認します。
```
ls -lh /opt/OrthoFinder_source/scripts_of/bin
```
正しくdiamondが参照されているか調べます。
```
# which diamond
/opt/OrthoFinder_source/scripts_of/bin/diamond
```
diamondの動作確認でversion情報が出るか調べます。
```
# diamond --version
diamond version 2.1.10
```

現在いるdocker imageの内部で実行する場合には、
```
orthofinder -f /data
```
とコマンドを打つと、Desktop上のOrthoFinder/のfastaファイルに対してOrthoFinderの実行が始まり、エラーが出ずに終了すれば大丈夫です！

# diamondをアップデートしたorthofinderを保存する

以下、上記のOrthofinder終了後にやってください。
再解析を行う場合には、diamondの変更を反映した新しいコンテナ環境を作り直す必要があります。
その場合は、以下の手順でできます。

起動済みのコンテナを終了します。
```
exit 
```
dockerの< コンテナID > を取得します。
```
docker ps -a 
```
実行例：
```
docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS                     PORTS    NAMES
abcd1234efgh   davidemms/orthofinder "/bin/bash"              5 minutes ago    Exited (0) 5 seconds ago            quirky_pare
```
（もしかしたら沢山出てくるかもしれませんが、COMMANDがbashのものが相当すると思います ）
ここで表示された < コンテナ ID/CONTAINER ID> を使用して、新しいイメージを保存します。
```
docker commit <コンテナID> modified-orthofinder
```
modified-orthofinderは新しいイメージの名前で、任意の名前に変更可です
実行例：
```
docker commit abcd1234efgh modified-orthofinder
```
修正した新しいイメージが作成されたことを確認
```
docker images
```
出力例
```
docker images
REPOSITORY              TAG       IMAGE ID       CREATED          SIZE
modified-orthofinder      latest    5678abcd1234   1 minute ago     1.5GB
davidemms/orthofinder   latest    1234efgh5678   1 hour ago       1.5GB
```
“modified-orthofinder”がdiamondを修正したorthofinder,
davidemms/orthofinderがデフォルトでインストールしたorthofinderのイメージです。

diamond修正版(modified-orthofinder)でorthofinderを実行するには、以下のコマンドで可能になっています。
```
docker run --platform linux/amd64 -v /Users/<USER NAME> /Desktop/orthofinder:/data modified-orthofinder orthofinder -f /data
```


参考：
Dockerに慣れる : 一時的にコンテナ内の情報を変更する https://leico.github.io/TechnicalNote/Docker/basic-volatility-change
Dockerに慣れる : 変更したコンテナイメージを保存する https://leico.github.io/TechnicalNote/Docker/basic-commit-container