作为一个从没用过 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 首先分析了我的项目结构,识别出这是一个 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
等待几分钟,四个容器全部启动成功!

三、最终效果
运行的容器
| 容器名 | 说明 | 端口 |
|---|---|---|
| petsocial-db | MySQL 数据库 | 3307 |
| petsocial-backend | Django 后端 | 8000 |
| petsocial-frontend | Vue 用户前端 | 5173 |
| petsocial-admin | Vue 管理后台 | 5174 |
项目运行效果
打开浏览器访问 http://localhost:5173,项目成功运行:

环境隔离
这是我最看重的一点:Docker 环境和本地开发环境完全隔离。
- Docker MySQL 映射到端口 3307,不会和本地 MySQL(3306)冲突
- 在 Docker 环境注册的用户,不会出现在本地数据库中
- 可以放心地用 Kali 对 Docker 环境做攻击测试,不用担心影响开发数据
四、学到的知识点
虽然是靠 AI 完成的部署,但过程中我也理解了一些 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 辅助编程有了新的认识:
- 降低学习门槛:不需要先花几天学习 Docker 文档,直接描述需求,AI 就能生成可用的配置
- 快速解决问题:遇到网络问题、换行符问题,AI 能快速定位原因并给出解决方案
- 边做边学:通过阅读和理解 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 部署。