lite-avatar形象库开源镜像教程:将lite-avatar服务容器化并发布至私有Registry

发布时间:2026/7/8 1:45:18

lite-avatar形象库开源镜像教程:将lite-avatar服务容器化并发布至私有Registry lite-avatar形象库开源镜像教程将lite-avatar服务容器化并发布至私有Registry1. 引言为什么要把lite-avatar容器化如果你正在做数字人项目比如OpenAvatarChat那你肯定需要数字人形象。lite-avatar形象库提供了150多个现成的、高质量的2D数字人形象从医生、老师到客服各种职业都有直接拿来就能用。但问题来了这些形象资产怎么管理怎么方便地部署到不同的服务器上怎么让团队里的每个人都能快速用上这就是我们今天要解决的问题——把lite-avatar形象库变成一个Docker镜像然后发布到你自己的私有Registry里。这样一来你就能像用其他Docker服务一样一键部署、版本管理、团队共享。简单说这篇教程会带你走完这三步理解lite-avatar形象库是什么为什么要容器化。动手一步步把服务打包成Docker镜像。发布把镜像推送到私有Registry随时随地都能用。整个过程不需要你是什么Docker专家跟着做就行。我们尽量用大白话把每一步都讲清楚。2. 准备工作你需要什么在开始打包之前我们先看看需要准备哪些东西。别担心大部分你可能都已经有了。2.1 环境要求首先你得有一台能跑Docker的机器。这可以是你的本地开发电脑Windows/macOS/Linux都行装好Docker Desktop。一台云服务器比如阿里云、腾讯云的ECS。公司内网的测试服务器。具体要求很简单操作系统Linux推荐Ubuntu 20.04/22.04或者Windows/macOS用于本地开发测试。Docker版本18.06或以上。用docker --version命令检查一下。Docker Compose版本1.25.0或以上可选但推荐用于服务编排。用docker-compose --version检查。Git用来拉取代码。网络能正常访问GitHub和你的私有Registry。2.2 获取lite-avatar形象库代码形象库的代码和资产是开源的我们直接从GitHub上拉下来。# 1. 克隆官方仓库如果网络慢可以试试Gitee镜像 git clone https://github.com/HumanAIGC-Engineering/LiteAvatarGallery.git cd LiteAvatarGallery # 2. 查看项目结构 ls -la你会看到一个大概这样的目录结构LiteAvatarGallery/ ├── assets/ # 这里存放着所有150个形象的预览图和权重文件 │ ├── 20250408/ # 第一批100个通用形象 │ └── 20250612/ # 第二批50个职业形象 ├── web/ # 前端展示页面的代码 │ ├── static/ │ ├── templates/ │ └── app.py # 基于Flask的简单Web服务 ├── README.md └── ...这个web/app.py就是我们要容器化的核心服务。它提供了一个简单的Web界面用来浏览和下载这些形象资产。2.3 理解我们要打包的服务在动手写Dockerfile之前我们先搞清楚这个服务是干什么的提供Web界面让你在浏览器里比如访问http://localhost:7860能看到所有形象的画廊Gallery可以按批次浏览。展示形象详情点击某个形象能看到大图、形象ID、配置示例最重要的是能下载对应的权重文件.zip。提供静态文件把assets/目录下的图片和压缩包通过网页服务暴露出来方便下载。所以我们的Docker镜像本质上就是要打包这个Python Flask应用及其依赖并把形象资产也一起装进去。3. 实战第一步编写DockerfileDockerfile就像是镜像的“菜谱”告诉Docker每一步该怎么构建。我们来创建一个。在LiteAvatarGallery项目的根目录下新建一个文件命名为Dockerfile注意没有后缀名。# Dockerfile # 使用官方Python精简版作为基础镜像减少体积 FROM python:3.9-slim # 设置工作目录后面的命令都会在这个目录下执行 WORKDIR /app # 安装系统依赖比如一些编译工具和库 RUN apt-get update apt-get install -y \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 将当前目录下的所有文件代码和资产复制到容器的/app目录 COPY . . # 安装Python依赖包 # 假设项目根目录有requirements.txt如果没有我们需要创建或直接在这里写 RUN pip install --no-cache-dir -r requirements.txt # 如果项目没有requirements.txt我们就直接安装Flask # RUN pip install --no-cache-dir flask # 暴露服务运行的端口lite-avatar的web服务默认跑在7860端口 EXPOSE 7860 # 设置容器启动时执行的命令 # 这里启动我们web目录下的Flask应用 CMD [python, web/app.py]几点解释FROM python:3.9-slim我们选了一个比较小的Python镜像这样最终打包出来的镜像体积也小。COPY . .第一个点.代表当前目录你放Dockerfile的LiteAvatarGallery目录第二个点.代表容器里的/app目录。这会把代码和assets/资产全部复制进去。EXPOSE 7860只是声明容器会使用这个端口实际映射需要在运行容器时指定。CMD指定容器启动后要运行的命令就是启动我们的Flask应用。创建requirements.txt文件 为了让pip install能工作我们最好在项目根目录创建一个requirements.txt文件列出所有依赖。# requirements.txt Flask2.3.3如果你的web/app.py还用到了其他库比如Pillow处理图片也要加进去。4. 实战第二步构建Docker镜像“菜谱”写好了现在开始“炒菜”——构建镜像。打开终端确保你在LiteAvatarGallery目录下也就是Dockerfile所在的目录。# 构建镜像 # -t 参数给镜像打个标签名字叫 lite-avatar-gallery版本是 v1.0 # 最后的 . 代表使用当前目录的Dockerfile docker build -t lite-avatar-gallery:v1.0 . # 构建过程会持续一段时间Docker会一步步执行Dockerfile里的指令 # 看到最后出现 Successfully built xxxxxx 和 Successfully tagged lite-avatar-gallery:v1.0 就成功了 # 查看本地已有的镜像应该能看到我们刚构建的 docker images | grep lite-avatar构建完成后这个镜像就安静地躺在你本地Docker的镜像仓库里了。你可以用它来运行一个容器试试看。5. 实战第三步运行并测试容器镜像构建好了我们得跑起来看看效果对不对。# 运行容器 # -d 代表在后台运行 # -p 7860:7860 将宿主机的7860端口映射到容器的7860端口 # --name lite-avatar 给容器起个名字方便管理 docker run -d -p 7860:7860 --name lite-avatar lite-avatar-gallery:v1.0 # 查看容器是否在运行 docker ps # 如果看到 STATUS 是 Up就说明运行成功了 # 现在打开你的浏览器访问 http://localhost:7860 # 你应该能看到和原版一样的lite-avatar形象库页面了 # 查看容器日志如果页面打不开可以看看日志报什么错 docker logs lite-avatar # 测试完成后可以停止并删除这个测试容器 docker stop lite-avatar docker rm lite-avatar如果浏览器里成功显示了形象库页面并且能正常点击、浏览、下载那么恭喜你容器化最关键的一步已经完成了这个镜像在你本地是完全可用的。6. 实战第四步推送镜像到私有Registry镜像只在本地有用我们的目标是让团队其他成员或者别的服务器也能用。这就需要把镜像推送到一个集中的仓库——私有Docker Registry。常见的私有Registry有Docker Hub的私有仓库收费。Harbor企业级开源Registry功能强大。GitLab Container Registry如果你用GitLab CI/CD集成很方便。阿里云容器镜像服务ACR/腾讯云容器镜像服务TCR国内访问快。这里我们以部署一个简单的本地私有Registry为例用于测试和演示。生产环境建议使用Harbor或云服务。6.1 启动一个本地私有Registry容器# 拉取官方的registry镜像 docker pull registry:2 # 运行一个registry容器 # -d 后台运行 # -p 5000:5000 映射端口 # --name my-registry 起个名字 # -v /opt/data/registry:/var/lib/registry 把镜像数据持久化到宿主机的/opt/data/registry目录 docker run -d -p 5000:5000 --name my-registry -v /opt/data/registry:/var/lib/registry registry:2 # 现在一个最简单的私有Registry就在你本机的5000端口运行了 # 地址是 http://localhost:5000 或 http://你的服务器IP:50006.2 给本地镜像打上私有Registry的标签Docker推送镜像时镜像名标签必须包含Registry的地址。# 格式docker tag 本地镜像名:版本 私有Registry地址/镜像名:版本 docker tag lite-avatar-gallery:v1.0 localhost:5000/lite-avatar-gallery:v1.0 # 再次查看镜像会发现多了一个 localhost:5000/ 开头的镜像但ID和原来那个是一样的 docker images | grep lite-avatar6.3 推送镜像到私有Registry# 推送镜像 docker push localhost:5000/lite-avatar-gallery:v1.0如果遇到错误提示http: server gave HTTP response to HTTPS client这是因为Docker默认要求Registry使用HTTPS。对于本地测试我们可以修改Docker守护进程配置来允许HTTP。对于Linux系统 编辑/etc/docker/daemon.json文件没有就创建{ insecure-registries: [localhost:5000, 你的服务器IP:5000] }然后重启Docker服务sudo systemctl restart docker对于Windows/macOS的Docker Desktop 在设置Settings - Docker Engine 配置里添加insecure-registries配置项然后点击“Apply Restart”。配置生效后再次执行docker push命令应该就能成功了。6.4 从私有Registry拉取并运行镜像现在我们模拟在另一台机器上使用这个镜像。# 1. 先删除本地的镜像模拟新环境 docker rmi localhost:5000/lite-avatar-gallery:v1.0 docker rmi lite-avatar-gallery:v1.0 # 2. 从私有Registry拉取镜像 docker pull localhost:5000/lite-avatar-gallery:v1.0 # 3. 运行容器和之前一样 docker run -d -p 7860:7860 --name lite-avatar-from-registry localhost:5000/lite-avatar-gallery:v1.0访问http://localhost:7860如果一切正常服务又起来了。这说明我们的私有Registry工作正常镜像推送和拉取都没问题。7. 进阶使用Docker Compose编排服务每次都打一长串docker run命令有点麻烦特别是当服务有多个容器或者有复杂配置时。Docker Compose可以用一个YAML文件来定义和运行多容器应用。在项目根目录创建一个docker-compose.yml文件# docker-compose.yml version: 3.8 services: lite-avatar-web: # 构建镜像如果已经推送到Registry也可以直接用 image: 指定 build: . # 或者使用从Registry拉取的镜像 # image: localhost:5000/lite-avatar-gallery:v1.0 container_name: lite-avatar-service ports: - 7860:7860 # 宿主端口:容器端口 # 可以设置环境变量如果app.py需要的话 # environment: # - FLASK_ENVproduction # 如果想在开发时热更新代码可以挂载卷但生产环境不建议 # volumes: # - ./web:/app/web restart: unless-stopped # 容器退出时自动重启除非手动停止使用Compose命令来管理服务# 在docker-compose.yml所在目录执行 # 启动服务后台运行 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f # 停止服务 docker-compose down使用Docker Compose后服务的启动、停止、日志查看都变得非常统一和简单特别适合在服务器上部署。8. 总结与最佳实践走完整个流程我们成功地把lite-avatar形象库服务打包成了Docker镜像并发布到了私有Registry。回顾一下核心步骤就三步写Dockerfile、构建镜像、推送镜像。在实际项目中你还可以考虑以下几点让这个过程更专业镜像优化使用多阶段构建multi-stage build来减小最终镜像体积。合理安排Dockerfile指令顺序利用缓存加速构建。使用.dockerignore文件排除不需要打包进镜像的文件如.git,__pycache__。标签与版本使用有意义的标签如v1.0,latest,git-commit-id。生产环境避免使用latest标签明确指定版本号。安全尽量使用非root用户运行容器内的进程在Dockerfile中用USER指令。定期更新基础镜像修复安全漏洞。CI/CD集成将镜像构建和推送步骤写入GitLab CI、GitHub Actions或Jenkins等CI/CD流水线实现自动化。选择Registry测试环境可以用简单的Registry。生产环境强烈建议使用Harbor它提供了镜像扫描、权限管理、复制等企业级功能。现在你的lite-avatar形象库已经变成了一个可以“一次构建到处运行”的标准服务了。无论是开发、测试还是生产部署效率都会大大提升。团队新成员拿到这个镜像也能在几分钟内把服务跑起来立刻开始挑选数字人形象投入到OpenAvatarChat等项目的开发中去。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻