系列文章

《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生成,暂未验证。

这是一个非常经典的“本地开发,服务器部署”场景。

核心逻辑

  1. 本机 (Windows):写代码、调试、构建 Docker 镜像。
  2. 传输:把镜像传到服务器,或者在服务器上直接拉取代码构建。
  3. 服务器 (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 (专业做法)

适用场景:团队协作,频繁更新,追求自动化。

  1. 本机:构建镜像 -> 登录阿里云/DockerHub -> docker push 上传镜像。
  2. 服务器docker pull 拉取镜像 -> docker run 运行。
  3. 更新时:本机修改代码 -> 重新 build & push (版本号变一下,如 v1.1) -> 服务器上 docker pull 新镜像 -> 重启容器。

🔥 关键步骤:如何更新代码?

无论你用哪种方案,当你修改了 main.py 想更新服务器时:

如果是方案一 (Tar 包):
  1. 本地重新 docker build
  2. 本地重新 docker save
  3. 重新上传 tar 包覆盖服务器旧文件。
  4. 服务器执行:
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 构建) - 推荐流程
  1. 本地 git push 提交新代码。
  2. 服务器执行更新脚本:
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

⚠️ 重要注意事项

  1. 防火墙/安全组

    • 如果你用的是云服务器 (阿里云/腾讯云/AWS),务必去控制台的安全组设置里,放行 TCP 8092 端口。否则外网无法访问。
    • 服务器内部防火墙 (如 ufw) 也要放行:sudo ufw allow 8092
  2. 数据持久化

    • 如果你的程序需要保存文件 (如生成的 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
  1. 查看日志
  • 在服务器上排查问题:docker logs -f my-app (实时查看日志)。

💡 总结建议

  • 新手/个人项目:推荐 方案二 (Git + 服务器构建)。简单直接,不用处理大文件传输。
  • 内网隔离环境:只能用 方案一 (Tar 包)
  • 生产环境/团队:推荐 方案三 (镜像仓库)

你想尝试哪种方案?如果需要,我可以给你写一个具体的“一键更新脚本”

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐