《FastAPI零基础入门与进阶实战》第28篇: Docker服务器部署
系列文章
《FastAPI零基础入门与进阶实战》
https://blog.csdn.net/sen_shan/category_12950843.html第27篇:构建 Docker 镜像
https://blog.csdn.net/sen_shan/article/details/158418622?spm=1011.2415.3001.5331
文章目录
前言
以下文章为AI生成,暂未验证。
这是一个非常经典的“本地开发,服务器部署”场景。
核心逻辑:
- 本机 (Windows):写代码、调试、构建 Docker 镜像。
- 传输:把镜像传到服务器,或者在服务器上直接拉取代码构建。
- 服务器 (Linux):运行 Docker 容器,对外提供服务。
假设你的服务器是 Linux (如 Ubuntu/CentOS),这是最常见的情况。以下是三种主流方案,从最简单到最专业:
前置准备:服务器端安装 Docker
首先,你需要通过 SSH (如 PuTTY, Xshell, 或 VS Code Remote) 连接到你的服务器,安装 Docker Engine。
# 1. 更新软件源
sudo apt update
# 2. 安装 Docker (官方便捷脚本)
curl -fsSL https://get.docker.com | sudo sh
# 3. 验证安装
docker --version
docker run hello-world
# 4. (可选) 配置镜像加速 (如果服务器在国内,拉取镜像慢)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://huecker.io"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
方案一:本地构建,导出导入 (适合网络受限或小项目)
适用场景:服务器无法访问外网(不能 docker pull),或者你想把本地调试好的环境原封不动搬上去。
第 1 步:在本机 (Windows) 构建并导出
在 PowerShell 中,进入项目目录:
cd E:\uuiapp\python\Fastapi_to_Docker
# 1. 构建镜像
docker build -t my-fastapi-app .
# 2. 导出镜像为 tar 包
# 语法:docker save -o 文件名.tar 镜像名
docker save -o my-fastapi-app.tar my-fastapi-app
此时你会得到一个 my-fastapi-app.tar 文件。
第 2 步:上传到服务器
使用 SCP、SFTP (FileZilla)、或 WinSCP 工具,将 my-fastapi-app.tar 上传到服务器的 /home/ubuntu/ 目录。
第 3 步:在服务器导入并运行
在服务器终端执行:
# 1. 导入镜像
docker load -i my-fastapi-app.tar
# 2. 运行容器
# -d: 后台运行
# -p 8092:8092: 映射端口 (确保服务器防火墙开放了 8092)
# --restart always: 服务器重启后自动启动容器
docker run -d -p 8092:8092 --name my-app --restart always my-fastapi-app
方案二:服务器直接拉取代码构建 (推荐,最常用)
适用场景:服务器能上网,且代码托管在 Git (GitHub/Gitee) 上。这是最标准的 CI/CD 雏形。
第 1 步:将代码推送到 Git
在你的本机 Windows 上,确保代码已经 push 到了远程仓库 (如 Gitee)。
git add .
git commit -m "update for docker"
git push
第 2 步:在服务器上拉取并构建
在服务器终端执行:
# 1. 克隆代码
git clone <你的仓库地址>
cd <你的项目文件夹>
# 2. 构建镜像
docker build -t my-fastapi-app .
# 3. 运行容器
docker run -d -p 8092:8092 --name my-app --restart always my-fastapi-app
优点:不需要传输巨大的 tar 包,只需传输代码文本,速度快。
缺点:每次更新代码都要重新 build。
方案三:使用 Docker Registry (专业做法)
适用场景:团队协作,频繁更新,追求自动化。
- 本机:构建镜像 -> 登录阿里云/DockerHub ->
docker push上传镜像。 - 服务器:
docker pull拉取镜像 ->docker run运行。 - 更新时:本机修改代码 -> 重新 build & push (版本号变一下,如 v1.1) -> 服务器上
docker pull新镜像 -> 重启容器。
🔥 关键步骤:如何更新代码?
无论你用哪种方案,当你修改了 main.py 想更新服务器时:
如果是方案一 (Tar 包):
- 本地重新
docker build。 - 本地重新
docker save。 - 重新上传 tar 包覆盖服务器旧文件。
- 服务器执行:
docker stop my-app && docker rm my-app # 停止并删除旧容器
docker load -i my-fastapi-app.tar # 导入新镜像
docker run -d -p 8092:8092 --name my-app --restart always my-fastapi-app
如果是方案二 (Git 构建) - 推荐流程:
- 本地
git push提交新代码。 - 服务器执行更新脚本:
cd <项目目录>
git pull # 拉取最新代码
docker build -t my-fastapi-app . # 重新构建
docker stop my-app && docker rm my-app # 停止旧容器
docker run -d -p 8092:8092 --name my-app --restart always my-fastapi-app
⚠️ 重要注意事项
-
防火墙/安全组:
- 如果你用的是云服务器 (阿里云/腾讯云/AWS),务必去控制台的安全组设置里,放行 TCP 8092 端口。否则外网无法访问。
- 服务器内部防火墙 (如
ufw) 也要放行:sudo ufw allow 8092。
-
数据持久化:
- 如果你的程序需要保存文件 (如生成的 Excel, 日志),必须挂载卷 (-v),否则容器删除后数据会丢失。
- 例如:
-v /home/ubuntu/data:/app/data。 - 命令示例:
docker run -d -p 8092:8092 \
-v /home/ubuntu/my-app-data:/app/data \
--name my-app --restart always my-fastapi-app
- 查看日志:
- 在服务器上排查问题:
docker logs -f my-app(实时查看日志)。
💡 总结建议
- 新手/个人项目:推荐 方案二 (Git + 服务器构建)。简单直接,不用处理大文件传输。
- 内网隔离环境:只能用 方案一 (Tar 包)。
- 生产环境/团队:推荐 方案三 (镜像仓库)。
你想尝试哪种方案?如果需要,我可以给你写一个具体的“一键更新脚本”
更多推荐

所有评论(0)