一键部署:使用 Docker Compose 标准模板高效起服
别再手动敲几十行 `docker run` 参数了,那是给自己找坑。用 Docker Compose 标准模板,十分钟搞定一套 LNMP 或 LAMP 环境,还能随时迁移。主机选这篇 Linux 教程,直接给你一套能复用的样板,改几个参数就能上线。

为什么你该用 Docker Compose 而不是 docker run
单机跑服务,用 `docker run` 加一堆 `-v`、`-p`、`–link` 参数,能撑住几个容器?一旦服务器重启,你还得手动重建。Compose 用 YAML 文件声明所有服务,一条 `docker-compose up -d` 全部拉起,日志、网络、依赖顺序全搞定。
老手才知道的坑:docker run 的端口映射容易冲突
比如你跑 WordPress,需要映射 80 和 443,再用 `–link` 连 MySQL。万一哪天 MySQL 容器挂了重建,IP 变了,WordPress 就断连。Compose 自带 DNS 解析,服务名就是域名,容器重启后自动连上。
标准模板结构:LNMP 环境一键部署
下面这套模板我用了三年,从阿里云到腾讯云,从 1C1G 到 4C8G 的 VPS 都跑过。直接复制到服务器上,改几个环境变量就能用。
docker-compose.yml 文件放在 /opt/lnmp/ 目录下
version: '3.8'
services:
nginx:
image: nginx:alpine
container_name: lnmp-nginx
ports:
– "80:80"
– "443:443"
volumes:
– ./www:/var/www/html # 网站文件挂载点
– ./nginx/conf.d:/etc/nginx/conf.d # 自定义 Nginx 配置
depends_on:
– php
networks:
– lnmp-net
php:
image: php:8.1-fpm-alpine
container_name: lnmp-php
volumes:
– ./www:/var/www/html
environment:
– PHP_MAX_EXECUTION_TIME=300
networks:
– lnmp-net
mysql:
image: mysql:8.0
container_name: lnmp-mysql
ports:
– "3306:3306"
volumes:
– ./mysql-data:/var/lib/mysql # 数据库持久化
environment:
MYSQL_ROOT_PASSWORD: your_root_pw # 改成你自己的密码
MYSQL_DATABASE: wordpress
networks:
– lnmp-net
networks:
lnmp-net:
driver: bridge
启动命令与注意事项
进入项目目录
cd /opt/lnmp
一键拉起所有服务,-d 表示后台运行
docker-compose up -d
检查服务状态,看有没有容器 Exited
docker-compose ps
如果某个服务启动失败,看日志定位问题,比如 Nginx 配置写错了
docker-compose logs nginx
万一报错了别慌,先看日志。八成是端口被占用或目录权限不对。比如 80 端口被 host 的 Apache 占用了,改 Compose 里的端口映射为 `8080:80` 就行。
一键部署 WordPress 实战
有了 LNMP 模板,部署 WordPress 就是改几个参数的事。把上面模板里的 `nginx` 服务加上 WordPress 专用配置,再挂载一个 `wordpress` 目录即可。
快速起服步骤
1. 创建项目目录
mkdir -p /opt/wordpress && cd /opt/wordpress
2. 下载官方 docker-compose.yml(参考上面模板,把 www 改成 wordpress 目录)
wget https://example.com/docker-compose.yml # 实际用你自己的模板
3. 创建 Nginx 配置目录
mkdir -p nginx/conf.d
4. 写一个简单的 WordPress Nginx 配置
cat > nginx/conf.d/wordpress.conf << 'EOF'
server {
listen 80;
server_name yourdomain.com; # 改成你的域名
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
5. 启动
docker-compose up -d
访问 `http://你的IP`,WordPress 安装界面就出来了。数据库主机填 `mysql`(服务名),用户名 root,密码填你设置的。
老鸟叮嘱:数据持久化与备份
数据挂载卷(volumes)一定要用绝对路径或相对路径,别用匿名卷。匿名卷在 `docker-compose down` 后会被删掉,数据全丢。我见过有人跑了一年的数据库,就因为手滑执行了 `docker-compose down -v`,数据全没了。
正确做法:用 `./mysql-data:/var/lib/mysql` 这种挂载方式,数据在宿主机目录里,即使容器删了,数据还在。定期备份 `./mysql-data` 目录就行。
FAQ
Q1: Linux 上 Docker Compose 安装后找不到命令?
A: 安装 Docker 后,Compose 可能不是默认带的。用 `sudo apt install docker-compose` 或下载二进制文件:`sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose`。
Q2: VPS 防火墙端口放行后还是访问不了是什么原因?
A: 先检查宿主机防火墙(iptables/ufw),再检查 Docker 的端口映射是否生效:`docker-compose ps`。如果映射显示 `0.0.0.0:80->80/tcp` 但访问不了,可能是 Nginx 配置里的监听端口写错了,或者 WordPress 目录权限不对。
Q3: Docker Compose 模板里 `depends_on` 能保证 MySQL 先启动吗?
A: 不能保证 MySQL 完全就绪,只能保证容器启动顺序。如果 WordPress 连 MySQL 时 MySQL 还没准备好,会报连接拒绝。解决方案:在 WordPress 启动脚本里加一个等待 MySQL 就绪的循环,或者用 `dockerize` 工具。
Q4: 一键部署后,如何升级 PHP 版本?
A: 修改 `docker-compose.yml` 里的 `image: php:8.1-fpm-alpine` 为 `php:8.2-fpm-alpine`,然后执行 `docker-compose up -d` 重建。注意检查 PHP 扩展是否兼容,比如某些旧插件可能不支持 PHP 8.2。
Q5: 数据库密码写在 YAML 文件里安全吗?
A: 不安全。生产环境建议用环境变量文件 `.env`,在 `docker-compose.yml` 里引用 `MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}`,然后 `.env` 文件设置权限 `chmod 600`。或者用 Docker Secrets 管理敏感信息。
Q6: 多个项目用同一个 Docker Compose 模板,端口冲突怎么办?
A: 每个项目用不同的端口映射,比如项目 A 用 `8080:80`,项目 B 用 `8081:80`。或者用反向代理(如 Nginx Proxy Manager)统一管理域名和端口,这样所有项目都用 80/443 端口,通过域名区分。
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9505.html 商家投稿邮箱:zhujixuanblog@qq.com
