JPedalをDockerで実行する
JPedalは自己完結型のJARとして配布されているため、カスタムDockerイメージをビルドしなくても、標準のJavaイメージ上で実行できます。このページでは、JARを公式のeclipse-temurin
イメージにマウントし、docker runをjava -jarのラッパーとして使うことで、JPedalをDockerで実行する方法を説明します。
これは、JavaがインストールされていないマシンでJPedalを実行したい場合や、システム全体に影響を与えずに特定のJavaバージョンを固定したい場合に便利です。
JPedalをRESTウェブサービスとして実行したい場合は、JPedalのDockerイメージを実行する方法 を参照してください。こちらはあらかじめビルドされたマイクロサービスイメージを使用します。
- Dockerをインストールする
- jpedal.jarをダウンロード する必要があります
eclipse-temurin:25-jreのような Java 17以降のイメージ(初回実行時にDockerが自動的にプルします)
以下のコマンドは、JPedalのJARとファイルが格納されたディレクトリの2つをコンテナにマウントします。/path/to/jpedal.jarはマシン上のJARの場所に、/path/to/dataは入力ファイルが格納されているディレクトリに置き換えてください。
docker run --rm \
-v /path/to/jpedal.jar:/app/jpedal.jar \
-v /path/to/data:/data \
eclipse-temurin:25-jre \
java -jar /app/jpedal.jar --convert "/data/input.pdf" /data/output PNG
各オプションの説明:
-v /path/to/jpedal.jar:/app/jpedal.jar— JPedalのJARをコンテナ内の/app/jpedal.jarにマウントします。-v /path/to/data:/data— ファイルをコンテナ内の/dataにマウントします。入力・出力のパスは/dataからの相対パスで指定します。変換後の出力はマシン上のこのディレクトリに書き込まれます。--rm— 変換完了後にコンテナを削除します。
JARとファイルはどちらも実行時にマウントされるため、イメージを再ビルドする必要はありません。異なるバージョンのJPedalを使いたい場合は、最初の-vで別のJARを指定するだけです。
Windows: マウントにはWindowス形式のパスを使用してください(例:
C:\path\to\data:/data)。コマンドを1行にまとめるか、行継続文字の\をバッククォート`(PowerShell)またはキャレット^(コマンドプロンプト)に置き換えてください。
Linux: マウントされたディレクトリに書き込まれたファイルは
rootが所有者になります。出力ファイルを自分のユーザーが所有するようにするには、コマンドに--user $(id -u):$(id -g)を追加してください。これはDocker Desktop for WindowsまたはmacOSでは不要です。
ローカルで実行する場合と同様に、-jarの前にJVMフラグやJPedalのシステムプロパティを渡すことができます。たとえば、ヒープサイズを増やす場合は次のようにします:
docker run --rm \
-v /path/to/jpedal.jar:/app/jpedal.jar \
-v /path/to/data:/data \
eclipse-temurin:25-jre \
java -Xmx2g -jar /app/jpedal.jar --convert "/data/input.pdf" /data/output PNG
渡せるJPedalの設定やシステムプロパティ(-D...)は、JARを直接実行する場合と同じです。詳細についてはコマンドラインからJPedalを実行する
を参照してください。
毎回フルコマンドを入力するのは手間がかかります。LinuxやmacOSでは、シェルエイリアスでラップすることで、JPedalの引数だけを入力すれば済むようになります。このエイリアスでは$(pwd)を使って、コマンドを実行したディレクトリをマウントします:
alias jpedal='docker run --rm -v /path/to/jpedal.jar:/app/jpedal.jar -v "$(pwd)":/data eclipse-temurin:25-jre java -jar /app/jpedal.jar'
以降は任意のディレクトリから次のように実行できます:
jpedal --convert "/data/input.pdf" /data/output PNG
aliasの行を~/.bashrcまたは~/.zshrcに追記すると、設定が永続化されます。
より移植性を高めたい場合は、スクリプトとして保存する方法もあります。たとえば/usr/local/bin/jpedalに以下の内容で保存します:
#!/usr/bin/env bash
docker run --rm \
-v /path/to/jpedal.jar:/app/jpedal.jar \
-v "$(pwd)":/data \
eclipse-temurin:25-jre \
java -jar /app/jpedal.jar "$@"
chmod +x /usr/local/bin/jpedalで実行権限を付与すれば、任意のディレクトリから次のように実行できます:
jpedal --convert "/data/input.pdf" /data/output PNG
(これらのラッパーはBash/Zsh向けの省略記法です。Windowsでは上記のdocker runコマンドをそのまま実行するか、PowerShell関数を作成してください。)
パスはホストマシン上ではなく、コンテナ内で解決されます。-v /path/to/data:/dataのマウントにより、ファイルはコンテナ内の/dataからアクセスできるため、入力・出力のパスは/dataからの相対パス(例:/data/input.pdf)で指定する必要があります。ホストマシン上のパスではありません。変換したいファイルが、マウントしたディレクトリ内に存在することを確認してください。
マウントする方法はシンプルです。イメージをビルドする必要がなく、別のJARを指定するだけでJPedalのバージョンを切り替えられます。CIやデプロイ用に自己完結型のイメージが必要な場合は、小さなDockerfileを作成してください:
FROM eclipse-temurin:25-jre
COPY jpedal.jar /app/jpedal.jar
ENTRYPOINT ["java", "-jar", "/app/jpedal.jar"]
docker build -t my-jpedal .でビルドし、ファイルを/dataにマウントして実行します。
いいえ。JPedalはJava 17以降を必要とするため、互換性のあるJREを提供するイメージであれば何でも使用できます。デフォルトでJava 25イメージのeclipse-temurin:25-jre
を使用しているのは、軽量かつ公式で最新の状態に保たれているためですが、より小さいイメージを求める場合はAlpineバリアントや他のベンダーのJavaイメージを使用することもできます。ただし、Java 17以降であることが条件です。互換性の詳細についてはJPedalがサポートするJavaバージョン
を参照してください。
この構成では1回の変換を実行して終了するため、スクリプトや単発の処理に最適です。JPedalを長時間稼働するRESTサービスとして実行するには、あらかじめビルドされたDockerイメージを使用してください。詳細はJPedalのDockerイメージを実行する方法 を参照してください。
PDFにフォントが埋め込まれている場合、JPedalはそれを使用するため、レンダリング結果に影響はありません。PDFが埋め込まれていないフォントに依存している場合、JPedalはシステムにインストールされているフォントにフォールバックします。eclipse-temurinイメージにはfontconfigが含まれていますが、実際のフォントファイルは付属していないため、そのようなドキュメントのテキストはグリフが欠けたり代替フォントで表示されたりする場合があります。この問題を解決するには、上記のDockerfileをベースにカスタムイメージで必要なフォントをインストールしてください。たとえばRUN apt-get update && apt-get install -y fonts-dejavuを追加します。
