零基础用 Claude Code 将 Vue + Django 项目部署到 Docker

发表于 2026-01-30 10:00 2018 字 11 min read

吕小布 avatar

吕小布

The first step is to establish that something is possible; then probability will occur.

暂无目录
作为一个从没用过 Docker 的开发者,记录如何借助 Claude Code 将全栈项目容器化部署,并搭建安全测试环境的完整过程。

作为一个从没用过 Docker 的开发者,我靠着 Claude Code 的帮助,成功将自己的全栈项目部署到了 Docker 上。本文记录整个过程,希望对同样想尝试 Docker 的新手有所帮助。

一、背景介绍

项目简介

我的项目是 PetSocial 智能宠物社交平台,一个前后端分离的全栈项目:

层级技术
前端Vue 3 + Element Plus + Pinia
后端Django 5 + Django REST Framework
数据库MySQL 8.0
认证JWT Token

整个系统包含三个部分:

  • 用户前端(端口 5173)
  • 管理后台前端(端口 5174)
  • Django 后端 API(端口 8000)

项目架构图

为什么想用 Docker

说起 Docker,其实我早就想学了。

在公司经常听同事聊起 Docker,什么「容器化部署」「环境一致性」,听起来很厉害的样子。之前也下载过 Docker Desktop,打开看了一眼,感觉要学的东西太多,就一直搁置着。

这次下定决心要用 Docker,主要有两个原因:

第一,Docker 是企业标配技术。 不管是面试还是实际工作,Docker 都是绑定的技能点。与其一直逃避,不如趁这个机会上手试试。

第二,我需要一个纯净的测试环境。 我打算用 Kali Linux 对自己的项目做一些安全测试——没错,就是那个「黑客系统」。我想知道自己写的这个项目,到底是能经得起考验的「高级项目」,还是漏洞百出的「低级项目」。要做攻击测试,首先得有一个隔离的环境,不能把本地开发数据搞乱了。Docker 正好能满足这个需求。

我的情况

  • 电脑上装了 Docker Desktop,但从来没真正用过
  • 不了解 Dockerfile、docker-compose 这些概念
  • 想快速把项目容器化,但不想花大量时间啃文档

二、部署过程

2.1 告诉 Claude Code 我的需求

我直接在 Claude Code 中输入了一句话:

Claude Code 对话

就这么简单,Claude Code 首先分析了我的项目结构,识别出这是一个 Vue + Django + MySQL 的全栈项目,然后自动生成了所有需要的配置文件。

2.2 生成的核心文件

后端 Dockerfile

# PetSocial 后端 Dockerfile
FROM python:3.11-slim

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV DJANGO_SETTINGS_MODULE=pet_social_backend.settings_docker

WORKDIR /app

# 使用阿里云镜像源(解决国内网络问题)
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \
    sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    default-libmysqlclient-dev \
    build-essential \
    pkg-config \
    && rm -rf /var/lib/apt/lists/*

# 使用清华 pip 镜像源安装 Python 依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple gunicorn mysqlclient

COPY . .

RUN mkdir -p /app/media /app/staticfiles /app/static

EXPOSE 8000

CMD python manage.py migrate --noinput && \
    python manage.py collectstatic --noinput || true && \
    gunicorn --bind 0.0.0.0:8000 --workers 3 pet_social_backend.wsgi:application

前端 Dockerfile(多阶段构建)

# 阶段1: 构建
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 阶段2: 生产环境
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

docker-compose.yml(核心编排文件)

services:
  # MySQL 数据库
  db:
    image: mysql:8.0
    container_name: petsocial-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_password
      MYSQL_DATABASE: pet_social_db
    ports:
      - "3307:3306"  # 映射到3307避免与本地MySQL冲突
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Django 后端
  backend:
    build:
      context: ./pet_social_backend
      dockerfile: Dockerfile
    container_name: petsocial-backend
    restart: always
    environment:
      - DB_HOST=db
      - DB_PORT=3306
    ports:
      - "8000:8000"
    depends_on:
      db:
        condition: service_healthy

  # Vue 用户前端
  frontend:
    build:
      context: ./pet-social-frontend
      dockerfile: Dockerfile
    container_name: petsocial-frontend
    ports:
      - "5173:80"
    depends_on:
      - backend

  # Vue 管理后台
  admin-frontend:
    build:
      context: ./admin-dashboard-frontend
      dockerfile: Dockerfile
    container_name: petsocial-admin
    ports:
      - "5174:80"
    depends_on:
      - backend

volumes:
  mysql_data:

2.3 遇到的问题及解决

部署过程并不是一帆风顺的,遇到了两个典型问题。

问题一:网络下载失败

第一次构建时,后端镜像在下载 Debian 软件包时失败了:

网络错误

原因:国内网络访问国外源不稳定,经常超时或返回 502。

解决方案:Claude Code 帮我修改了 Dockerfile,把软件源换成了国内镜像:

# Debian 软件包用阿里云
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources

# Python 包用清华源
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

问题二:启动脚本报错

构建成功后,后端容器一直启动失败,查看日志发现:

换行符错误

原因:Windows 创建的脚本文件使用 CRLF 换行符,但 Linux 容器需要 LF 换行符。这是 Windows 开发者用 Docker 时的经典坑。

解决方案:Claude Code 直接把启动命令写在 Dockerfile 的 CMD 里,避免使用外部脚本文件,从根本上绕过了这个问题。

2.4 最终启动

所有问题解决后,只需要一条命令:

docker-compose up -d --build

等待几分钟,四个容器全部启动成功!

Docker 运行成功

三、最终效果

运行的容器

容器名说明端口
petsocial-dbMySQL 数据库3307
petsocial-backendDjango 后端8000
petsocial-frontendVue 用户前端5173
petsocial-adminVue 管理后台5174

项目运行效果

打开浏览器访问 http://localhost:5173,项目成功运行:

项目运行效果

环境隔离

这是我最看重的一点:Docker 环境和本地开发环境完全隔离

  • Docker MySQL 映射到端口 3307,不会和本地 MySQL(3306)冲突
  • 在 Docker 环境注册的用户,不会出现在本地数据库中
  • 可以放心地用 Kali 对 Docker 环境做攻击测试,不用担心影响开发数据

四、学到的知识点

虽然是靠 AI 完成的部署,但过程中我也理解了一些 Docker 的核心概念:

Docker 概念图解

核心概念

概念说明类比
镜像 (Image)包含运行环境和代码的模板类似「安装包」
容器 (Container)镜像运行起来的实例类似「进程」
数据卷 (Volume)持久化存储,容器删除后数据还在类似「外挂硬盘」
网络 (Network)容器之间的通信通道类似「局域网」

常用命令

# 构建并启动所有容器
docker-compose up -d --build

# 查看容器状态
docker-compose ps

# 查看某个容器的日志
docker-compose logs -f backend

# 停止所有容器
docker-compose down

# 进入容器内部
docker exec -it petsocial-backend bash

五、写在最后

AI 辅助的体验

这次部署体验让我对 AI 辅助编程有了新的认识:

  1. 降低学习门槛:不需要先花几天学习 Docker 文档,直接描述需求,AI 就能生成可用的配置
  2. 快速解决问题:遇到网络问题、换行符问题,AI 能快速定位原因并给出解决方案
  3. 边做边学:通过阅读和理解 AI 生成的配置文件,我也学到了 Docker 的基本概念

下一步计划

现在 Docker 环境已经搭好了,接下来就是我最期待的部分——用 Kali Linux 对项目做安全测试。

我想验证几个问题:

  • SQL 注入能不能打进去?
  • XSS 攻击能不能成功?
  • JWT Token 的实现有没有漏洞?

等测试完成,再写一篇文章记录结果。希望我的项目能经得起考验吧。

注意事项

如果你也想尝试,有几点需要注意:

  • AI 生成的配置要检查敏感信息(密码、密钥等),不要直接提交到公开仓库
  • 生产环境部署还需要考虑 HTTPS、防火墙、日志监控等
  • 理解生成的配置文件,而不是完全黑盒使用

附录:项目文件结构

pet-social-system/
├── docker-compose.yml              # Docker 编排配置
├── .env                            # 环境变量(不要提交到 Git)
├── pet_social_backend/
│   ├── Dockerfile                  # 后端镜像配置
│   └── pet_social_backend/
│       └── settings_docker.py      # Docker 专用 Django 配置
├── pet-social-frontend/
│   ├── Dockerfile                  # 前端镜像配置
│   └── nginx.conf                  # Nginx 配置
└── admin-dashboard-frontend/
    ├── Dockerfile                  # 管理后台镜像配置
    └── nginx.conf

本文记录于 2026 年 1 月,使用 Claude Code (Opus 4.5) 辅助完成 Docker 部署。

© 2024 - 2026 吕小布 @insist
Powered by theme astro-koharu · Inspired by Shoka