LoginSignup
9
4

More than 1 year has passed since last update.

M1 macな人たちに贈るLaTeX Dockerイメージ

Posted at

概要

はじめに

M1なmacになり、LaTeX on Dockerが使えなくなってしまいました。

MacTeXはサイズが大きく、ダウンロードに膨大な時間がかかります(ミラーサーバの運用者さまにおかれましては、多大なる苦労をしていることと推察いたします。ありがとうございます)。
サイズを小さくしようとするとinstall-tlを使用してインストールするなどが必要です。しかし、インストール時期によりバージョンにバラツキが生じます。複数マシンにインストールすると環境の差が生まれる場合もあります。

そこで、マルチアーキテクチャビルドでLaTeXのDockerイメージを作ることにしました。

使い方

「はじめに」に大層なことを書きましたが、使う上で解説することは実はほぼありません。
以下の拙稿をご参照ください。イメージを更新しただけですので、使い方は変わりません。

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/amd64linux/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を使う気になれそうです。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4