メインコンテンツへスキップ

Documentation Index

Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt

Use this file to discover all available pages before exploring further.

このトピックでは、Linux 上の Docker コンテナー内で ABBYY FineReader Engine 12 を実行する方法について説明します。 このトピックでは、次の 2 つのセットアップ オプションを取り上げます。
OptionDescription
単一コンテナーLicensing Service と FRE ワーカーを 1 つにまとめてパッケージ化する構成です。

シンプルで、テスト、デモ、単発の OCR ジョブに適しています。
2 つのコンテナーLicensing Service と FRE ワーカーを別々のコンテナーで実行する構成です。

耐障害性に優れており、一方がクラッシュしても、もう一方に影響を与えずに再起動できます。複数のワーカーで 1 つの Licensing Service を共有することもできます。
どちらのセットアップ オプションでも オンライン ライセンスローカル ライセンス をサポートしており、どちらも ubuntu:noble (24.04 LTS) をベースにしています。

ライセンスの種類

FRE 12 では、オンラインとローカルの 2 種類のライセンスを使用できます。どちらの種類も単一コンテナー構成と 2 コンテナー構成の両方で利用できますが、アクティベーションとランタイムの要件は異なります。

オンライン ライセンス

  • ファイル名のパターン: XXXXXXXXXXXXXXXXXXXX.ABBYY.ActivationToken
  • 実行時*.abbyy.com に対して検証されます — コンテナーを起動するたびにインターネット接続が必要です。
  • Licensing Service がインストールされている環境の要件:
    • 有効なインターネット接続
    • *.abbyy.com への外向き HTTPS 通信 (ポート 443) が許可されていること
    • システムの ca-certificates パッケージに GoDaddy Trusted Root CA が含まれていること (ubuntu:noble にはすでに含まれています)
  • 1 つの Licensing Service インスタンスで同時に利用できるオンライン ライセンスは 1 つ のみです。

ローカルライセンス

  • ファイル名パターン: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX.ABBYY.LocalLicense
  • FRE のインストール中にビルド時点でアクティブ化され、その後イメージに埋め込まれます。
  • ランタイム時にインターネット接続は不要です — エアギャップ環境に適しています。

はじめに

このガイドのいずれのセットアップ方法を使用する場合も、以下が必要です。
  • Docker および Docker Compose がインストールされていること (docker compose v2 構文)
  • ABBYY FineReader Engine 12 Linux インストーラー: FRE*.sh
  • ライセンスファイル (.ABBYY.ActivationToken または .ABBYY.LocalLicense) とパスワード

セットアップ オプション 1 — 単一コンテナー

このオプションは、Licensing ServiceとFREワーカーを1つのコンテナーで実行します。エントリーポイントはバックグラウンドでLicensing Serviceを起動し、起動が完了するまで少し待機した後、CLIサンプルを実行して出力を表示し、終了時にすべてのプロセスを正常にシャットダウンします。ローカルテスト、デモ、および1つのコマンドで起動・停止を完結させたいCIジョブに推奨します。

ファイル

空のディレクトリを作成し、以下のファイルを追加します。
  • Dockerfile — 統合イメージ (以下に記載) をビルドします
  • entrypoint.sh — LS を起動し、CLI サンプルを実行して、結果 (以下に示す) を出力します
  • docker-compose.yml — コンテナーをビルドして実行します (下記参照)
  • .env — ライセンスファイル名とパスワード (以下に記載) を格納します

ビルドと実行

  1. 先ほど作成したディレクトリに、FRE*.sh インストーラーとライセンスファイルをコピーします。
  2. ライセンス値を設定した.envファイルを作成します (以下を参照) 。
  3. そのディレクトリで、次のコマンドを実行し、イメージをビルドしてコンテナーを起動します。
    docker compose up
    
CLIサンプルは、バンドルされたDemo.tifをOCRで処理し、認識されたテキストをコンソールに出力します。

.env

# ローカル ライセンスの場合:
LICENSE_FILE=XXXX-XXXX-XXXX-XXXX-XXXX-XXXX.ABBYY.LocalLicense
# オンライン ライセンスの場合:
# LICENSE_FILE=XXXXXXXXXXXXXXXXXXXX.ABBYY.ActivationToken
LICENSE_PASSWORD=your_password_here

docker-compose.yml

services:
  fre:
    build:
      context: .
      args:
        - license_file=${LICENSE_FILE}
        - license_password=${LICENSE_PASSWORD}
    shm_size: 1g
    command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
shm_size: 1g は必須です。FRE はPOSIX共有メモリを使用しており、デフォルトの64MB (/dev/shm) では不足します。この設定を削除または変更しないでください。

Dockerfile

これは2段階ビルドです:
  • ステージ 1 では、gcc:8 を使用して FRE をインストールし、CLI サンプルをコンパイルします。
  • ステージ2では、最小限のubuntu:nobleランタイムイメージを作成し、Licensing Serviceのバイナリ、FREランタイム、コンパイル済みのサンプル、ライセンスファイルをコピーします。
# ステージ1: FREのインストールとCLIサンプルのコンパイル
FROM gcc:8 AS builder

ARG license_file
ARG license_password

COPY ${license_file} /tmp/${license_file}
COPY FRE*.sh /tmp/FRE12.sh

RUN chmod +x /tmp/FRE12.sh && /tmp/FRE12.sh -- \
    --install-dir "/opt/ABBYY/FREngine12" \
    --license-path "/tmp/${license_file}" \
    --license-password "${license_password}" \
    --developer-install

WORKDIR /opt/ABBYY/FREngine12/Samples/CommandLineInterface
RUN make

# 開発者専用ライブラリを削除(ランタイムでは不要)
RUN rm /opt/ABBYY/FREngine12/Bin/libProtection.Developer.so

# ステージ2: Licensing ServiceとFREを含む最小構成のランタイムイメージ
FROM ubuntu:noble

RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
    apt-get install --no-install-recommends -y \
    ca-certificates bash libc6 libglib2.0-0 libgcc-s1 libstdc++6 \
    zlib1g libx11-6 libfreetype6 libxext-dev libice-dev libsm-dev \
    locales && \
    locale-gen en_US.UTF-8 && \
    rm -rf /var/lib/apt/lists/*

# Licensing Serviceのコピー
COPY --from=builder /usr/local/bin/ABBYY/SDK/12/Licensing /usr/local/bin/ABBYY/SDK/12/Licensing/
COPY --from=builder /usr/local/lib/ABBYY/SDK/12/Licensing /usr/local/lib/ABBYY/SDK/12/Licensing/

# FREランタイムのバイナリとデータのコピー
COPY --from=builder /opt/ABBYY/FREngine12/Bin /opt/ABBYY/FREngine12/Bin
COPY --from=builder /opt/ABBYY/FREngine12/Data /opt/ABBYY/FREngine12/Data

# ライセンスファイルのコピー(.ActivationTokenと.LocalLicenseの両方に対応)
COPY --from=builder /var/lib/ABBYY/SDK/12/Licenses/*.ABBYY.* /var/lib/ABBYY/SDK/12/Licenses/

# コンパイル済みCLIサンプルとデモイメージのコピー
COPY --from=builder /opt/ABBYY/FREngine12/Samples/CommandLineInterface/CommandLineInterface /app/
COPY --from=builder /opt/ABBYY/FREngine12/Samples/SampleImages/Demo.tif /app/

# ライセンス用作業ディレクトリの作成
RUN mkdir -p /var/lib/ABBYY/SDK/12/Licenses && chmod 755 /var/lib/ABBYY/SDK/12/Licenses

ENV LD_LIBRARY_PATH=/opt/ABBYY/FREngine12/Bin:/usr/local/lib/ABBYY/SDK/12/Licensing
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

#!/bin/bash

# バックグラウンドでLicensing Serviceを起動する
/usr/local/bin/ABBYY/SDK/12/Licensing/LicensingService /standalone &
LS_PID=$!

# Licensing Serviceの準備が整うまで待機する
sleep 2

# CLIサンプルを実行する
/app/CommandLineInterface $1

status=$?
if [ $status -ne 0 ]; then
  echo "Failed to launch app: $status"
  kill $LS_PID 2>/dev/null
  exit $status
fi

# 出力ファイルの内容を表示する
cat ${1##*-of}
echo "Done"

# クリーンアップ
kill $LS_PID 2>/dev/null

セットアップ オプション 2 — 2 つのコンテナー

このオプションでは、Licensing Service と FRE ワーカーを共有 Docker Compose ネットワーク上の別々のコンテナーで実行します。ワーカーは TCP を介して ls:3023 で Licensing Service と通信します。本番環境へのデプロイに推奨。 サービスを別々のコンテナーで実行することで、いずれかがクラッシュした場合にDockerが独立して再起動できます。また、複数のワーカーが同一のLicensing Serviceに接続することも可能になります。
ライセンスで許可されていない限り、単一の Licensing Service に対して複数のワーカーレプリカを実行しないでください。単一の Licensing Service インスタンスがサポートできるオンライン ライセンスは、同時に1つのみです。

ファイル

空のディレクトリを作成し、以下のファイルを追加します。
  • Dockerfile_ls — 以下に記載の Licensing Service コンテナーをビルドします
  • Dockerfile_worker — 以下に示すFRE worker コンテナーをビルドします
  • entrypoint.sh — ワーカーで CLI サンプルを実行します (下記参照)
  • docker-compose.yml — 2 つのコンテナーを接続します (以下に記載)
  • .env — ライセンスファイル名とパスワードを格納します (形式はセットアップ 1 と同じ)

ビルドと実行

  1. FRE*.sh のインストーラーとライセンスファイルをそのディレクトリにコピーします。
  2. ライセンス値を記載した.envファイルを作成します。
  3. そのディレクトリで、次を実行します:
    docker compose up
    
両方のコンテナーがビルドされ、起動します。Licensing Service が最初に起動し、次にワーカーが起動して、同梱の Demo.tif に対して CLI サンプルを実行し、結果を出力します。

docker-compose.yml

services:
  ls:
    build:
      context: .
      dockerfile: Dockerfile_ls
    restart: on-failure

  worker:
    build:
      context: .
      dockerfile: Dockerfile_worker
      args:
        - license_file=${LICENSE_FILE}
        - license_password=${LICENSE_PASSWORD}
        - service_address=ls:3023
    depends_on:
      - ls
    shm_size: 1g
    command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
    restart: on-failure
いくつか注意点があります:
  • worker では depends_on: [ls] を使用しているため、Licensing Service コンテナーが先に起動します。
  • 両方のサービスで restart: on-failure を使用しているため、それぞれが独立して復旧できます。
  • worker の service_address ビルド引数は ls:3023 です — Docker Compose の組み込み DNS により、ls は Licensing Service コンテナーを指すように名前解決されます。
  • FRE では共有メモリが必要なため、shm_size: 1g は Licensing Service ではなく、worker に設定されます。

Dockerfile_ls

これは2段階ビルドです:
  • ステージ 1 では、Licensing Service のバイナリを抽出するため、--skip-local-license-activation を指定して FRE インストーラーを実行します。
  • ステージ 2 では、最小構成の ubuntu:noble ランタイムイメージを作成し、ポート 3023 を公開して、LicensingService /standalone を PID 1 として実行します。/standalone フラグを指定すると、Licensing Service はフォアグラウンドで実行されたままになります。これは Docker では適切な方法です (フォアグラウンドのプロセスは stdout にログを出力し、コンテナーが停止されると正常に終了します) 。
# ステージ1: FREインストーラーからLicensing Serviceを抽出する
FROM ubuntu:noble AS builder

RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
    apt-get install --no-install-recommends -y \
    bash gzip tar coreutils gettext-base && \
    rm -rf /var/lib/apt/lists/*

COPY FRE*.sh /tmp/FRE12.sh

RUN chmod +x /tmp/FRE12.sh && /tmp/FRE12.sh -- \
    --install-dir "/opt/ABBYY/FREngine12" \
    --skip-local-license-activation

# ステージ2: Licensing Service用の最小ランタイム
FROM ubuntu:noble

RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
    apt-get install --no-install-recommends -y \
    ca-certificates bash libc6 libgcc-s1 libstdc++6 && \
    rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/local/bin/ABBYY/SDK/12/Licensing /usr/local/bin/ABBYY/SDK/12/Licensing/
COPY --from=builder /usr/local/lib/ABBYY/SDK/12/Licensing /usr/local/lib/ABBYY/SDK/12/Licensing/

RUN mkdir -p /var/lib/ABBYY/SDK/12/Licenses && chmod 755 /var/lib/ABBYY/SDK/12/Licenses

ENV LD_LIBRARY_PATH=/usr/local/lib/ABBYY/SDK/12/Licensing

EXPOSE 3023

ENTRYPOINT ["/usr/local/bin/ABBYY/SDK/12/Licensing/LicensingService", "/standalone"]

Dockerfile_worker

これは2段階ビルドです:
  • ステージ 1 では、Licensing Service コンテナーを指す --service-address--developer-install を指定して FRE をインストールし、その後 CLI サンプルをコンパイルします。
  • ステージ 2 では、FRE のバイナリ、コンパイル済みのサンプル、デモ用イメージのみを含む最小構成の ubuntu:noble ランタイムイメージを作成します。worker はネットワーク経由で ls コンテナーと通信するため、Licensing Service のバイナリは含まれません。
# ステージ1: FREのインストールとCLIサンプルのコンパイル
FROM gcc:8 AS builder

ARG license_file
ARG license_password
ARG service_address

COPY ${license_file} /tmp/${license_file}
COPY FRE*.sh /tmp/FRE12.sh

RUN chmod +x /tmp/FRE12.sh && /tmp/FRE12.sh -- \
    --install-dir "/opt/ABBYY/FREngine12" \
    --license-path "/tmp/${license_file}" \
    --license-password "${license_password}" \
    --service-address "${service_address}" \
    --developer-install

WORKDIR /opt/ABBYY/FREngine12/Samples/CommandLineInterface
RUN make

# 開発者専用ライブラリを削除(ランタイムでは不要)
RUN rm /opt/ABBYY/FREngine12/Bin/libProtection.Developer.so

# ステージ2: 最小限のランタイムイメージ
FROM ubuntu:noble

RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
    apt-get install --no-install-recommends -y \
    ca-certificates bash libc6 libglib2.0-0 libgcc-s1 libstdc++6 \
    zlib1g libx11-6 libfreetype6 libxext-dev libice-dev libsm-dev \
    locales && \
    locale-gen en_US.UTF-8 && \
    rm -rf /var/lib/apt/lists/*

# FREランタイムのバイナリとデータをコピー
COPY --from=builder /opt/ABBYY/FREngine12/Bin /opt/ABBYY/FREngine12/Bin
COPY --from=builder /opt/ABBYY/FREngine12/Data /opt/ABBYY/FREngine12/Data

# ライセンスファイルをコピー(.ActivationTokenおよび.LocalLicenseの両方に対応)
COPY --from=builder /var/lib/ABBYY/SDK/12/Licenses/*.ABBYY.* /var/lib/ABBYY/SDK/12/Licenses/

# コンパイル済みCLIサンプルとデモイメージをコピー
COPY --from=builder /opt/ABBYY/FREngine12/Samples/CommandLineInterface/CommandLineInterface /app/
COPY --from=builder /opt/ABBYY/FREngine12/Samples/SampleImages/Demo.tif /app/

ENV LD_LIBRARY_PATH=/opt/ABBYY/FREngine12/Bin
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh

ワーカーのエントリーポイントは、Licensing Serviceを管理しないため、単一コンテナー版よりもシンプルです。ワーカーはサンプルを実行して出力を表示するだけです。
#!/bin/bash

# 指定された引数でCLIサンプルを実行する
/app/CommandLineInterface $1

status=$?
if [ $status -ne 0 ]; then
  echo "Failed to launch app: $status"
  exit $status
fi

# 出力ファイルの内容を表示する
cat ${1##*-of}
echo "Done"

CLI サンプルのカスタマイズ

どちらのセットアップ方法でも、docker-compose.yml では同じデフォルトコマンドが実行されます。
command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
  • -if — 入力ファイル
  • -f — 出力形式プロファイル
  • -of — 出力ファイル
この行を編集して、別の入力ファイル、出力ファイル、または形式プロファイルを指定してください。CLI 引数の完全な一覧については、 FRE Code Samples Library のドキュメントを参照してください。
独自のファイルで OCR を実行するには、ホスト ディレクトリを /app にバインド マウントし、-if/-of でその中のファイルを指定してください。

注意点

以下は、両方のセットアップ オプションに共通する既知の問題です。
  • shm_size: 1g は必須です。 FRE は POSIX 共有メモリに依存しており、デフォルトの 64MB の /dev/shm 割り当てでは足りません。上記の compose ファイルでは、worker サービスに対してすでにこれが設定されています。
  • インストーラーとライセンス ファイルはビルド コンテキスト内に置く必要があります。 どちらの Dockerfile でも COPY FRE*.sh とライセンス ファイルを使用します。これらがビルド元のディレクトリにない場合、ビルドは即座に失敗します。実行時にライセンスをマウントしないでください。ライセンスはビルド中にアクティブ化されます。
  • オンライン ライセンスでは、builder と ランタイム の両方から外向きのネットワーク接続が必要です。 builder ではアクティブ化のために必要であり、ランタイム の Licensing Service では検証を継続するために必要です。
  • ライセンス ファイルやインストーラーはコミットしないでください。 ソース管理では、.env*.ABBYY.*FRE*.sh を無視リストに追加し、その影響とリスクを理解していない限り、公開するイメージには含めないでください。
  • これらの例では ubuntu:noble (24.04 LTS) を使用しています。 以前のドキュメントでは Ubuntu bionic を参照していましたが、これはすでにサポート終了です。Ubuntu のリリースによってパッケージ名は異なります。たとえば、libgcc-8-dev は現在 libgcc-s1libstdc++-8-dev は現在 libstdc++6 です。別のベース イメージを使用する場合は、それに応じてパッケージ一覧を確認してください。

関連項目

Linux への Licensing Service のインストール ライセンス管理 アクティベーション