概要
- この記事では、M1 macでも使えるLaTeX Dockerイメージを紹介します。
- Ghostscriptも含んでいますが、圧縮サイズで520MB程度です。
- マルチアーキテクチャビルドしていますので、amd64な人もarm64な人も使えます。
- 拙稿「pman0214 - DockerでGhostscript対応LaTeX環境構築」で解説しているLaTeX on Dockerイメージが更新されています。
はじめに
M1なmacになり、LaTeX on Dockerが使えなくなってしまいました。
MacTeXはサイズが大きく、ダウンロードに膨大な時間がかかります(ミラーサーバの運用者さまにおかれましては、多大なる苦労をしていることと推察いたします。ありがとうございます)。
サイズを小さくしようとするとinstall-tl
を使用してインストールするなどが必要です。しかし、インストール時期によりバージョンにバラツキが生じます。複数マシンにインストールすると環境の差が生まれる場合もあります。
そこで、マルチアーキテクチャビルドでLaTeXのDockerイメージを作ることにしました。
使い方
「はじめに」に大層なことを書きましたが、使う上で解説することは実はほぼありません。
以下の拙稿をご参照ください。イメージを更新しただけですので、使い方は変わりません。
- pman0214/DockerでGhostscript対応LaTeX環境構築 - Qiita
- pman0214/Docker+VS CodeでLaTeX環境構築 (latexmkrc依存版) - Qiita
amd64なマシンからdocker pullすればamd64なイメージが、arm64なマシンからdocker pullすればarm64なイメージが取得されます。
ビルドしたい人向け
ビルドに用いたファイルはGitHubで公開しています。
Dockerfileでは主に以下のことをしています。
- alpineイメージをベースとし、glibcをインストール
- amd64, arm64で共通で使えるパッケージが無いので、ビルドしたバイナリをインストールしつつ設定
- ghostscriptをインストール
- texをインストール
ビルド環境
当方のビルド環境は以下の通りです。
- Ubuntu 18.04.5 LTS
- Docker Docker version 20.10.7, build f0df350
- Intel Core i9-9900K @3.60GHz / 64GB RAM
DockerのAutomated Buildが課金されてしまうそうなので、現在は手動でビルドしています。そのうちGitHub Action化されるかもしれません。
事前準備
拙稿の「M1 macな人たちに贈るpytorch+jupyterlab docker image / 準備(linuxでビルドする場合のみ) - Qiita」を参照するなどして、マルチアーキテクチャビルド環境を準備しておきます。
ビルド
アーキテクチャを指定して、buildx
コマンドを使ってビルドします。
と言っても、指定できる(ビルドに成功する)アーキテクチャはlinux/amd64
とlinux/arm64
のみです。
% git clone https://github.com/pman0214/docker-alpine-texlive-ja-epspdf.git
% cd docker-alpine-texlive-ja-epspdf
% docker buildx build \
--platform linux/amd64,linux/arm64 \
-t "alpine-texlive-ja-epspdf:2021" \
. --load
docker hubには以下でpushしています。
% git clone https://github.com/pman0214/docker-alpine-texlive-ja-epspdf.git
% cd docker-alpine-texlive-ja-epspdf
% docker buildx build \
--platform linux/amd64,linux/arm64 \
-t "pman0214/alpine-texlive-ja-epspdf:2021" \
. --push
タグ付け
このままではlatest
タグがないイメージとなってしまうため、latest
タグを付けます。
マルチアーキテクチャビルドの場合、同じ名前(タグ)で複数のイメージが存在するため、manifestを操作してタグを操作する必要があります。
作成したいタグのmanifestをmanifestに含めるイメージを指定して作成します。
% docker manifest create pman0214/alpine-texlive-ja-epspdf:latest \
pman0214/alpine-texlive-ja-epspdf@sha256:ee9ccaefff9468fae0a34af33355e880933fa56bfaab5865000081f583756621 \
pman0214/alpine-texlive-ja-epspdf@sha256:414e9dfef683e06ec91547c870c6eaec54c0d7ba484afb6ccda87a90d0656f46
sha265部分は、docker hubで確認するか、以下のようなコマンドを実行してmanifestを取得して確認します。
% docker manifest inspect pman0214/alpine-texlive-ja-epspdf:2021
この出力として、以下のようなJSONが得られます。
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1154,
"digest": "sha256:7be1959252e4b31939683b99438c78343c7bbd8334485e6698d8513be2e558ed",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1154,
"digest": "sha256:f8538f475c72014d9ac4aae5ee59e46bae657d3ce40f2f35184740f698a3ae8c",
"platform": {
"architecture": "arm64",
"os": "linux"
}
}
]
}
作成したmanifestをpushすれば完了です。
% docker manifest push pman0214/alpine-texlive-ja-epspdf:latest
おわりに
本記事では、IntelなmacでもM1なmacでも動くlatex dockerイメージを紹介しました。
使い方は過去記事と変わらないため、使い方の説明は過去記事を参照するだけの形となっています。
一方で、ビルドについては簡単に説明しました。
特に、manifestの操作によるタグの付け方を説明しました。
これでやってM1 macでもlatexを使う気になれそうです。