使用docker容器内的anaconda虚拟环境启动python web项目

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

使用docker容器内的anaconda虚拟环境启动python web项目_第1张图片

(2) 特殊

如果你是在windows安装了wsl2,并在wsl2的虚拟linux终端内安装的docker。wsl2可支持直接使用localhost来访问虚拟终端内的docker服务。

使用docker容器内的anaconda虚拟环境启动python web项目_第2张图片

5、问题

我同时启动了三个容器,分别用"-p 7000:5000"、"-p 6000:5000"、"-p 5000:5000",但只有localhost:6000/hello服务,浏览器一直访问不到。

问题排查:

可以看到6000中出现一个和5000、7000不同的pid=5144。

使用docker容器内的anaconda虚拟环境启动python web项目_第3张图片

你可能感兴趣的:(docker,docker,python,容器)