本节介绍如何在 Docker 容器中运行 ABBYY FineReader Engine 12。此方案使用两个容器:
- 一个运行 ABBYY FineReader Engine 的容器
- 一个运行 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:
- 在您的计算机上下载并安装 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)
- Online License 令牌文件
- 在 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 的
# 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 上安装许可服务
许可管理
激活