站长省心部署指南:用 Docker 一键搭建网站环境
Docker Docker部署教程|适合站长
对于很多站长来说,服务器运维最头疼的事情,不是建站本身,而是环境配置、依赖冲突、版本升级、数据迁移、服务重启这些“看不见但很耗时”的工作。
而 Docker 的出现,恰好解决了这些痛点:它可以把网站程序、数据库、缓存、反向代理等服务打包成独立容器,让你的部署方式从“手工安装配置”升级为“标准化、可复制、可迁移”。
如果你是站长,正在运营 WordPress、Typecho、Halo、Node.js 网站、Python 项目,甚至是自建博客、论坛、下载站、API 服务,那么学会 Docker 部署,几乎就是给自己配了一套“网站运维加速器”。
本文将从站长实际使用场景出发,系统讲解:
- Docker 是什么
- 为什么站长应该学 Docker
- 如何在 Linux 服务器上安装 Docker
- 如何用 Docker Compose 部署网站
- 如何部署 Nginx、MySQL、Redis、WordPress 等常见服务
- 如何做数据持久化、备份与更新
- 常见问题与排错思路
全文尽量用站长能直接上手的方式讲,不讲过于晦涩的理论。
一、什么是 Docker?
简单理解,Docker 就是一个“轻量级虚拟化容器平台”。
传统部署方式通常是:
- 装系统
- 装运行环境,比如 PHP、MySQL、Nginx、Python、Node.js
- 配置各种依赖
- 处理版本冲突
- 网站程序上线
问题是,一旦你部署多个项目,很容易出现:
- PHP 版本不一致
- MySQL 版本不兼容
- Redis 配置冲突
- 某个项目升级后把另一个项目弄挂了
- 换服务器时要重新折腾一遍
而 Docker 的思路是:
把每个服务打包成独立容器,每个容器只做一件事,彼此隔离,环境一致。
这意味着:
- 同一台服务器可以跑多个项目
- 项目之间不互相影响
- 容器删了可以重新拉起
- 迁移更方便
- 部署更标准化
二、站长为什么特别适合用 Docker?
如果你是站长,Docker 的价值会更明显。
1. 省时间
很多站长最怕的不是写文章,而是“服务器一出问题就开始修环境”。
Docker 能让你把部署步骤固定下来,后续一键启动,省去大量重复劳动。
2. 降低环境冲突
比如你同时运行:
- 一个 WordPress
- 一个 LNMP 项目
- 一个 Python API
- 一个 Redis 缓存服务
如果全部手动安装,后期升级维护非常麻烦。Docker 可以让这些服务互不干扰。
3. 更适合批量建站
有些站长会运营多个站点,比如:
- 个人博客
- 资讯站
- 工具站
- 资源下载站
- 导航站
Docker 适合做标准化部署,方便复制模板,批量上线新站。
4. 数据更容易迁移
只要你做好了数据卷挂载,网站程序和数据库数据都可以独立保存。
换服务器时,打包数据、导出配置、重新启动容器,就能快速恢复。
5. 更适合自动化运维
配合 Docker Compose,你可以把多个服务写进一个 docker-compose.yml 文件里,之后只要执行:
docker compose up -d
整套网站环境就能自动启动。
三、Docker 的核心概念,站长必须懂
在实操前,先理解几个常见概念。
1. 镜像(Image)
镜像可以理解为“模板”或“安装包”。
比如:
nginxmysqlrediswordpressphp
这些都可以从镜像仓库拉取。
2. 容器(Container)
容器是镜像运行后的实例。
镜像像“程序安装包”,容器像“安装后运行中的服务”。
3. 数据卷(Volume)
容器本身是可销毁的,但网站数据不能丢。
所以我们要把数据库、网站文件等重要数据挂载到宿主机目录或数据卷中,这样即使容器删掉,数据还在。
4. Docker Compose
这是站长最常用的工具之一。
它可以用一个 YAML 文件定义多个容器服务,比如:
- Nginx
- PHP
- MySQL
- Redis
- WordPress
然后一条命令启动整个网站环境。
四、Linux 服务器安装 Docker
目前站长最常用的还是 Linux 服务器,比如:
- Ubuntu
- Debian
- CentOS
- Rocky Linux
下面以 Ubuntu / Debian 系列 为例,最适合大多数站长。
1. 更新系统
sudo apt update && sudo apt upgrade -y
2. 安装依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 添加 Docker 官方源
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
如果你是 Debian,源地址略有差异,但流程相同。
4. 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
5. 启动 Docker
sudo systemctl enable docker
sudo systemctl start docker
6. 验证是否安装成功
docker --version
docker compose version
如果能看到版本号,说明安装完成。
五、给普通用户使用 Docker 权限
默认情况下,Docker 命令需要 sudo 执行。
为了方便站长日常使用,可以把当前用户加入 docker 组:
sudo usermod -aG docker $USER
然后重新登录 SSH 连接即可。
注意:docker 组权限较高,等同于服务器管理权限,建议只给可信用户使用。
六、Docker 部署网站的基本思路
一个典型的网站环境通常包括:
- 反向代理:Nginx / Caddy / Traefik
- Web 程序:PHP / Node.js / Python / Java
- 数据库:MySQL / MariaDB / PostgreSQL
- 缓存:Redis
- 文件存储:本地卷或对象存储
站长最常见的做法是:
- 先准备项目目录
- 写
docker-compose.yml - 配置环境变量
- 挂载数据卷
- 启动服务
- 配置域名和 HTTPS
七、用 Docker Compose 部署 WordPress 示例
WordPress 是站长最常见的建站程序之一。
下面给出一个简单但实用的 Docker Compose 部署方案。
1. 创建目录
mkdir -p /opt/wordpress
cd /opt/wordpress
2. 创建 docker-compose.yml
version: "3.8"
services:
db:
image: mysql:8.0
container_name: wordpress_db
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wp_password_123
MYSQL_ROOT_PASSWORD: root_password_123
volumes:
- ./db_data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
wordpress:
image: wordpress:latest
container_name: wordpress_app
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wp_password_123
WORDPRESS_DB_NAME: wordpress
volumes:
- ./wp_data:/var/www/html
depends_on:
- db
3. 启动服务
docker compose up -d
然后访问:
http://服务器IP:8080
就可以进入 WordPress 安装页面。
八、给 WordPress 配置域名和 Nginx 反代
站长通常不会直接用端口访问,而是会绑定域名,比如:
www.example.comblog.example.com
这时建议使用 Nginx 做反向代理。
1. 安装 Nginx 容器
你可以单独起一个 Nginx 容器,也可以用宿主机 Nginx。
如果想全部容器化,建议如下方式:
services:
nginx:
image: nginx:alpine
container_name: wordpress_nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/cert:/etc/nginx/cert
depends_on:
- wordpress
2. Nginx 反代配置示例
创建:
mkdir -p nginx/conf.d
然后写入 nginx/conf.d/default.conf:
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://wordpress_app:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这样,用户访问域名时就会转发到 WordPress 容器。
九、Docker 部署站长常用环境:PHP + Nginx + MySQL
如果你用的是 Typecho、Discuz、Laravel、ThinkPHP 等程序,常见环境一般是:
- Nginx
- PHP-FPM
- MySQL
- Redis
下面给一个更通用的思路。
示例目录结构
project/
├── docker-compose.yml
├── nginx/
│ └── default.conf
├── php/
│ └── Dockerfile
├── www/
│ └── 网站源码
└── mysql/
└── data
PHP Dockerfile 示例
FROM php:8.2-fpm
RUN apt-get update && apt-get install -y \
libzip-dev \
unzip \
zip \
&& docker-php-ext-install pdo_mysql zip
WORKDIR /var/www/html
Compose 示例
version: "3.8"
services:
nginx:
image: nginx:alpine
container_name: site_nginx
ports:
- "80:80"
volumes:
- ./www:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
build: ./php
container_name: site_php
volumes:
- ./www:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8.0
container_name: site_mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: site
MYSQL_USER: siteuser
MYSQL_PASSWORD: sitepass123
volumes:
- ./mysql/data:/var/lib/mysql
这个结构适合大多数 PHP 程序,站长可以在此基础上扩展 Redis、定时任务等服务。
十、数据持久化:Docker 部署最重要的一步
很多新手站长第一次用 Docker,会犯一个很常见的错误:
容器一删,数据也没了。
原因就是没有做好数据卷挂载。
1. 什么必须持久化?
通常要保存以下内容:
- 数据库数据
- 网站源码
- 上传文件
- 配置文件
- SSL 证书
2. 推荐做法
把容器内部数据挂载到宿主机目录,例如:
volumes:
- ./db_data:/var/lib/mysql
- ./www:/var/www/html
这样,容器只是“运行工具”,数据都保留在主机上。
十一、站长必备:备份与恢复
网站不是“能跑起来”就结束了,备份才是长期运营的核心。
1. 备份数据库
MySQL 导出:
docker exec -i wordpress_db mysqldump -uroot -proot_password_123 wordpress > backup.sql
2. 备份网站文件
tar -czvf website_backup.tar.gz ./wp_data
3. 恢复数据库
docker exec -i wordpress_db mysql -uroot -proot_password_123 wordpress < backup.sql
4. 备份建议
站长建议至少做到:
- 每天自动备份一次数据库
- 每周完整备份网站目录
- 备份文件异地保存
- 重要站点保留多个历史版本
你可以用 cron 定时任务配合脚本完成自动备份。
十二、Docker 常用命令,站长要记住
下面这些命令非常实用。
查看运行中的容器
docker ps
查看所有容器
docker ps -a
查看镜像
docker images
启动容器
docker start 容器名
停止容器
docker stop 容器名
删除容器
docker rm 容器名
查看日志
docker logs -f 容器名
进入容器内部
docker exec -it 容器名 sh
如果容器里有 bash,也可以:
docker exec -it 容器名 bash
重启所有容器
docker restart $(docker ps -q)
十三、Docker 部署时的几个常见坑
1. 端口冲突
如果宿主机的 80 端口已经被 Nginx 占用,那么 Docker 容器就不能再绑定 80 端口。
解决方案:
- 查看占用端口
- 更换宿主机端口
- 统一用一个反向代理入口
查看端口占用:
ss -tulpn | grep :80
2. 权限问题
网站文件挂载到宿主机后,可能出现无法写入的问题。
尤其是 PHP 上传目录、缓存目录,很容易报权限错误。
可以检查目录权限:
ls -l
必要时调整:
chown -R www-data:www-data ./www
3. 数据库连接失败
常见原因:
- 数据库容器没启动
- 密码写错
DB_HOST配置错误- 网络名不对
在 Compose 里,容器间通信建议直接使用服务名,例如 mysql、db,不要写 127.0.0.1。
4. 容器启动后马上退出
这通常是:
- 程序配置有误
- 镜像命令执行失败
- 配置文件挂载错误
查看日志最关键:
docker logs -f 容器名
5. 升级后数据丢失
如果你把数据库写在容器内部,而没做数据卷挂载,升级镜像时就可能丢失数据。
所以,数据一定要挂载到宿主机。
十四、Docker 结合站长场景的实用建议
1. 一个站点一个目录
建议每个站点独立目录管理,例如:
/opt/site-a
/opt/site-b
/opt/site-c
这样后期维护清晰,不容易混乱。
2. 一个项目一个 Compose 文件
不要把所有站点都堆在一个 docker-compose.yml 里。
应该按项目拆分,便于迁移与维护。
3. 统一使用 .env 管理配置
敏感信息不要硬编码在 YAML 里,建议放到 .env 文件中:
MYSQL_ROOT_PASSWORD=xxxx
MYSQL_PASSWORD=xxxx
DOMAIN=blog.example.com
4. 生产环境尽量固定版本
不要长期使用 latest。
虽然 latest 启动方便,但升级不可控。
生产环境建议固定版本号,例如:
image: mysql:8.0.36
image: wordpress:6.5.3-php8.2-apache
5. 定期更新镜像
docker compose pull
docker compose up -d
更新前最好先备份。
十五、适合站长的 Docker 部署场景总结
Docker 适合的站长项目非常多,例如:
- WordPress 博客
- Typecho 轻博客
- Halo 静态博客系统
- 个人知识库
- 自建导航站
- 论坛程序
- Laravel / ThinkPHP 网站
- Python Flask / FastAPI 接口服务
- Node.js 中台系统
- Redis 缓存
- MySQL 数据库
- Nginx 反向代理
- 图床服务
- 下载站
- API 网关
几乎可以说,只要是网站服务,都能通过 Docker 做标准化部署。
十六、站长学习 Docker 的正确顺序
如果你是第一次接触 Docker,建议按这个顺序学习:
- 安装 Docker
- 运行单个容器
- 学会查看日志和进入容器
- 学会挂载目录
- 学会使用 Docker Compose
- 学会部署数据库
- 学会反向代理和域名配置
- 学会备份和恢复
- 学会更新镜像和版本控制
不要一上来就搞复杂编排,先把单站点跑通,再扩展到多站点。
十七、结语
对于站长而言,Docker 不是“炫技工具”,而是非常实用的生产力工具。
它解决的不是“能不能部署”,而是“能不能更快、更稳、更容易维护地部署”。
当你真正用 Docker 跑起第一个站点后,你会发现它的价值远不止“容器化”三个字:
- 新站上线更快
- 环境迁移更方便
- 服务升级更可控
- 故障排查更清晰
- 多站点管理更高效
如果你是个人站长,Docker 能帮你减少大量重复劳动;
如果你是多站运营者,Docker 能让你的部署流程标准化;
如果你是技术型站长,Docker 更是你构建自动化运维体系的基础。
建议你先从一个 WordPress 或 Typecho 项目开始,跑通 Docker Compose,再逐步扩展到数据库、缓存、Nginx 反代和自动备份。
只要掌握了这套思路,后续无论你更换服务器、扩展业务,还是批量搭建新站,都会轻松很多。
如果你愿意,我还可以继续帮你补一篇:
- 《Docker Compose 一键部署 WordPress 详细实战版》
- 《Docker 部署 Nginx + PHP + MySQL + Redis 全家桶》
- 《站长服务器 Docker 环境搭建教程(Ubuntu版)》
你只要回复标题,我可以直接继续写成可发布的完整文章。