Skip to content


Ollama Docker部署模型

bash
docker pull ollama/ollama
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

下面我们来依次详细解释一下这条命令及其各个部分:

docker run:这个命令用于创建并启动一个新的 Docker 容器。 -d:这个标志表示容器将在后台运行(detached mode),会在终端中立即获得命令提示符。 --gpus=all:将所有可用的 GPU 资源分配给这个容器。如果有GPU配置,我们还是需要的。 -v ollama:/root/.ollama:这条命令设置了一个名为 "ollama" 的卷,并将其挂载到容器内的路径 /root/.ollama。卷用于在容器的生命周期之外持久化存储数据。 -p 11434:11434:这个选项将主机上的端口 11434 映射到容器内部的端口 11434。这样做是为了允许从外部访问容器内运行的服务,对外暴露端口。 --name ollama:这个选项为容器指定了名称 "ollama"。通过指定名称,可以更方便地管理和引用容器,而不是仅依靠自动生成的 ID。 ollama/ollama:这指定了用于创建容器的 Docker 镜像。Docker Hub了我们需要的 "ollama/ollama" 的镜像。

bash
docker exec -it ollama ollama run deepseek-r1:1.5b

这条命令是在已经运行的名为 "ollama" 的 Docker 容器内部执行命令 "ollama run deepseek-r1:1.5b"

这条命令及其各个部分的解析如下:

docker exec:这个命令用于在运行中的 Docker 容器内部执行命令。

-it:这两个选项一起使用,-i 表示交互模式(interactive),-t 表示终端(terminal),允许你与容器内的命令进行交互。

ollama:这是指定要执行命令的"ollama"容器的名称ID 。

ollama run deepseek-r1:1.5b:这是要在容器内部执行的实际命令。在这里,它通过 "ollama" 工具执行 "run deepseek-r1:1.5b" 命令。

解释:通过 docker exec -it ollama, Docker 在名为 "ollama" 的容器内执行命令。 ollama run deepseek-r1:1.5b 是在容器内部运行的实际命令。

如果只是进入该容器,可以使用

bash
sudo docker exec -it <容器id> /bin/bash

Gradio前端

python
import requests  # 导入requests库,用于发送HTTP请求
import json  # 导入json库,用于处理JSON数据
import gradio as gr  # 导入gradio库,用于创建Web界面

def generate_chat_response(prompt):
    """
    发送用户输入的文本到指定API,并获取响应。
    
    参数:
    prompt (str): 用户输入的文本
    
    返回:
    str: API返回的响应文本,如果请求失败则返回None
    """
    
    url = "http://localhost:11434/api/generate"  # 定义API的URL
    headers = {
        "Content-Type": "application/json"  # 设置请求头为JSON格式
    }

    data = {
        "model": "huihui_ai/deepseek-r1-abliterated:7b",  # 指定使用的模型
        "stream": False,  # 是否启用流式响应
        "prompt": prompt,  # 用户输入的文本
    }

    response = requests.post(url, headers=headers, data=json.dumps(data))  # 发送POST请求

    if response.status_code == 200:  # 如果请求成功
        response_text = response.text  # 获取响应文本
        data = json.loads(response_text)  # 将响应文本解析为JSON格式
        final_response = data.get("response")  # 获取响应中的"response"字段
        return final_response  # 返回最终的响应文本
    else:
        print("Error:", response.status_code)  # 打印错误状态码
        return None  # 请求失败时返回None

# 创建Gradio界面
demo = gr.Interface(
    fn=generate_chat_response,  # 指定调用的函数
    inputs=gr.Textbox(lines=2, label="Input"),  # 输入框,允许输入多行文本
    outputs="text",  # 输出为文本形式
)

demo.launch(server_name="0.0.0.0", server_port=7860)  # 启动Gradio界面