Docker Compose 使用实例详解
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器,这篇文章主要介绍了Docker Compose 使用实例,需要的朋友可以参考下
一、Docker Compose 简介
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器。
二、安装 Docker Compose
Linux:
1 2 | sudo curl -L "https://mirrors.tuna.tsinghua.edu.cn/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose |
Windows/macOS:
通过 Docker Desktop 安装(已内置 Compose)
验证安装:
1 | docker-compose --version |
三、基础配置文件示例(docker-compose.yml)
version: '3.8' # Compose文件格式版本
services:
web:
build: . # 使用当前目录的Dockerfile构建
ports:
- "8000:80" # 主机端口:容器端口
depends_on:
- db
environment:
- DB_HOST=db
networks:
- mynetwork
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: myapp
networks:
- mynetwork
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h localhost"]
interval: 30s
timeout: 10s
retries: 3
volumes:
db_data:
networks:
mynetwork:
driver: bridge
四、关键配置解析
version:指定Compose文件格式版本(常用3.x)
services:定义服务(容器)
build:指定构建上下文路径(含Dockerfile)image:直接使用官方镜像ports:端口映射depends_on:服务依赖关系environment:环境变量设置volumes:数据卷定义(持久化存储)
networks:自定义网络配置
healthcheck:容器健康检查
五、常用命令
启动服务:
1 2 | docker-compose up -d # 后台启动docker-compose up --build # 重新构建后启动 |
停止服务:
1 2 | docker-compose down # 停止并删除容器、网络等docker-compose stop # 仅停止容器 |
查看日志:
1 2 | docker-compose logs -f # 实时查看日志docker-compose logs web # 查看指定服务日志 |
进入容器:
1 | docker-compose exec web bash # 进入web容器 |
构建镜像:
1 2 | docker-compose build # 构建所有服务镜像docker-compose build web # 仅构建web服务镜像 |
六、完整项目示例(Node.js + MySQL + Nginx)
项目结构:
1 2 3 4 5 6 7 8 9 10 | myapp/├── docker-compose.yml├── nginx/│ ├── nginx.conf│ └── Dockerfile├── app/│ ├── package.json│ ├── server.js│ └── Dockerfile└── .env |
docker-compose.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | version: '3.8'services: nginx: build: ./nginx ports: - "80:80" depends_on: - app networks: - frontend - backend app: build: ./app environment: - NODE_ENV=production - DB_HOST=db networks: - backend depends_on: db: condition: service_healthy db: image: mysql:8.0 volumes: - db_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password MYSQL_DATABASE: myapp secrets: - db_root_password networks: - backend healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] interval: 30s timeout: 10s retries: 3volumes: db_data:networks: frontend: backend:secrets: db_root_password: file: .env |
app/Dockerfile:
1 2 3 4 5 6 | FROM node:18-alpineWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .CMD ["npm", "start"] |
nginx/Dockerfile:
1 2 | FROM nginx:alpineCOPY nginx.conf /etc/nginx/conf.d/default.conf |
nginx/nginx.conf:
1 2 3 4 5 6 7 8 | server { listen 80; location / { proxy_pass http://app:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }} |
.env:
1 | DB_ROOT_PASSWORD=supersecret |
七、高级功能
扩展配置:
1 2 3 4 5 6 7 8 | # 扩展服务实例app: deploy: replicas: 3 resources: limits: cpus: '0.5' memory: 512M |
多环境配置:
1 2 3 4 5 6 7 8 9 | # docker-compose.override.yml(开发环境)version: '3.8'services: app: build: ./app volumes: - ./app:/app # 挂载代码目录实现热更新 environment: - NODE_ENV=development |
使用模板文件:
1 2 3 4 | # docker-compose.ymlservices: app: image: myapp:${TAG} |
八、最佳实践
使用
.env文件管理敏感信息为不同环境创建独立的Compose文件(如docker-compose.prod.yml)
使用健康检查确保服务启动顺序
对持久化数据使用命名卷
定期清理未使用的镜像和卷:
1 | docker system prune -a |
九、调试技巧
查看容器状态:
1 | docker-compose ps |
检查网络配置:
1 | docker network inspect mynetwork |
验证配置文件:
1 | docker-compose config |
到此这篇关于Docker Compose 使用实例的文章就介绍到这了,更多相关Docker Compose 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
本文链接:https://www.xuan5.com/news/article/109.html 文章声明:本站内容均来自网络收集,如有侵权请联系我们删除下架处理。文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,结果仅供参考,玄武统计所有文章均包含本声明。
