1、环境安装
1.1 基础镜像
这里以ubuntu18.04 + cuda 11.8为基础镜像(主机支持nvidia-gpu)
(1)拉取ubuntu18.4 + cuda11.8镜像
docker pull nvidia/cuda:11.8.0-devel-ubuntu18.04
1.2 docker下anaconda安装
(1)下载Anaconda安装包
## 从anaconda的镜像网站(Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)下载安装包。
我下载的版本:Anaconda3-2023.07-0-Linux-x86_64.sh,并保存在本地D:/runback/test/Anaconda3-2023.07-0-Linux-x86_64.sh
(2)启动容器
## 这里使用-v指定了卷的映射,确保虚拟linux下可以访问Anaconda安装包
docker run --gpus all -it -v /mnt/d/runback/test:/faiss-gpu/ --name faiss-gpu nvidia/cuda:11.8.0-devel-ubuntu18.04 /bin/bash
(3)在容器内安装anaconda3
## 参考:Linux安装conda - 知乎 (zhihu.com)
# 切到/faiss-gpu目录下
cd /faiss-gpu
# 安装包执行
bash Anaconda3-2023.07-0-Linux-x86_64.sh
(4)添加环境变量
export PATH=$PATH:/root/anaconda3/bin
(5)删除安装包
rm /faiss-gpu/Anaconda3-2023.07-0-Linux-x86_64.sh
1.3 其他依赖包安装
这里只简单做个flask的demo,所以只安装flask即可。
pip install flask
2、web项目
创建一个api.py文件:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project :xx
@Author :xx
@Date :2023/8/11
@Desc :
'''
from flask import Flask, request
import logging
app = Flask(__name__)
@app.route('/hello')
def hello():
return "你好啊~hello world!"
if __name__ == '__main__':
# 启动服务
ip = "0.0.0.0"
port = 5000
logging.info('启动服务, ip地址:{}, 端口:{}'.format(ip, port))
app.run(host=ip, port=port, debug=True, use_reloader=False)
3、启动命令
docker run -p 7000:5000 -dit --name faiss -v /mnt/d/runback/test:/faiss-gpu conda-faiss-gpu /bin/bash -c "source /root/anaconda3/bin/activate && conda activate base && python /faiss-gpu/api.py"
其中:
/mnt/d/runback/test 是我的api.py文件所在的目录;
/faiss-gpu 是映射后的容器工作目录;
/root/anaconda3/ 是我的anaconda安装包所在的位置。
4、服务测试
(1) 【通用】使用docker所在主机ip
(2) 特殊
如果你是在windows安装了wsl2,并在wsl2的虚拟linux终端内安装的docker。wsl2可支持直接使用localhost来访问虚拟终端内的docker服务。
5、问题
我同时启动了三个容器,分别用"-p 7000:5000"、"-p 6000:5000"、"-p 5000:5000",但只有localhost:6000/hello服务,浏览器一直访问不到。
问题排查:
可以看到6000中出现一个和5000、7000不同的pid=5144。