CWL の requirements 一巡り: DockerRequirement
この記事は CWL Advent Calendar 2020 の10日目の記事です。
Common Workflow Language (CWL) では、ワークフロー実行処理系が満たさなければならない機能以外にも、Process requirements と呼ばれる optional features についても標準化が行われています[1]。
今回は CWL v1.2 で定義されている DockerRequirement
について簡単な解説を行います。また、各サンプルは可能な限り公式の準拠度テストで用いられているファイルを引用します。
対象読者
- CWL をかじったことがあるけど
requirements
はよくわからない人- つまり中級者以上が対象です。
- 初心者は CWL Advent Calendar 2020 の初日の記事へ Go!
例
Conformance test #7: tests/cat3-tool.cwl:
#!/usr/bin/env cwl-runner
class: CommandLineTool
cwlVersion: v1.2
doc: "Print the contents of a file to stdout using 'cat' running in a docker container."
hints:
DockerRequirement:
dockerPull: debian:stretch-slim
inputs:
file1:
type: File
label: Input File
doc: "The file that will be copied using 'cat'"
inputBinding: {position: 1}
outputs:
output_file:
type: File
outputBinding: {glob: output.txt}
baseCommand: cat
stdout: output.txt
DockerRequirement
で使用するコンテナイメージを指定することで、そのイメージ内に含まれているツールをコンテナランタイムを用いて実行することが可能になります。上の例だと debian:stretch-slim
イメージ中の cat
コマンドを使用しています。また、コンテナ内からファイルを参照するためのコマンドオプション設定などは、実行処理系が全て自動でやってくれます。
コンテナイメージは自分で作成することもできますが、例えば生命科学分野であれば、BioContainers などのコミュニティがツールのコンテナ化を行って提供してくれている場合もあるため、可能であればコミュニティやツールの作者自身が提供しているコンテナイメージを利用するといいでしょう。
また DockerRequirement
という名前が付いていますが、コンテナランタイムは必ずしも Docker でなくてもかまいません。実行処理系によっては、uDocker や Singularity に対応している場合があるため、管理者権限がない環境でもコンテナが利用できるかもしれません。
おまけ
今年は2020年です。この記事にもあるように
- 2020年代はツールのインストールをしたら負け
だと思ってください。心温まる手作業でツールをインストールするのは平成までです。
さらに言えば、自分でコンテナイメージを作成するのも平成までです。可能な限りコミュニティが作成したイメージを使いましょう。
大事なことなのでもう一回
- 手作業でツールのインストールをしたら負け
- 再現性が必要なツールについてはコンテナを使いましょう
- それができない場合、
brew
やapt
などのパッケージマネージャを使ってインストールしましょう
- 手作業でコンテナイメージをビルドしても負け
- BioContainers などのコミュニティが提供しているコンテナを使いましょう
- 以下の場合のみ、苦虫を噛み潰したような顔をしながらコンテナのビルドや手作業のインストールを行いましょう
- 対応するコンテナがコミュニティから提供されていない場合
- ビルドできたら、コミュニティに還元できるかを考えてみましょう!うまくいけば、自分でコンテナを管理する必要がなくなるかもしれません!(管理をコミュニティに押し付けるスタイル)
- 各種パッケージマネージャーでも提供されていない場合
- セキュリティ上の理由
- ツールの作者が自分
- 対応するコンテナがコミュニティから提供されていない場合
Discussion