DOM
SWT
Integration
Logging
IDE
使用 Docker 部署 JxBrowser 应用程序
本教程演示如何使用 Docker 在无头环境中部署 JxBrowser 应用程序。
前提条件
对于本教程,您将需要以下内容:
- 安装并运行 Docker Engine.
- 一个有效的 JxBrowser 许可证。它可以是评估版或商业版。关于许可证的更多信息,请参见许可证指南。
获取代码
您可以在我们的示例集合中找到完整的 Dockerfile
和示例应用程序:
$ git clone https://github.com/TeamDev-IP/JxBrowser-Examples
$ cd JxBrowser-Examples/tutorials/docker
JxBrowser 应用程序
创建一个应用程序
使用 Gradle 创建一个新的JxBrowser应用程序或使用实例库中的一个。接下来,创建一个新的目录并将创建的项目复制到 project
子目录下。
添加许可证
要继续,请将许可证密钥放入应用程序中。
为 Docker 配置 Chromium
如果出现问题,并且您想使用 DevTools 检查网页浏览器的状态,可以通过远程调试端口访问开发人员工具。 有关如何连接到它的说明在故障排除部分。
// Enable the remote debugging port.
options.remoteDebuggingPort(9222);
创建一个 Dockerfile
选择一个基底影像和基本环境配置
在上一步中创建的目录中创建一个新的 Dockerfile
。 我们通过选择 Ubuntu 20.04 (LTS) 作为我们的基底影像来启动我们的 Dockerfile。 然后我们为我们的环境执行基本配置并更新包列表。
- 选择一个基底影像:
FROM ubuntu:20.04
- 配置时区并为 debconf 设置非交互式前端,这样它就不会期望用户交互并选择默认选项:
ENV DEBIAN_FRONTEND=noninteractive ENV TZ=UTC
- 更新包列表:
RUN apt update
安装 OpenJDK 和 Gradle
我们在本教程中使用 OpenJDK 8。 但您可以自由使用任何其他受支持的 JDK。
RUN apt install -y openjdk-8-jdk
RUN apt install -y gradle
安装 OpenJDK 和 Gradle
安装 Chromium 所需的动态库。
如果您想使用不同的 Ubuntu 版本或其他 Linux 发行版作为基底影像,请安装该系统附带的 Chromium 包所需的依赖项。 您可以在此处找到各种 Linux 发行版的 Chromium 包列表。 它的依赖列表对于 JxBrowser 也应该大致相同。
RUN apt install -y \
libasound2 \
libatk-bridge2.0-0 \
libatk1.0-0 \
libatspi2.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libdrm2 \
libexpat1 \
libfontconfig1 \
libgbm1 \
libgcc-s1 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libnss3 \
libpango-1.0-0 \
libpulse0 \
libx11-6 \
libxcb1 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxkbcommon0 \
libxrandr2 \
libxshmfence1 \
libxtst6 \
xdg-utils
Chromium 需要一个 X11 服务器才能运行。 我们使用 Xvfb,它是一个轻量级的 X11 服务器实现。
RUN apt install -y xvfb
复制和构建项目
在 Dockerfile 的最后部分,我们必须将所有需要的文件复制到影像中,并构建我们的项目。
- 复制启动脚本并使其可执行。我们将很快审查其内容。
- 复制 Java 应用程序并用 Gradle 构建它。
- 设置影像的入口点。
WORKDIR /root
ADD startup.sh .
RUN chmod +x startup.sh
ADD project/ .
RUN gradle build
ENTRYPOINT ["sh", "-c", "/root/startup.sh"]
在启动脚本中,我们启动 X11 服务器并使用 Gradle 启动我们的应用程序。
#!/bin/sh
Xvfb :0 -screen 0 1920x1080x24+32 &
DISPLAY=:0 gradle run
构建和启动 Docker 容器
构建一个 Docker 影像并将其命名为 jxbrowser
:
docker build -t jxbrowser .
使用此影像启动一个容器:
docker run --shm-size=1gb -t jxbrowser
--shm-size=1gb
将共享内存量扩展到 1 GB。 默认情况下,Docker 容器中的共享内存限制为 64MB,这并不不足以让 Chromium 工作。
您应该在控制台输出中看到加载页面的标题。 在我们的示例应用程序中,我们加载 Google,并打印出:
Title: Google
故障排除
通过远程调试端口访问 DevTools
没有简单的方法可以通过远程调试端口连接到 Chromium 的 DevTools,因为 Chromium 只允许来自 localhost
的连接。 为了绕过它,我们使用 SSH 端口转发。
我们必须用暴露给主机系统的 SSH 端口启动 Docker 容器。为此,我们传递-p 2222:22
参数。
docker run -p 2222:22 --shm-size=1gb -t jxbrowser
一旦我们的容器运行,我们就可以访问容器的 shell 来安装一个 SSH 服务器并启动它。
docker exec -it <container_id> /bin/bash
apt install -y openssh-server
service ssh start
我们还必须添加一个用于连接容器的新用户。
useradd --create-home --shell /bin/bash jxbrowser
passwd jxbrowser
有了它,就可以将容器的远程调试端口转发到主机了。
ssh -L 9222:localhost:9222 -p 2222 jxbrowser@localhost
现在您可以使用 Chrome 或 Chromium 打开 http://127.0.0.1:9222/
URL 以访问 DevTools。
Kubernetes
将所需的 --shm-size=1gb
标志传递给 Kubernetes 是不可能的,相反,您必须手动为 /dev/shm
创建一个卷:
spec:
volumes:
- name: chromium_shm
emptyDir:
sizeLimit: "1Gi"
medium: Memory
containers:
- image: jxbrowser
volumeMounts:
- mountPath: /dev/shm
name: chromium_shm
总结
在本教程中,我们演示了如何:
- 创建一个与 JxBrowser 应用程序一起运行的 Docker 影像。
- 为 Docker 环境配置应用程序。