跳转到主要内容
本节介绍如何在 Docker 容器中运行 ABBYY FineReader Engine 12。此方案使用两个容器:
  1. 一个运行 ABBYY FineReader Engine 的容器
  2. 一个运行 Licensing Service 的容器
实施此方案可提高容错能力,并确保所有容器持续运行。如果其中一个容器发生故障,您可以重启它,而不会中断另一个容器。 此方案使用 Online License,该许可证会连接到 *.abbyy.com 许可证服务器。
ABBYY Licensing Service 同一时间只能使用一个 Online License。
您需要:
  • 一个 Online License 令牌文件
  • 许可证令牌文件的密码
无论 ABBYY Licensing Service 安装在何处,要使用 Online License,都需要满足以下条件:
  • 有效的 Internet 连接
  • 允许通过 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)
  • Online License 令牌文件
  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 的
# Distribution Kit 中删除所有不需要的文件
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 上安装许可服务 许可管理 激活