# Docker 部署指南

# 1、新建Dockerfile

在项目根目录下新建 Dockerfile 文件,并添加以下内容:

# 使用官方 Ubuntu 22.04 作为基础
FROM ubuntu:22.04

# 设置工作目录(可选,但推荐)
WORKDIR /app

# 更新 apt 仓库并安装 OpenJDK 11
RUN apt-get update && \
    apt-get install -y --no-install-recommends openjdk-11-jdk && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


# (可选) 验证 Java 安装 (可以选择添加你的应用程序,并编译运行,或者只是执行 java -version)
RUN java -version

# 设置默认的模型路径环境变量
ENV SMART_MODEL_PATH=/app/models

# 创建该目录
RUN mkdir -p /app/models

# 模型挂载
VOLUME ["/app/models"]

# UTF-8
ENV LANG=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8


# 声明服务运行在8080端口
EXPOSE 8080

# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-Dfile.encoding=UTF-8", "-jar", "app.jar"]

注意事项:

1、推荐使用 ubuntu:22.04 镜像,其他镜像未经过测试。

2、模型文件通过挂载的方式提供,路径根据自己的需求进行修改。

# 2、docker容器内目录结构

无需操作,容器内的工作目录结构如下:

/app
├── app.jar
├── models/             # AI 模型
└── smartjavaai_cache/  # 缓存

# 3、构建镜像

运行以下命令构建镜像:

docker build -t smartjavaai/face-demo:v1.1.0 .

# 4、运行Docker容器

使用以下命令启动容器,将宿主机的模型目录和 JAR 包挂载到容器中:

docker run -p 8080:8080 \
  -v /Users/xxx/Documents/develop/model:/app/models \
  -v /Users/xxx/Documents/SmartJavaAI/examples/face-example/target/face-example-1.0.0-SNAPSHOT.jar:/app/app.jar \
  smartjavaai/face-demo:v1.1.0

请根据你的实际路径修改宿主机的模型目录和 JAR 包路径。

# 5、代码

你可以在 GitHub/Gitee 仓库查看完整的示例代码。Gitee (opens new window)

由于本教程中模型路径使用了挂载方式,代码中请使用以下方式获取模型路径:

String MODEL_PATH = System.getenv("SMART_MODEL_PATH");

config.setModelPath(MODEL_PATH + "/face_model/yolo-face/yolov5face-n-0.5-320x320.onnx");

MODEL_PATH 应映射为模型根目录,具体的模型文件可以使用相对路径。

# 6、离线使用

如果你需要在 无外网环境 中运行 Docker 容器,需要引入离线依赖库,请参考文档离线依赖库

注意:在不同平台的环境下,确保在 pom.xml 中注释或删除非当前平台的依赖库。

# 7、常见问题

(1)ERROR: failed to solve: ubuntu:22.04: failed to resolve source metadata for docker.io/library/ubuntu:22.04: unexpected status from HEAD request to https://ysdicrz3.mirror.aliyuncs.com/v2/library/ubuntu/manifests/22.04?ns=docker.io: 403 Forbidden

解决方案:修改docker的配置文件,将 registry-mirrors 配置项改为:

{
    "builder": {
        "gc": {
            "defaultKeepStorage": "20GB",
            "enabled": true
        }
    },
    "experimental": false,
    "registry-mirrors": [
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io"
    ]
}

如下图所示: