一、Docker是个啥?(通俗人话版)
1. 核心比喻
以前开发项目:本地能跑、服务器炸、环境报错、依赖冲突,堪称玄学部署。
Docker = 项目专属打包盒
你把代码、依赖、环境、配置全部打包进盒子,在哪打开都能完美运行,彻底解决“本地能跑线上不行”的千古难题。
2. 3个核心名词(必记)
- 镜像(Image):打包好的模板(相当于安装包、系统快照),只读不可改
- 容器(Container):镜像跑起来的实例(相当于打开的软件),可启停、可删除
- 仓库(Registry):存放镜像的商店(默认是Docker Hub,公共镜像随便拉)
3. Docker vs 虚拟机(秒懂区别)
- 虚拟机:笨重、开机慢、占内存,整套系统完整模拟
- Docker:轻量、秒启动、几乎不占资源,只隔离项目环境,不重复装系统
二、Docker基础环境+高频指令(可直接复制)
默认已安装Docker Desktop/Linux Docker,所有指令全局通用。
1. 基础查看指令
# 查看Docker版本(验证安装成功) docker -v 查看本地所有镜像 docker images 查看正在运行的容器 docker ps 查看所有容器(包含已停止) docker ps -a 查看系统信息、磁盘占用 docker info2. 镜像操作核心指令
# 拉取官方镜像(以python3.10为例) docker pull python:3.10-slim 删除本地镜像 docker rmi 镜像ID/镜像名 搜索镜像 docker search python3. 容器启停操作(最高频)
# 启动容器(后台运行、端口映射、命名) docker run -d --name test-python -p 8000:8000 python:3.10-slim 停止容器 docker stop 容器ID/容器名 重启容器 docker restart 容器ID/容器名 删除容器(必须先停止) docker rm 容器ID/容器名 进入容器内部终端 docker exec -it 容器名 /bin/bash4. 懒人清理指令(必存)
# 清理所有停止的容器、无用镜像、缓存 docker system prune -y三、Docker手动配置全流程(自定义镜像)
重点来了!不使用现成镜像,手动从零配置项目环境,理解打包原理,模型部署必备!核心:通过 Dockerfile 手动编写配置,自定义依赖、端口、启动命令。
1. 新建项目目录结构
随便建一个空文件夹,放入2个核心文件:
- Dockerfile:镜像配置文件(无后缀,纯文本)
- requirements.txt:项目依赖
2. 手动编写Dockerfile(通用模板)
直接复制,适配Python项目/AI模型项目,注释详细可自行修改
# 1. 基础镜像(轻量化python3.10) FROM python:3.10-slim 2. 设置工作目录(容器内路径) WORKDIR /app 3. 替换国内源(解决下载慢、超时) RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 4. 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt 5. 复制项目所有代码到容器 COPY . . 6. 暴露端口(和启动端口对应) EXPOSE 8000 7. 容器启动默认命令 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]3. 编写依赖文件 requirements.txt
模型部署常用依赖,直接复制
fastapi uvicorn torch transformers accelerate sentencepiece4. 手动构建镜像+启动容器
# 在当前目录构建镜像,命名为ai-model-service docker build -t ai-model-service:v1 . 后台启动容器,端口映射+挂载模型目录 docker run -d --name ai-model-container -p 8000:8000 -v ./models:/app/models ai-model-service:v1参数解释(小白必懂):
- -d:后台守护运行,关闭终端不中断
- -p 宿主机端口:容器端口:端口映射,外部可访问服务
- -v 宿主机目录:容器目录:文件挂载,模型/数据持久化,删除容器不丢数据
四、Docker 完整AI模型部署实战(可直接上线)
前面手动配置铺垫完成,这里直接实战:轻量化大模型API服务部署,零基础一键部署可用。
1. 编写模型服务 main.py
极简推理服务,支持接口调用模型
from fastapi import FastAPI from transformers import AutoModel, AutoTokenizer app = FastAPI(title="Docker模型部署服务") 加载轻量化模型(可替换任意模型) model_name = "qwen/Qwen-0.5B-Chat" tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True) model = AutoModel.from_pretrained(model_name, trust_remote_code=True) 推理接口 @app.post("/predict") def predict(text: str): inputs = tokenizer(text, return_tensors="pt") outputs = model.generate(**inputs, max_length=100) res = tokenizer.decode(outputs[0], skip_special_tokens=True) return {"result": res}2. 新增 .dockerignore(优化打包)
忽略无用文件,减小镜像体积
__pycache__ *.pyc *.log .git .gitignore models/* !models/.keep3. 一键部署全套指令
# 重新构建镜像(更新代码后必执行) docker build -t ai-model-service:v1 . 启动模型容器 docker run -d --name llm-service -p 8000:8000 ai-model-service:v1 查看容器日志(排查报错) docker logs -f llm-service4. 测试模型接口(部署成功验证)
# curl调用测试 curl -X POST "http://localhost:8000/predict" -H "Content-Type: application/json" -d '{"text":"你好,Docker模型部署"}'返回推理结果 = 部署成功!
5. GPU模型部署进阶(刚需)
有N卡需要GPU加速,启动容器增加GPU参数,需提前安装nvidia-docker
docker run -d \ --name gpu-model-service \ --gpus all \ -p 8000:8000 \ ai-model-service:v1五、Docker核心逻辑总结(小白速记)
- Docker解决的核心问题:环境不一致、部署繁琐、依赖冲突
- 手动配置核心:编写Dockerfile → 构建镜像 → 运行容器 → 挂载持久化
- 模型部署核心:打包运行环境+模型依赖 → 暴露端口 → 提供API推理服务
- 生产必备操作:端口映射、文件挂载、后台运行、日志排查、镜像轻量化
六、写在最后
这篇博客避开了所有空洞理论,全部是新手能直接落地的手动配置+模型部署实战。日常开发、模型上线、项目迁移,这套流程完全够用,敲两遍就能彻底吃透Docker基础部署!