1.首先将虚拟环境环境打包到项目目录
1.激活虚拟环境speaker
conda activate speaker
2.创建虚拟环境的 Conda 打包文件:
使用 conda pack
将当前虚拟环境打包。这个工具会将整个环境及其依赖打包成一个压缩文件。
conda pack -n speaker -o speaker_env.tar.gz
✅ 方法 1:强制打包(绕过报错)
使用 --ignore-missing-files 参数跳过报错文件:
conda pack -n sadtalker2 -o sdatalker2_env.tar.gz --ignore-missing-files
3.创建一个固定的文件夹来存放解压后的环境:
首先,您可以在项目目录下创建一个专门的文件夹,例如 env/
来存放解压的环境:
mkdir /opt/jyd01/wangruihua/api/speakertest/env
4.解压环境到目标目录:
为了让环境能够移植到其他电脑上,您需要在目标目录解压该包:
tar -xvzf speaker_env.tar.gz -C /opt/jyd01/wangruihua/api/speakertest/env/
2.制作dockerfile
# 使用 nvidia/cuda 作为基础镜像
FROM nvidia/cuda:12.3.2-cudnn9-devel-ubuntu20.04
# 设置工作目录
WORKDIR /app
# 复制项目代码到容器中
COPY . /app
# 安装基本依赖项,包括 Git
RUN apt-get update && apt-get install -y \
python3-pip \
python3-dev \
python3-venv \
wget \
curl \
git && rm -rf /var/lib/apt/lists/*
# 设置环境变量,确保激活虚拟环境时可以直接访问
ENV PATH=/app/env/bin:$PATH
# 暴露服务端口
EXPOSE 8006
EXPOSE 8003
# 设置默认命令,激活环境并运行 health_check.py 使用 tail -f /dev/null 或者 wait 来保持容器不退出。
CMD ["bash", "-c", "source /app/env/bin/activate && python3 health_check.py && tail -f /dev/null"]
3.构建docker镜像
sudo docker build -t speaker:v1.0 .
1.保存docker镜像:
你可以用 docker save
把构建好的镜像打包成 .tar
文件,方便迁移或备份:
docker save -o sonic_v1.0.tar sonic:v1.0
2.删除镜像(推荐):
如果该镜像被某些容器使用,你可能需要先停止并删除容器,才能删除镜像。
docker rmi 64a02b38ffce
2.1 强制删除镜像:
如果镜像仍然无法删除(例如,正在被某些容器使用),可以使用 -f
选项强制删除镜像:
docker rmi -f 64a02b38ffce
3.启动容器
启动镜像为容器
docker run --gpus all -d -p 8006:8006 -p 8003:8003 --name speaker_container speaker:v1.0
4.迁移docker镜像到目标服务器
要将 Docker 镜像从一台服务器迁移到另一台服务器(IP 地址为 188.18.18.149),可以通过以下步骤完成:
1. 在源服务器(当前服务器)导出镜像
使用 docker save
命令将镜像保存为 .tar
文件:
docker save -o speaker_v1.0.tar speaker:v1.0
这将在当前目录生成一个名为 speaker_v1.0.tar
的文件,包含该镜像的完整内容。
2. 将镜像文件传输到目标服务器
使用 scp
命令将生成的 .tar
文件传输到目标服务器:
scp speaker_v1.0.tar user@188.18.18.149:/opt/jyd01/wangruihua/
将 user
替换为目标服务器的用户名,/path/to/destination/
替换为目标服务器上的目标路径。
3. 在目标服务器上加载镜像
SSH 登录到目标服务器,并运行以下命令以加载镜像:
docker load -i /opt/jyd01/wangruihua/speaker_v1.0.tar
加载完成后,镜像会出现在目标服务器的 Docker 镜像列表中。
4. 验证镜像
运行以下命令以确保镜像已正确加载:
docker images
在输出中,应该能看到 speaker:v1.0
。
指定GPU启动容器:
docker run -d \
--gpus '"device=2"' \
-p 8002:8002 \
--name sonic_container \
sonic:v1.0
不指定GPU启动容器:
docker run --gpus all -d -p 8006:8006 -p 8003:8003 --name speaker_container speaker:v1.0
设置自动重启
docker run --gpus all -d -p 8006:8006 -p 8003:8003 --restart always --name jyd_speaker_container jyd_speaker:v1.0
查看是否启动
docker ps
启动容器并进入容器的交互模式(慎用):
docker run --gpus all -d -p 8006:8006 -p 8003:8003 --name speaker_container speaker:v1.0 bash
让容器挂起不退出(开发调试时推荐)
docker run --gpus all -d -p 8006:8006 -p 8003:8003 --name speaker_container speaker:v1.0 tail -f /dev/null
进入容器:
docker exec -it speaker_container bash
查看容器日志
docker logs speaker_container
进入容器: 如果你需要进入容器以进行进一步的调试或检查,可以使用:
docker exec -it speaker_container bash
查看运行中的容器
docker ps
查看所有容器
docker ps -a
启动容器
docker start <容器id>
停止容器
docker stop <容器id>
删除容器
docker rm <容器id>
Docker 容器内的文件夹迁移到服务器(宿主机)上
docker cp <container_name>:<容器内路径> <服务器目标路径>
宿主机内的文件或文件夹移动到容器内
docker cp <宿主机路径> <容器名或ID>:<容器内路径>
使用compose-yml打包docker镜像并后台启动
docker-compose up -d --build
docker compose up --build -d
构建镜像但不运行:
docker-compose build --no-cache
镜像已经构建完成,并且你没有修改项目源码或 Dockerfile,直接运行以下命令即可启动
docker-compose up -d
清理 Docker 构建缓存
docker builder prune -af
单独启动命令
docker run -d \
--gpus all \
--restart always \
--name jyd_digital_container \
-p 8000:8000 \
-p 8001:8001 \
-p 8002:8002 \
jyd_digital:v1.0