跳轉到主要內容
本節說明如何在 Docker 容器中執行 ABBYY FineReader Engine 12。此情境使用兩個容器:
  1. 一個執行 ABBYY FineReader Engine 的容器
  2. 一個執行 Licensing Service 的容器
採用此情境可提高容錯能力,並確保所有容器持續運作。若其中一個容器發生故障,您可以重新啟動它,而不會中斷另一個容器。 此情境使用會連線至 *.abbyy.com 授權伺服器的線上授權
ABBYY Licensing Service 同一時間只能搭配一個線上授權運作。
您需要:
  • 一個線上授權權杖檔案
  • 該授權權杖檔案的密碼
若要在安裝了 ABBYY Licensing Service 的任何環境中使用線上授權,必須符合下列條件:
  • 可用的網際網路連線
  • 允許透過連接埠 443 (HTTPS) 連線至 *.abbyy.com
  • ca-certificates 套件中包含 GoDaddy Trusted Root Certification Authority (詳情請參閱 GoDaddy 網站)
若要在 Docker 容器中執行 ABBYY FineReader Engine 12:
  1. 在您的電腦上下載並安裝 DockerDocker Compose
  2. 建立一個空目錄,並將以下檔案放入其中:
  • Dockerfile_ls — 用於執行 Licensing Service 容器的 Dockerfile (請參閱其下方內容)
Dockerfile_ls 用於建置僅與一個由 Dockerfile_worker 建立的容器搭配運作的容器。請勿將多個執行 ABBYY FineReader Engine 的容器複本設定為共用單一 Licensing Service。
注意:此容器會以 /standalone 參數執行 Licensing Service。使用此參數時,Licensing Service 會以前景程序執行,這是在 Docker 容器中運作的最佳做法。
  • Dockerfile_worker — 用於執行 ABBYY FineReader Engine 容器的 Dockerfile (請參閱其下方內容)
  • wrapper.sh — 用於執行範例並在主控台顯示結果的命令列指令碼 (請參閱其下方內容)
  • docker-compose.yml — Docker Compose 的組態檔 (請參閱其下方內容)
請注意,對於執行 ABBYY FineReader Engine 的容器,我們會在 docker-compose.yml 中手動設定 /dev/shm 的大小。我們建議至少設為 1GB。
  • ABBYY FineReader Engine 12 發行套件檔案 (FREngine-Linux-%BUILD_ID%.sh)
  • 線上授權權杖檔案
  1. 在 docker-compose.yml 的以下幾行中指定您的授權參數:
args:
- license_token=SWRRXXXXXXXXXXXXXXXXXXXX.ABBYY.ActivationToken
- license_password=your_license_password
  1. 若要建置並執行容器,請使用下列命令:
docker-compose up
範例執行結果將顯示於主控台。
您可以編輯 docker-compose.yml 中的以下這一行,自訂 CommandLineInterface (CLI) 程式碼範例的預設引數:
command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
CLI 參數的詳細資訊請參閱 Code Samples Library
Dockerfile_ls
# 階段 1。
# 從這個部分取得 Licensing Service
FROM ubuntu:bionic as builder
 
# 安裝所需套件
RUN DEBIAN_FRONTEND=noninteractive \
    apt update \
    && apt install --no-install-recommends --yes \
    bash \
    gzip \
    tar \
    coreutils \
    gettext-base
COPY FRE*.sh /tmp/FRE12.sh
 
# 安裝 ABBYY FineReader Engine
RUN chmod +x /tmp/FRE12.sh && /tmp/FRE12.sh -- \
    --install-dir "/opt/ABBYY/FREngine12" \
    --skip-local-license-activation
 
# 階段 2。使用乾淨的映像檔
# 準備使用 Licensing Service
FROM ubuntu:bionic
 
# 安裝所需套件
RUN DEBIAN_FRONTEND=noninteractive \
    apt update \
    && apt install --no-install-recommends --yes \
    ca-certificates \
    bash \
    libc6 \
    libgcc-8-dev \
    libstdc++-8-dev
# 從階段 1 複製 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/
 
# 建立 Licensing Service 的工作資料夾
RUN mkdir /var/lib/ABBYY/SDK/12/Licenses -p && 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
# 第 1 階段。 
# 從這個階段取得已安裝 ABBYY FineReader Engine 與已編譯範例的目錄
# 使用官方 GCC 容器來取得所有開發工具。 
# 這裡僅以 GCC 第 8 版為例,因為它是 ubuntu bionic 中的預設 GCC
# 您可以使用任何 4.8 以上版本
FROM gcc:8 as builder
 
ARG license_token
ARG license_password
ARG service_address
# 複製授權權杖檔案,並在安裝過程中
# 使用它產生正確的 SamplesConfig.h 
COPY ${license_token} /tmp/${license_token}
 
COPY FRE*.sh /tmp/FRE12.sh
 
# 安裝 ABBYY FineReader Engine 12 並建置範例
RUN chmod +x /tmp/FRE12.sh && /tmp/FRE12.sh -- \
    --install-dir "/opt/ABBYY/FREngine12" \
    --license-path "/tmp/${license_token}" \
    --license-password "${license_password}" \
    --service-address "${service_address}" \
    --developer-install
WORKDIR /opt/ABBYY/FREngine12/Samples/CommandLineInterface
RUN make
# 為了在下一個階段複製整個資料夾,
# 請移除已安裝 ABBYY FineReader Engine 發行套件中所有不必要的檔案
RUN rm /opt/ABBYY/FREngine12/Bin/libProtection.Developer.so
 
# 第 2 階段。使用乾淨的映像檔 
# 將其準備為可執行 ABBYY FineReader Engine
# 在此階段,我們使用不含開發工具的精簡 ubuntu 映像檔
FROM ubuntu:bionic
 
# 安裝必要套件 
RUN DEBIAN_FRONTEND=noninteractive \
    apt update \
    && apt install --no-install-recommends --yes \
    ca-certificates \
    bash \
    libc6 \
    libglib2.0-0 \
    libgcc-8-dev \
    libstdc++-8-dev \
    zlib1g \
    libx11-6 \
    libfreetype6 \
    libxext-dev \
    libice-dev \
    libsm-dev \
    locales \
    && locale-gen en_US.UTF-8
# 從第 1 階段複製 ABBYY FineReader Engine
COPY --from=builder /opt/ABBYY/FREngine12/Bin /opt/ABBYY/FREngine12/Bin
COPY --from=builder /opt/ABBYY/FREngine12/Data /opt/ABBYY/FREngine12/Data
# 建立資料夾,供 Licensing Service 執行與快取儲存使用
# 將授權權杖檔案複製到這個資料夾
COPY --from=builder /var/lib/ABBYY/SDK/12/Licenses/*.ABBYY.ActivationToken /var/lib/ABBYY/SDK/12/Licenses/
# 複製已編譯的範例與示範影像
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
# wrapper.sh - 用於啟動範例並在主控台中顯示結果的指令碼
COPY ./wrapper.sh /wrapper.sh
RUN chmod +x /wrapper.sh
ENTRYPOINT ["/wrapper.sh"]
#!/bin/bash
 
# 啟動範例
/app/CommandLineInterface $1
status=$?
if [ $status -ne 0 ]; then
  echo "Failed to launch app: $status"
  exit $status
fi
cat ${1##*-of}
echo "Done"
version: '3'
services:
  worker:
    build:
      context: .
      dockerfile: Dockerfile_worker
      args:
        - license_token=SWRRXXXXXXXXXXXXXXXXXXXX.ABBYY.ActivationToken
        - license_password=your_license_password
        - service_address=ls
    depends_on:
      - ls
    shm_size: 1g
    command: ["-if /app/Demo.tif -f TextUnicodeDefaults -of /app/Test.txt"]
    restart: on-failure
  ls:
    build:
      context: .
      dockerfile: Dockerfile_ls
    restart: on-failure

另請參見

在 Linux 上安裝 Licensing Service 授權管理 啟用