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