# 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"
]
}
如下图所示:
