可以。既然你的目标不是“简单会用 Docker Desktop”,而是以后能自己用 Docker Desktop 部署 PHP / Webman / Laravel / ThinkPHP / MySQL / Redis / Nginx 等项目,我建议不要只学几个 docker run 命令,而是按“理解 Docker → Dockerfile → Compose → PHP 环境 → 数据库 → Nginx → 项目部署 → 生产部署”这条路线学。
你之前已经接触过 PHP、ThinkPHP、Laravel、Webman、MySQL、Composer,所以这套教程我会直接按照 PHP 开发者的实际场景来教。
一、先建立一个正确的认识
你以后做 PHP 项目,最终很可能是这样的结构:
你的电脑
│
├─ Windows
│
├─ Docker Desktop
│ │
│ ├─ PHP 容器
│ │ └─ PHP 8.3
│ │
│ ├─ Nginx 容器
│ │
│ ├─ MySQL 容器
│ │
│ ├─ Redis 容器
│ │
│ └─ phpMyAdmin 容器
│
└─ 你的 PHP 项目
├─ app/
├─ config/
├─ public/
├─ vendor/
├─ composer.json
├─ Dockerfile
└─ compose.yaml也就是说:
以后你电脑上不一定需要直接安装 PHP、MySQL、Redis、Nginx。
Docker 把这些东西分别放进容器里。
这也是 Docker 最核心的价值。
Docker Desktop 在 Windows 上目前推荐使用 WSL 2 后端;Docker 官方也建议 Windows 开发环境结合 WSL 2 使用。(Docker 文档)
二、你必须先搞懂 6 个东西
Docker 初学者最容易犯的错误,就是一上来背命令。
其实你只需要先理解:
| Docker 概念 | PHP 开发者可以理解成 |
|---|---|
| Image 镜像 | PHP 环境模板 |
| Container 容器 | 正在运行的 PHP 环境 |
| Dockerfile | 如何制作 PHP 环境 |
| Compose | 一次定义 PHP+Nginx+MySQL+Redis |
| Volume | 数据持久化 |
| Network | 容器之间通信 |
其中最重要的是:
Dockerfile
↓
Image
↓
Container而:
compose.yaml
↓
一次管理多个 Container三、第一阶段:先把 Docker Desktop 安装正确
你是 Windows,所以推荐:
Windows
↓
WSL 2
↓
Docker Desktop
↓
Linux ContainersDocker 官方目前要求 WSL 至少为 2.1.5,推荐保持最新版本。(Docker 文档)
1. 检查 WSL
打开:
PowerShell执行:
wsl --version再执行:
wsl -l -v正常可能看到:
NAME STATE VERSION
Ubuntu Running 2如果没有 WSL:
wsl --install然后:
wsl --update重启电脑。
四、Docker Desktop 怎么设置
安装 Docker Desktop 后打开:
Settings重点看:
General确保:
Use the WSL 2 based engine开启。
然后:
Settings
↓
Resources
↓
WSL Integration打开你的 Ubuntu。
Docker 官方也建议在 WSL 2 环境下进行开发,并开启 WSL Integration。(Docker 文档)
五、第一课:不要 PHP,先跑一个 Nginx
打开 PowerShell:
docker --version然后:
docker run -d -p 8080:80 nginx浏览器打开:
http://localhost:8080你应该看到:
Welcome to nginx!恭喜。
你已经完成了:
Docker Desktop
↓
下载 nginx 镜像
↓
创建 nginx 容器
↓
启动容器
↓
Windows 8080
↓
容器 80六、理解这个命令
刚才:
docker run -d -p 8080:80 nginx拆开:
dockerDocker 命令。
run创建并运行容器。
-d后台运行。
-p 8080:80端口映射:
Windows 8080
↓
Docker 容器 80最后:
nginx使用的镜像。
七、Docker Desktop GUI 到底怎么看?
现在打开 Docker Desktop。
你会看到:
Containers
Images
Volumes
Builds
...刚才创建的:
nginx就在:
Containers里面。
而:
nginx镜像就在:
Images里面。
所以一定要区分:
Image
nginx 镜像它类似:
安装包 / 模板
Container
nginx 容器它类似:
已经启动的程序实例
可以这样理解:
nginx Image
│
├── Container 1
│
├── Container 2
│
└── Container 3一个镜像可以创建很多容器。
八、几个你必须掌握的命令
查看容器
docker ps查看所有容器:
docker ps -a停止容器
docker stop 容器ID例如:
docker stop abc123删除容器
docker rm 容器ID查看镜像
docker images删除镜像
docker rmi nginx查看日志
这个非常重要。
docker logs 容器ID实时查看:
docker logs -f 容器ID以后 PHP 报错、Webman 启动失败、Nginx 502,第一反应就是看日志。
九、第二课:开始 PHP
现在开始进入你真正需要的部分。
Docker 官方有专门的 PHP 容器化教程,目前官方 PHP Guide 就是围绕 Dockerfile、Compose、数据库和开发环境展开的。(Docker 文档)
我们先建立:
php-demo
│
├── index.php
└── Dockerfile十、创建 index.php
<?php
phpinfo();十一、创建 Dockerfile
FROM php:8.3-apache
COPY . /var/www/html这就是你的第一个 Dockerfile。
十二、构建 PHP 镜像
进入项目目录:
docker build -t php-demo .这里:
docker build构建镜像。
-t php-demo给镜像起名字:
php-demo.当前目录作为构建上下文。
然后:
docker images你应该看到:
php-demo
php
...十三、启动 PHP
docker run -d -p 8080:80 --name php-demo php-demo浏览器:
http://localhost:8080看到 PHP 信息。
你已经完成:
Docker
↓
PHP Image
↓
PHP Container
↓
Apache
↓
PHP
↓
浏览器十四、但是这不是我们最终要用的方式
你以后做:
Webman
Laravel
ThinkPHP
8688web
外贸商城
客服系统不会每次都:
docker run ...而是使用:
Docker Compose
这是你必须重点掌握的东西。
十五、什么是 Compose?
假设你的 PHP 项目需要:
Nginx
PHP
MySQL
Redis以前你可能需要:
启动 PHP
启动 Nginx
启动 MySQL
启动 Redis
配置网络
配置端口Compose 可以统一描述:
services:
nginx:
...
php:
...
mysql:
...
redis:
...然后一句:
docker compose up -d全部启动。
十六、这才是你真正需要掌握的 Docker
以后你的 PHP 项目目录可能是:
my-project/
│
├── app/
├── config/
├── public/
├── runtime/
├── vendor/
├── composer.json
├── Dockerfile
├── compose.yaml
└── docker/
└── nginx/
└── default.conf十七、一个完整 PHP 开发环境
我们先做一个:
Nginx
↓
PHP 8.3
↓
MySQL 8
↓
Redis架构:
Windows
│
Docker Desktop
│
┌────────────┴────────────┐
│ │
Nginx │
:8080 │
│ │
↓ │
PHP 8.3 │
│ │
├──────────→ MySQL 8 │
│ │
└──────────→ Redis │十八、compose.yaml
例如:
services:
php:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/var/www/html
networks:
- app
nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- .:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
networks:
- app
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: demo
MYSQL_USER: demo
MYSQL_PASSWORD: demo
volumes:
- mysql-data:/var/lib/mysql
networks:
- app
redis:
image: redis:alpine
networks:
- app
networks:
app:
volumes:
mysql-data:这一个文件就定义了:
PHP
Nginx
MySQL
Redis
网络
MySQL 数据十九、然后只需要
docker compose up -d查看:
docker compose ps可能看到:
NAME STATUS
xxx-php-1 running
xxx-nginx-1 running
xxx-mysql-1 running
xxx-redis-1 running停止:
docker compose down重新构建:
docker compose up -d --build看日志:
docker compose logs -f看 PHP:
docker compose logs -f php看 Nginx:
docker compose logs -f nginx看 MySQL:
docker compose logs -f mysql二十、你现在必须理解一个特别重要的东西:容器网络
比如 PHP 连接 MySQL。
很多初学者会写:
127.0.0.1这是错的。
因为:
PHP Container
127.0.0.1代表的是:
PHP 容器自己
而不是 MySQL。
Compose 中:
mysql:就是 MySQL 的服务名。
所以 PHP 连接:
mysql:3306而不是:
127.0.0.1:3306例如:
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=demo
DB_USERNAME=demo
DB_PASSWORD=demo这个概念对你以后部署 Webman、Laravel、ThinkPHP 非常重要。
二十一、Volume 是什么?
比如 MySQL:
volumes:
- mysql-data:/var/lib/mysql意思:
MySQL容器
│
↓
/var/lib/mysql
│
↓
mysql-data即使:
docker compose down数据库数据仍然存在。
所以:
Container可以删除。
但:
Volume保存数据。
这就是为什么:
容器不是虚拟机。
二十二、你以后会经常遇到的命令
把这一组记下来。
Docker
docker ps
docker ps -a
docker images
docker logs
docker exec
docker stop
docker start
docker restart
docker rm
docker rmi
docker inspectCompose
docker compose up -d
docker compose down
docker compose restart
docker compose ps
docker compose logs
docker compose logs -f
docker compose exec
docker compose build
docker compose up -d --build二十三、尤其要学会 docker exec
例如进入 PHP 容器:
docker compose exec php bash进入之后:
php -v查看:
PHP 8.3.xComposer:
composer -V甚至:
ls你会发现:
你其实已经进入了一台 Linux 环境。
二十四、这时候你就会理解 Docker 的真正意义
以前:
Windows
│
├── PHP 8.1
├── PHP 8.2
├── PHP 8.3
├── MySQL
├── Redis
├── Nginx
├── Composer
└── 各种扩展很容易乱。
Docker:
Docker Desktop
│
├── PHP 8.1 Container
├── PHP 8.2 Container
├── PHP 8.3 Container
│
├── MySQL Container
├── Redis Container
│
├── Webman项目
├── Laravel项目
└── ThinkPHP项目不同项目之间互相隔离。
二十五、对于你,我建议学习路线这样安排
不要一次把所有 Docker 知识全部学完。
按照这个顺序:
第 1 阶段:Docker 基础
必须掌握:
Image
Container
Dockerfile
Volume
Network
Port以及:
docker pull
docker run
docker ps
docker stop
docker rm
docker logs
docker exec
docker build第 2 阶段:Compose
重点:
compose.yaml
services
image
build
ports
volumes
environment
depends_on
networks掌握:
docker compose up -d
docker compose down
docker compose ps
docker compose logs
docker compose exec
docker compose build第 3 阶段:PHP
然后进入:
PHP
Composer
PHP Extension
php.ini
www.conf
OPcache比如:
pdo
pdo_mysql
mysqli
redis
mbstring
curl
zip
gd
openssl二十六、第 4 阶段:Nginx + PHP-FPM
这是 PHP 开发者非常重要的一关。
最终理解:
浏览器
↓
Nginx
↓
PHP-FPM
↓
PHP代码而不是简单的:
Apache + PHP你以后部署 Webman / Laravel / ThinkPHP,理解这个非常有价值。
二十七、第 5 阶段:MySQL + Redis
学习:
MySQL Container
Redis Container
Volume
Network
Environment最终:
PHP
│
├── MySQL
│
└── Redis二十八、第 6 阶段:真正部署 Webman
这个阶段就和你目前的开发方向高度相关了。
最终做到:
8688web
│
├── Nginx
│
├── Webman
│ └── PHP 8.3
│
├── MySQL
│
├── Redis
│
└── Composer启动:
docker compose up -d然后:
http://localhost访问你的 Webman。
二十九、第 7 阶段:多项目
例如:
Docker Desktop
│
├── 8688web
│ ├── nginx
│ ├── php
│ ├── mysql
│ └── redis
│
├── project-a
│ ├── nginx
│ ├── php
│ └── mysql
│
├── project-b
│ ├── nginx
│ └── php
│
└── project-c每个项目独立。
这时候你就真正进入 Docker 开发模式了。
三十、还有一个你现在非常值得注意的问题:项目放哪里
如果你使用 Windows + WSL 2:
开发项目最好放在 WSL 的 Linux 文件系统里,而不是大量 PHP 项目放在 Windows 文件系统后再通过挂载访问。
Docker 官方也明确建议,在 WSL 2 开发环境中,为了获得更好的性能,把代码放在默认 Linux distribution 内。(Docker 文档)
例如:
Ubuntu
/home/你的用户名/projects/然后:
cd ~/projects开发。
如果使用 VS Code,也可以:
code .直接进入 WSL 环境开发。(Docker 文档)
三十一、你暂时不要急着学这些
现在先别碰:
Kubernetes
Docker Swarm
Docker Registry
CI/CD
Docker Scout
容器编排
多阶段构建高级玩法这些以后再学。
对于你目前:
PHP + Webman + Laravel + ThinkPHP + MySQL + Redis + Nginx
最重要的是:
Docker基础
↓
Dockerfile
↓
Compose
↓
PHP
↓
Nginx
↓
MySQL
↓
Redis
↓
Webman
↓
完整项目
↓
生产部署三十二、我建议我们直接“实战学”
你如果真的想必须掌握 Docker Desktop,我不建议我一次给你甩一百页理论。
我们可以直接做一个完整的 PHP Docker 实战课程:
实战项目
Docker Desktop
↓
WSL2
↓
PHP 8.3
↓
Nginx
↓
MySQL 8
↓
Redis
↓
Composer
↓
Webman
↓
Laravel
↓
ThinkPHP最后甚至可以做到:
一个项目
↓
git clone
↓
docker compose up -d
↓
PHP环境自动安装
↓
Composer自动处理
↓
MySQL自动启动
↓
Redis自动启动
↓
Nginx自动启动
↓
浏览器直接访问这才是你真正应该掌握的 Docker 使用方式。
你现在先不要往后跳。第一步就在你电脑上执行:
wsl --version以及:
wsl -l -v把这两个命令的结果直接发给我。我可以根据你现在的 Windows/WSL 状态,带你从 Docker Desktop 安装 → WSL2 → 第一个 PHP 容器 → PHP+Nginx+MySQL+Redis → Webman 项目一步一步实操。
评论 (0)