docker imageを使う

Dockerイメージが多くの人によって作成され、公開されています。 ここでは@amutakeによって作成されているdocker-satysfiを紹介します。

Dockerのインストール

まずはDockerをインストールします。 Dockerのインストール方法についてはDockerの公式ドキュメントをご覧ください。

インストールが完了したら以下のコマンドを実行し、Hello from Docker!と表示されることを確認してください。

docker run hello-world

docker-satysfiの基本的な使い方

docker-satysfiはamutake/satysfiという名前でDocker Hubから提供されています。 このDockerイメージにはsatysfiコマンドとsatyrographosコマンドが含まれており、docker run amutake/satysfi以降にこれらのコマンドを指定することで利用することができます。

例えばDockerイメージに含まれているsatysfisatyrographosのバージョンを確認したい場合は以下のようにします。

docker run amutake/satysfi satysfi --version
docker run amutake/satysfi satyrographos version

文書ファイルをコンパイルする

ではdocker-satysfiに含まれるsatysfiコマンドを使って文書ファイルをコンパイルしてみましょう。なお、satysfiコマンドの詳しい使い方は後述のHello SATySFi!に書かれているので、ここではdockerコマンドのオプションのみ説明します。

カレントディレクトリにdemo.satyという文書ファイルがあり、この文書ファイルをコンパイルしたい場合、以下のコマンドを実行します。

docker run --rm -v $(pwd):/satysfi amutake/satysfi satysfi demo.saty

これでdemo.pdfというファイルができあがります。

このコマンドを分解してみると以下のようになります。

  • docker run: Dockerコンテナを実行
  • --rm: 終了時にコンテナを削除(省略可)
  • -v $(pwd):/satysfi: カレントディレクトリをコンテナ内の/satysfiにマウント
  • amutake/satysfi: イメージ名
  • satysfi demo.saty: demo.satyをコンパイル

docker-satysfiでは/satysfiというディレクトリがデフォルトのワーキングディレクトリとして設定されています。 コンテナ内で実行されるコマンドはこのディレクトリ内で実行されます。

この例ではホストのカレントディレクトリにdemo.satyがあるので、-v $(pwd):/satysfiを指定することでコンテナ内からdemo.satyが見えるようになり、satysfi demo.satyでコンパイルすることができるようになります。

コンパイル結果のPDFはコンテナ内の/satysfiに出力されます。/satysfiにはホストのカレントディレクトリがマウントされているので、結果としてPDFはホストのカレントディレクトリに置かれるということになります。

SATySFiのバージョンを指定する

SATySFiの特定のバージョンを使いたい場合はdocker-satysfiを使うと簡単です。 例えばv0.0.6を使いたい場合は以下のようにamutake/satysfi:0.0.6と指定します。

docker run amutake/satysfi:0.0.6 satysfi --version

上記のコマンドを実行するとSATySFi version 0.0.6と表示され、確かにv0.0.6が使われていることが確認できます。

docker-satysfiの発展的な使い方

opamとsatyrographosでライブラリをインストールする

docker-satysfiには(後述する一部のタグを除いて)opamコマンドとsatyrographosコマンドが含まれているため、satyrographos-repoに登録されているSATySFiのライブラリを利用することができます。

例えばsatysfi-baseをインストールしつつdemo.satyという文書ファイルをコンパイルしたい場合、以下のようにします。

docker run --rm -v $(pwd):/satysfi amutake/satysfi \
  sh -c "opam update && opam install satysfi-base && satyrographos install && satysfi demo.saty"

Satyrographosの詳しい使い方についてはパッケージの読み込み・インストールを参照してください。

より小さいサイズのイメージを使う

ここまでの説明で使ってきたイメージは圧縮後で1GB程度という比較的大きいイメージでした。 これは、OCamlコンパイラや、SATySFi・Satyrographos自体のビルドに必要なライブラリがすべて含まれているためです。

docker-satysfiでは、CIなどでの利用でイメージのダウンロード時間を少しでも削減したい場合や、機能を削ってもいいので小さいサイズのイメージが使いたい場合のために、slimタグとopam-slimタグが用意されています。

slimタグがつけられているイメージはsatysfiコマンドとsatyrographosコマンドのみを含むイメージです。 docker-satysfiでは最も小さいイメージですが、opamやOCamlコンパイラは含まれていません。

opam-slimタグのイメージにはsatysfiコマンドやsatyrographosコマンドそしてopamコマンドが含まれていますが、OCamlコンパイラなど、satysfisatyrographosをビルドするのに必要なバイナリ・ライブラリは一切含まれていません。しかし通常SATySFiで文書をコンパイルする場合はこれらのOCamlライブラリは必要ないので、ほとんどのユースケースではこのタグの機能で事足ります。なお、2021-03-24時点でopam-slimは実験的なイメージであることに注意してください。

以上のように、slimopam-slimは機能を削っている代わりに小さいイメージとなっています。

なお、slimopam-slimはともに0.0.6-slim0.0.6-opam-slimと指定することでSATySFiの特定のバージョンで利用することができます。

SATySFiの最新版を使う

docker-satysfiではnightlyというタグも提供しています。 これは毎日日本時間9:00にその時点でのSATySFiとSatyrographosの最新版をビルドしているイメージです。

nightlyタグはslimタグと同様にsatysfisatyrographosしか含まれていない(opamコマンドが含まれていない)ことに注意してください。