Docker Compose 常见示例
通过以下几个常见示例,进一步熟悉 docker-compose.yam
- WordPress + MySQL:适合快速搭建博客或网站。
- Node.js + MongoDB:适合现代 Web 应用。
- Nginx + PHP-FPM + MySQL:适合传统 PHP 应用。
- ELK 栈:适合日志收集和分析。
- Jenkins + Nginx:适合 CI/CD 环境。
示例 1:WordPress + MySQL
部署一个 WordPress 网站,并使用 MySQL 作为数据库。
docker-compose.yml
version: '3.8'
services:
# MySQL 服务
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql # 持久化 MySQL 数据
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpresspass
networks:
- app_network
# WordPress 服务
wordpress:
image: wordpress:latest
ports:
- "8080:80" # 将 WordPress 的 80 端口映射到主机的 8080 端口
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspass
WORDPRESS_DB_NAME: wordpress
depends_on:
- db # 依赖 MySQL 服务
networks:
- app_network
# 定义数据卷
volumes:
db_data:
# 定义网络
networks:
app_network:
driver: bridge
示例 2:Node.js + MongoDB
部署一个 Node.js 应用,并使用 MongoDB 作为数据库。
docker-compose.yml
version: '3.8'
services:
# MongoDB 服务
mongo:
image: mongo:latest
ports:
- "27017:27017" # 将 MongoDB 的 27017 端口映射到主机
volumes:
- mongo_data:/data/db # 持久化 MongoDB 数据
networks:
- app_network
# Node.js 服务
app:
build: . # 使用当前目录下的 Dockerfile 构建镜像
ports:
- "3000:3000" # 将 Node.js 的 3000 端口映射到主机
environment:
MONGO_URL: mongodb://mongo:27017/mydb
depends_on:
- mongo # 依赖 MongoDB 服务
networks:
- app_network
# 定义数据卷
volumes:
mongo_data:
# 定义网络
networks:
app_network:
driver: bridge
示例 3:Nginx + PHP-FPM + MySQL
部署一个 Nginx + PHP-FPM 的 Web 应用,并使用 MySQL 作为数据库。
docker-compose.yml
version: '3.8'
services:
# MySQL 服务
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql # 持久化 MySQL 数据
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: myapp
MYSQL_USER: myapp
MYSQL_PASSWORD: myapppass
networks:
- app_network
# PHP-FPM 服务
php:
build: ./php # 使用 ./php 目录下的 Dockerfile 构建镜像
volumes:
- ./src:/var/www/html # 挂载应用代码
networks:
- app_network
# Nginx 服务
web:
image: nginx:alpine
ports:
- "80:80" # 将 Nginx 的 80 端口映射到主机
volumes:
- ./src:/var/www/html # 挂载应用代码
- ./nginx.conf:/etc/nginx/nginx.conf # 挂载自定义 Nginx 配置
depends_on:
- php # 依赖 PHP-FPM 服务
networks:
- app_network
# 定义数据卷
volumes:
db_data:
# 定义网络
networks:
app_network:
driver: bridge
示例 4:ELK 栈(Elasticsearch + Logstash + Kibana)
部署一个 ELK 栈,用于日志收集和分析。
docker-compose.yml
version: '3.8'
services:
# Elasticsearch 服务
elasticsearch:
image: elasticsearch:7.10.1
ports:
- "9200:9200" # 将 Elasticsearch 的 9200 端口映射到主机
environment:
discovery.type: single-node
volumes:
- es_data:/usr/share/elasticsearch/data # 持久化 Elasticsearch 数据
networks:
- elk_network
# Logstash 服务
logstash:
image: logstash:7.10.1
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf # 挂载 Logstash 配置
depends_on:
- elasticsearch # 依赖 Elasticsearch 服务
networks:
- elk_network
# Kibana 服务
kibana:
image: kibana:7.10.1
ports:
- "5601:5601" # 将 Kibana 的 5601 端口映射到主机
depends_on:
- elasticsearch # 依赖 Elasticsearch 服务
networks:
- elk_network
# 定义数据卷
volumes:
es_data:
# 定义网络
networks:
elk_network:
driver: bridge
示例 5:Jenkins + Nginx
部署 Jenkins 并使用 Nginx 作为反向代理。
docker-compose.yml
version: '3.8'
services:
# Jenkins 服务
jenkins:
image: jenkins/jenkins:lts
ports:
- "8080:8080" # 将 Jenkins 的 8080 端口映射到主机
volumes:
- jenkins_data:/var/jenkins_home # 持久化 Jenkins 数据
networks:
- app_network
# Nginx 服务
nginx:
image: nginx:alpine
ports:
- "80:80" # 将 Nginx 的 80 端口映射到主机
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf # 挂载自定义 Nginx 配置
depends_on:
- jenkins # 依赖 Jenkins 服务
networks:
- app_network
# 定义数据卷
volumes:
jenkins_data:
# 定义网络
networks:
app_network:
driver: bridge