🚀 新手过渡 Docker 终极指南:老项目不动,新项目起飞(附专属 LNMP 万能模板)
(从宝塔到 Docker,不焦虑、不折腾,稳步升级)
一、我的当前困惑(新手必中)
切换 Docker 后,我最纠结的两个问题:
- 以前用宝塔部署的老项目,要不要全部迁移到 Docker?会不会折腾出问题?
- 接下来的新项目,确定用 Docker 部署,但我不知道自己还欠缺什么,该学什么才不白费力?
- 怕自己学不会,又怕学了没用,陷入 “越学越焦虑” 的内耗。
其实答案很简单:不折腾老项目,专注新项目,只学有用的,循序渐进就赢了,这篇文章结合我的经历,整理了最实在的路线和专属模板,方便后续复习复用。
二、当前最正确的做法(直接照做,不绕弯)
核心原则:老项目稳着来,新项目标准化,这也是企业里最常用的策略,既不影响现有业务,又能逐步升级。
1. 老项目:完全不用管,继续用宝塔跑
- 凡是已经上线、稳定运行,能正常维护、改 bug 的老项目,一律不动!
- 不用强行迁移到 Docker,宝塔能稳定跑,就继续用,稳定永远是第一位。
- Docker 不是用来折腾旧项目的,是用来规范新项目的,别本末倒置。
2. 新项目:全部用 Docker 搭建环境(标准流程)
- 本地开发:用 Docker 跑 LNMP(Nginx+PHP+MySQL),保证本地环境和服务器一致;
- 服务器部署:用「Docker + 宝塔反向代理」,域名、SSL、防火墙依然用宝塔点鼠标搞定;
- 全程不用舍弃熟悉的宝塔操作,只是把 “环境搭建” 交给 Docker,避免上线翻车。
总结:
老项目 → 宝塔不动,省心省力;新项目 → Docker 部署,规范高效;过渡期完全无痛,不用焦虑自己 “不会部署”。
三、客观分析:我现在欠缺什么?(不打击,只讲实在的)
我目前不缺 “能写项目、能上线” 的基础能力,欠缺的是 3 块认知 + 1 套可复用习惯,也是新手从 “面板使用者” 升级为 “工程化开发者” 的关键:
1. 欠缺:对「环境本质」的理解
以前用宝塔,所有环境(Nginx、PHP、MySQL)都由宝塔包办,我不用管它们各自的作用、怎么通信;现在用 Docker,需要明白:Nginx 负责转发请求、PHP 负责解析代码、MySQL 负责存数据,以及它们之间如何通过 Docker 网络互通(这几天踩的 502、端口冲突,其实就是在补这一课,已经快掌握了)。
2. 欠缺:一套「可迁移的开发部署流程」
以前本地用集成环境(phpStudy),服务器用宝塔,两边环境不统一,上线全靠运气;企业开发的核心是「本地环境 = 服务器环境」,这正是 Docker 解决的,我需要建立一套 “本地 Docker 开发 → 服务器 Docker 部署” 的固定流程,不用每次都从头摸索。
3. 欠缺:基础的 Nginx + Linux 常识(不用精通,够用就好)
不用啃复杂的配置和命令,只要掌握 3 点就够:
- Nginx:知道域名怎么绑定、反向代理的作用、多项目怎么区分;
- Linux:熟悉基础命令(cd、ls、rm)和 Docker 常用命令(启动、停止、看日志);
- 这些知识在实际用 Docker 部署新项目时,慢慢就能掌握,不用急着一次性学完。
4. 欠缺:一套「自己能复用的 Docker 模板」
现在最需要的不是学更多新东西,而是一套 “复制粘贴就能用” 的 Docker 模板,以后新项目直接套用,1 分钟启动环境,不用再逐行写配置、排错。
四、接下来最该学什么?(优先级排序,只学有用的)
按「从高到低」排序,不用贪多,学完一个阶段再往下走,避免内耗:
🔥 优先级 1(必须马上掌握,已基本会)
- 能写最简版
docker-compose.yml,会改端口、目录、数据库密码; - 会用 Docker 常用命令:启动(
docker compose up -d)、停止(docker compose down)、看日志(docker logs 容器名); - 会用宝塔反向代理,把域名指向 Docker 映射的端口(和以前宝塔绑域名一样简单)。
🔥 优先级 2(1 周内学会,快速巩固)
- 彻底理解容器通信原理(容器名解析、Docker 内网,不用懂底层,会用就行);
- 搞懂端口映射:
8080:80的含义(宿主机端口:容器内端口),避免端口冲突; - 理解数据卷(Volume)的作用,防止容器删除后数据库数据丢失;
- 学会本地同时跑多个 Docker 项目,互不干扰。
🔥 优先级 3(1 个月内慢慢学,循序渐进)
- 简单的 Nginx 配置:多站点配置、反向代理基础(复制模板改一改就行);
- PHP 常用扩展安装:mysqli、gd、zip(在
docker-compose.yml里添加命令,不用手动装); - 常用 Linux 命令:熟练操作服务器文件、查看日志、管理 Docker 容器。
🔥 优先级 4(不用急,工作需要再学)
- CI/CD 自动部署、Docker 集群、k8s 等;
- 这些属于进阶内容,90% 的后端开发者日常用不到,不用提前焦虑,等工作需要再补。
五、专属个人 Docker 万能模板(LNMP 一键启动)
这套模板是结合我之前踩的坑,专门定制的,复制粘贴就能用,以后新项目直接套用,不用再写配置、排错,适配本地开发和服务器部署。
模板目录结构(直接复制文件夹即可)
plaintext
my-project/ # 新项目根目录
├── docker-compose.yml # Docker 核心配置(一键启动所有服务)
├── nginx/ # Nginx 配置目录
│ └── conf.d/
│ └── default.conf # Nginx 站点配置
└── www/ # 项目代码目录(直接放 PHP 代码)
1. docker-compose.yml(核心配置,可直接复制)
yaml
version: '3'
services:
# Nginx 服务(负责转发请求、静态资源)
nginx:
image: nginx:latest
container_name: my-nginx # 容器名,可自定义(如 project-nginx)
ports:
- "8080:80" # 宿主机端口:容器内端口,避免冲突可改(如 8081:80)
volumes:
- ./www:/var/www/html # 项目代码目录挂载(本地/服务器一致)
- ./nginx/conf.d:/etc/nginx/conf.d # Nginx 配置挂载
depends_on:
- php # 依赖 PHP 服务,PHP 启动后再启动 Nginx
restart: always # 服务器重启后,自动启动容器
# PHP 服务(解析 PHP 代码)
php:
image: php:8.2-fpm-alpine # 轻量镜像,适合生产/开发
container_name: my-php # 容器名,可自定义
volumes:
- ./www:/var/www/html # 代码目录挂载,和 Nginx 一致
depends_on:
- mysql # 依赖 MySQL 服务
restart: always
# 安装常用 PHP 扩展(不用手动装,启动时自动安装)
command: >
sh -c "apk add --no-cache libpng-dev libjpeg-turbo-dev freetype-dev &&
docker-php-ext-configure gd --with-freetype --with-jpeg &&
docker-php-ext-install pdo pdo_mysql mysqli gd zip &&
chmod -R 777 /var/www/html &&
php-fpm"
# MySQL 服务(数据库)
mysql:
image: mysql:8.0
container_name: my-mysql # 容器名,可自定义
ports:
- "3306:3306" # 端口冲突可改(如 3307:3306)
environment:
MYSQL_ROOT_PASSWORD: 123456 # 数据库密码,可自定义
MYSQL_DATABASE: my_demo_db # 自动创建的数据库名,可自定义
volumes:
- mysql-data:/var/lib/mysql # 数据卷,防止数据丢失
restart: always
# 数据卷(持久化存储,容器删除后数据不丢失)
volumes:
mysql-data:
2. Nginx 配置(default.conf,可直接复制)
nginx
# 站点配置,适配 PHP 项目,可直接用
server {
listen 80;
server_name localhost; # 服务器部署时,可改为自己的域名(如 demo.example.com)
root /var/www/html; # 代码目录,和 docker-compose.yml 挂载一致
index index.php index.html; # 默认首页
# PHP 请求转发到 PHP 容器
location ~ .php$ {
fastcgi_pass my-php:9000; # 容器名:PHP-FPM 端口,和 docker-compose.yml 中 PHP 容器名一致
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 静态资源缓存(优化性能)
location ~* .(css|js|jpg|png|gif)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
}
模板使用方法(一键启动)
-
复制上面的目录结构,创建新项目文件夹;
-
把自己的 PHP 代码放到
www目录; -
(可选)修改
docker-compose.yml中的端口、数据库密码、容器名; -
进入项目根目录,执行命令启动环境:
bash
运行
docker compose up -d -
本地访问:
http://localhost:8080; -
服务器部署:用宝塔反向代理,把域名指向
http://127.0.0.1:8080,一键申请 SSL 即可。
六、对自己的客观判断(不焦虑,不内耗)
我目前的水平,已经超过很多自学的新手:
- 会写 PHP 项目,能独立开发;
- 会用宝塔部署上线,能维护项目;
- 正在掌握 Docker,理解能力强,遇到问题能坚持排查(比如之前的 502 错误);
- 现在的迷茫,只是 “升级过程中的正常阵痛”,每个人从 “面板使用者” 过渡到 “工程化开发者”,都会经历。
我不是 “废了”,而是在慢慢变强,只是需要一点时间,把新的知识和习惯固化下来。
七、未来 30 天极简路线(直接照走,不踩坑)
- 新项目:本地一律用上面的 Docker 模板开发,熟悉模板的修改和使用;
- 服务器部署:坚持用「Docker + 宝塔反向代理」,保留熟悉的操作习惯;
- 积累经验:跑通 2~3 个新项目,熟练掌握 Docker 常用命令和 Nginx 基础配置;
- 巩固基础:遇到问题先查日志(
docker logs 容器名),慢慢积累排查经验,不用急着学复杂知识。
八、核心总结(方便记忆,后续复习)
- 老项目不动,新项目全用 Docker,不折腾、不内耗;
- 不用一次性学完所有知识,只学 “能让项目跑起来、跑稳定” 的内容;
- 牢记:Docker 和宝塔是互补关系,不是替代关系,怎么方便怎么来;
- 一套专属 Docker 模板,能解决 90% 的新项目环境问题,复制粘贴就能用。
按这个路线走,不用多久,就能彻底熟练 Docker,既保留了自己的优势,又实现了从 “新手” 到 “工程化开发者” 的升级。