本節說明如何在 Docker 容器中執行 ABBYY FineReader Engine 12。此情境使用兩個容器:
- 一個執行 ABBYY FineReader Engine 的容器
- 一個執行 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:
- 在您的電腦上下載並安裝 Docker 和 Docker Compose。
- 建立一個空目錄,並將以下檔案放入其中:
- 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)
- 線上授權權杖檔案
- 在 docker-compose.yml 的以下幾行中指定您的授權參數:
args:
- license_token=SWRRXXXXXXXXXXXXXXXXXXXX.ABBYY.ActivationToken
- license_password=your_license_password
- 若要建置並執行容器,請使用下列命令:
範例執行結果將顯示於主控台。
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
授權管理
啟用