Docker Compose 常用模板
模板 1:Web 项目(Nginx + 静态网站)
# 最简模板:用 Nginx 托管静态网页
services:
web:
image: nginx:alpine # 轻量级 Web 服务器
ports:
- "80:80" # 宿主机80端口 → 容器80端口(访问网站用)
volumes:
- ./html:/usr/share/nginx/html # 把当前目录的 html 文件夹挂载到网站根目录
# 修改本地 html 文件,浏览器实时生效(热更新)使用场景:部署静态网站、前端打包后的 dist 目录
模板 2:Web + 数据库(最常用)
# 通用 Web 应用模板:应用 + MySQL
services:
# ---------- 应用服务 ----------
app:
image: nginx:alpine # 换成你自己的镜像
ports:
- "8080:80" # 访问 http://IP:8080
depends_on:
- db # 先启动数据库再启动应用
# 如果是自己构建的镜像,用下面这行替代 image:
# build: .
# ---------- 数据库服务 ----------
db:
image: mysql:8.0 # MySQL 数据库
environment:
MYSQL_ROOT_PASSWORD: 123456 # root 密码(必填)
MYSQL_DATABASE: myapp # 自动创建数据库(可选)
volumes:
- db_data:/var/lib/mysql # 数据持久化(重启不丢失)
volumes:
db_data: # 声明数据卷使用场景:大多数需要数据库的 Web 应用
模板 3:从源码构建(Python/Node/Java)
# 从 Dockerfile 构建镜像并运行
services:
app:
build: . # 使用当前目录的 Dockerfile 构建
ports:
- "3000:3000"
volumes:
- .:/app # 挂载源码 → 修改代码实时生效(开发模式)
environment:
- NODE_ENV=development # 环境变量(代码里用 process.env.NODE_ENV 读取)使用场景:开发环境、自己写的应用
模板 4:LNMP(Nginx + PHP + MySQL)
# PHP 网站经典架构
services:
# ---------- Nginx(Web 服务器) ----------
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html # 网站代码
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro # Nginx 配置(只读)
depends_on:
- php
# ---------- PHP(处理动态请求) ----------
php:
image: php:8.2-fpm-alpine # PHP-FPM 版本
volumes:
- ./html:/usr/share/nginx/html # 和 Nginx 共享代码目录
# 如果需要 MySQL 扩展,用 build 方式:
# build: ./php
# ---------- MySQL(数据库) ----------
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:使用场景:WordPress、ThinkPHP、Laravel 等 PHP 项目
模板 5:前后端分离
# 前端(Vue/React)+ 后端(Node/Java)+ 数据库
services:
# ---------- 前端 ----------
frontend:
build: ./frontend # 前端项目目录(有 Dockerfile)
ports:
- "80:80" # 浏览器访问
# ---------- 后端 API ----------
backend:
build: ./backend # 后端项目目录
ports:
- "3000:3000" # API 接口地址
environment:
- DB_HOST=mongo # 数据库地址(用服务名访问)
depends_on:
- mongo
# ---------- 数据库 ----------
mongo:
image: mongo:7
volumes:
- mongo_data:/data/db
volumes:
mongo_data:使用场景:Vue/React + Node.js/Spring Boot + MongoDB/MySQL
模板 6:一键部署 WordPress
# 最流行的博客系统
services:
wordpress:
image: wordpress:latest
ports:
- "8000:80" # http://IP:8000 访问
environment:
WORDPRESS_DB_HOST: db:3306 # 数据库地址(服务名:端口)
WORDPRESS_DB_USER: wordpress # 数据库用户名
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html # 插件/主题文件持久化
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
volumes:
wp_data:
db_data:使用场景:快速搭建博客、内容管理系统
模板 7:应用 + Redis 缓存
# 需要缓存的 Web 应用
services:
app:
build: .
ports:
- "8080:8080"
environment:
- REDIS_HOST=redis # 代码里用这个地址连接 Redis
depends_on:
- redis
redis:
image: redis:7-alpine # 轻量级缓存数据库
volumes:
- redis_data:/data # 缓存数据持久化(可选)
# 如果有密码:
# command: redis-server --requirepass mypassword
volumes:
redis_data:使用场景:Session 存储、接口缓存、消息队列
模板 8:微服务多应用
# 多个独立服务协同工作
services:
# ---------- 用户服务 ----------
user-service:
build: ./user-service
ports:
- "8001:8080"
environment:
- DB_HOST=mysql-user
# ---------- 订单服务 ----------
order-service:
build: ./order-service
ports:
- "8002:8080"
environment:
- DB_HOST=mysql-order
# ---------- 网关 ----------
gateway:
build: ./gateway
ports:
- "80:8080" # 统一入口
# ---------- 共享数据库 ----------
mysql-user:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
mysql-order:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123使用场景:微服务架构、多模块项目
核心配置速查(复制即用)
1. 端口映射
ports:
- "8080:80" # 宿主机端口:容器端口2. 环境变量
environment:
- DB_HOST=db
- DB_PASSWORD=${DB_PASSWORD} # 从 .env 文件读取(不硬编码密码)3. 数据持久化
volumes:
- ./data:/app/data # 宿主机目录:容器目录(开发常用)
- db_data:/var/lib/mysql # 命名卷(生产推荐)4. 启动顺序
depends_on:
- db # 等 db 启动后再启动当前服务
# 注意:只控制启动顺序,不等待服务就绪5. 重启策略
restart: unless-stopped # 挂了自动重启(推荐)
restart: always # 总是重启6. 构建镜像
build: . # 使用当前目录 Dockerfile
build: ./backend # 使用指定目录 Dockerfile.env 文件(存放敏感信息)
# .env(和 docker-compose.yml 放在同一目录)
# 在 yml 中用 ${变量名} 引用
DB_PASSWORD=your_password_here
JWT_SECRET=your_secret_key
REDIS_PASSWORD=redis_pass# docker-compose.yml 中引用
environment:
- DB_PASSWORD=${DB_PASSWORD}常用命令速查
# 启动(最常用)
docker compose up -d
# 启动 + 重新构建
docker compose up -d --build
# 停止并清理容器
docker compose down
# 查看运行状态
docker compose ps
# 查看日志
docker compose logs -f
# 进入容器(调试)
docker compose exec app sh # app 是服务名
# 重启某个服务
docker compose restart app
# 验证配置文件语法
docker compose config
原创
Docker Compose 常用模板
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法