新手过渡 Docker 终极指南:老项目不动,新项目起飞(附专属 LNMP 万能模板)

0 阅读8分钟

🚀 新手过渡 Docker 终极指南:老项目不动,新项目起飞(附专属 LNMP 万能模板)

(从宝塔到 Docker,不焦虑、不折腾,稳步升级)


一、我的当前困惑(新手必中)

切换 Docker 后,我最纠结的两个问题:

  1. 以前用宝塔部署的老项目,要不要全部迁移到 Docker?会不会折腾出问题?
  2. 接下来的新项目,确定用 Docker 部署,但我不知道自己还欠缺什么,该学什么才不白费力?
  3. 怕自己学不会,又怕学了没用,陷入 “越学越焦虑” 的内耗。

其实答案很简单:不折腾老项目,专注新项目,只学有用的,循序渐进就赢了,这篇文章结合我的经历,整理了最实在的路线和专属模板,方便后续复习复用。


二、当前最正确的做法(直接照做,不绕弯)

核心原则:老项目稳着来,新项目标准化,这也是企业里最常用的策略,既不影响现有业务,又能逐步升级。

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";
    }
}

模板使用方法(一键启动)

  1. 复制上面的目录结构,创建新项目文件夹;

  2. 把自己的 PHP 代码放到 www 目录;

  3. (可选)修改 docker-compose.yml 中的端口、数据库密码、容器名;

  4. 进入项目根目录,执行命令启动环境:

    bash

    运行

    docker compose up -d
    
  5. 本地访问:http://localhost:8080

  6. 服务器部署:用宝塔反向代理,把域名指向 http://127.0.0.1:8080,一键申请 SSL 即可。


六、对自己的客观判断(不焦虑,不内耗)

我目前的水平,已经超过很多自学的新手:

  • 会写 PHP 项目,能独立开发;
  • 会用宝塔部署上线,能维护项目;
  • 正在掌握 Docker,理解能力强,遇到问题能坚持排查(比如之前的 502 错误);
  • 现在的迷茫,只是 “升级过程中的正常阵痛”,每个人从 “面板使用者” 过渡到 “工程化开发者”,都会经历。

我不是 “废了”,而是在慢慢变强,只是需要一点时间,把新的知识和习惯固化下来。


七、未来 30 天极简路线(直接照走,不踩坑)

  1. 新项目:本地一律用上面的 Docker 模板开发,熟悉模板的修改和使用;
  2. 服务器部署:坚持用「Docker + 宝塔反向代理」,保留熟悉的操作习惯;
  3. 积累经验:跑通 2~3 个新项目,熟练掌握 Docker 常用命令和 Nginx 基础配置;
  4. 巩固基础:遇到问题先查日志(docker logs 容器名),慢慢积累排查经验,不用急着学复杂知识。

八、核心总结(方便记忆,后续复习)

  1. 老项目不动,新项目全用 Docker,不折腾、不内耗;
  2. 不用一次性学完所有知识,只学 “能让项目跑起来、跑稳定” 的内容;
  3. 牢记:Docker 和宝塔是互补关系,不是替代关系,怎么方便怎么来;
  4. 一套专属 Docker 模板,能解决 90% 的新项目环境问题,复制粘贴就能用。

按这个路线走,不用多久,就能彻底熟练 Docker,既保留了自己的优势,又实现了从 “新手” 到 “工程化开发者” 的升级。