> ## 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 コンテナー内で FRE 12 を実行する

> ubuntu:noble 上で、単一コンテナーまたは 2 つのコンテナー構成を使用して、Linux の Docker コンテナー内で ABBYY FineReader Engine 12 を実行します。オンライン ライセンスとローカルライセンスをサポートしています。

このトピックでは、Linux 上の Docker コンテナー内で ABBYY FineReader Engine 12 を実行する方法について説明します。

このトピックでは、次の 2 つのセットアップ オプションを取り上げます。

| Option                                            | Description                                                                                                                                         |
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**単一コンテナー**](#setup-option-1-—-single-container) | Licensing Service と FRE ワーカーを 1 つにまとめてパッケージ化する構成です。<br /><br />シンプルで、テスト、デモ、単発の OCR ジョブに適しています。                                                     |
| [**2 つのコンテナー**](#setup-option-2-—-two-containers) | Licensing Service と FRE ワーカーを別々のコンテナーで実行する構成です。<br /><br />耐障害性に優れており、一方がクラッシュしても、もう一方に影響を与えずに再起動できます。複数のワーカーで 1 つの Licensing Service を共有することもできます。 |

どちらのセットアップ オプションでも **オンライン ライセンス** と **ローカルライセンス** をサポートしており、どちらも `ubuntu:noble` (24.04 LTS) をベースにしています。

<div id="license-types">
  ## ライセンスの種類
</div>

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

<div id="online-license">
  ### オンライン ライセンス
</div>

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

<div id="local-license">
  ### ローカルライセンス
</div>

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

<div id="getting-started">
  ## はじめに
</div>

このガイドのいずれのセットアップ方法を使用する場合も、以下が必要です。

* Docker および Docker Compose がインストールされていること (`docker compose` v2 構文)
* ABBYY FineReader Engine 12 Linux インストーラー: `FRE*.sh`
* ライセンスファイル (`.ABBYY.ActivationToken` または `.ABBYY.LocalLicense`) とパスワード

***

<div id="setup-option-1-single-container">
  ## セットアップ オプション 1 — 単一コンテナー
</div>

<Accordion title="単一コンテナーの詳細">
  このオプションは、Licensing ServiceとFREワーカーを1つのコンテナーで実行します。エントリーポイントはバックグラウンドでLicensing Serviceを起動し、起動が完了するまで少し待機した後、CLIサンプルを実行して出力を表示し、終了時にすべてのプロセスを正常にシャットダウンします。

  ローカルテスト、デモ、および1つのコマンドで起動・停止を完結させたいCIジョブに推奨します。

  ### ファイル

  空のディレクトリを作成し、以下のファイルを追加します。

  * `Dockerfile` — 統合イメージ (以下に記載) をビルドします
  * `entrypoint.sh` — LS を起動し、CLI サンプルを実行して、結果 (以下に示す) を出力します
  * `docker-compose.yml` — コンテナーをビルドして実行します (下記参照)
  * `.env` — ライセンスファイル名とパスワード (以下に記載) を格納します

  ### ビルドと実行

  1. 先ほど作成したディレクトリに、`FRE*.sh` インストーラーとライセンスファイルをコピーします。
  2. ライセンス値を設定した`.env`ファイルを作成します (以下を参照) 。
  3. そのディレクトリで、次のコマンドを実行し、イメージをビルドしてコンテナーを起動します。

     ```bash theme={null}
     docker compose up
     ```

  CLIサンプルは、バンドルされた`Demo.tif`をOCRで処理し、認識されたテキストをコンソールに出力します。

  ### `.env`

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

  ### `docker-compose.yml`

  ```yaml theme={null}
  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"]
  ```

  <Warning>
    {" "}

    `shm_size: 1g` は必須です。FRE はPOSIX共有メモリを使用しており、デフォルトの64MB (`/dev/shm`) では不足します。この設定を削除または変更しないでください。
  </Warning>

  ### `Dockerfile`

  これは2段階ビルドです：

  * ステージ 1 では、`gcc:8` を使用して FRE をインストールし、CLI サンプルをコンパイルします。
  * ステージ2では、最小限の`ubuntu:noble`ランタイムイメージを作成し、Licensing Serviceのバイナリ、FREランタイム、コンパイル済みのサンプル、ライセンスファイルをコピーします。

  ```dockerfile theme={null}
  # ステージ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`

  ```bash theme={null}
  #!/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
  ```
</Accordion>

***

<div id="setup-option-2-two-containers">
  ## セットアップ オプション 2 — 2 つのコンテナー
</div>

<Accordion title="2 コンテナー構成の詳細">
  このオプションでは、Licensing Service と FRE ワーカーを共有 Docker Compose ネットワーク上の別々のコンテナーで実行します。ワーカーは TCP を介して `ls:3023` で Licensing Service と通信します。

  **本番環境へのデプロイに推奨。** サービスを別々のコンテナーで実行することで、いずれかがクラッシュした場合にDockerが独立して再起動できます。また、複数のワーカーが同一のLicensing Serviceに接続することも可能になります。

  <Warning>
    {" "}

    ライセンスで許可されていない限り、単一の Licensing Service に対して複数のワーカーレプリカを実行しないでください。単一の Licensing Service インスタンスがサポートできるオンライン ライセンスは、同時に1つのみです。{" "}
  </Warning>

  ### ファイル

  空のディレクトリを作成し、以下のファイルを追加します。

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

  ### ビルドと実行

  1. `FRE*.sh` のインストーラーとライセンスファイルをそのディレクトリにコピーします。
  2. ライセンス値を記載した`.env`ファイルを作成します。
  3. そのディレクトリで、次を実行します:

     ```bash theme={null}
     docker compose up
     ```

  両方のコンテナーがビルドされ、起動します。Licensing Service が最初に起動し、次にワーカーが起動して、同梱の `Demo.tif` に対して CLI サンプルを実行し、結果を出力します。

  ### `docker-compose.yml`

  ```yaml theme={null}
  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 にログを出力し、コンテナーが停止されると正常に終了します) 。

  ```dockerfile theme={null}
  # ステージ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 のバイナリは含まれません。

  ```dockerfile theme={null}
  # ステージ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を管理しないため、単一コンテナー版よりもシンプルです。ワーカーはサンプルを実行して出力を表示するだけです。

  ```bash theme={null}
  #!/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"
  ```
</Accordion>

***

<div id="customizing-the-cli-sample">
  ## CLI サンプルのカスタマイズ
</div>

どちらのセットアップ方法でも、`docker-compose.yml` では同じデフォルトコマンドが実行されます。

```yaml theme={null}
command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
```

* `-if` — 入力ファイル
* `-f` — 出力形式プロファイル
* `-of` — 出力ファイル

<Note>
  この行を編集して、別の入力ファイル、出力ファイル、または形式プロファイルを指定してください。CLI 引数の完全な一覧については、
  FRE Code Samples Library のドキュメントを参照してください。
</Note>

独自のファイルで OCR を実行するには、ホスト ディレクトリを `/app` にバインド マウントし、`-if`/`-of` でその中のファイルを指定してください。

***

<div id="common-issues">
  ## 注意点
</div>

以下は、両方のセットアップ オプションに共通する既知の問題です。

* **`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-s1`、`libstdc++-8-dev` は現在 `libstdc++6` です。別のベース イメージを使用する場合は、それに応じてパッケージ一覧を確認してください。

***

<div id="see-also">
  ## 関連項目
</div>

[Linux への Licensing Service のインストール](/ja/fine-reader/engine/distribution/distribution-linux/activating-the-library-linux/installing-the-licensing-service-on-linux)

[ライセンス管理](/ja/fine-reader/engine/licensing)

[アクティベーション](/ja/fine-reader/engine/licensing/activation)
