当前位置: 首页 > ai >正文

Docker Compose 使用实例

文章目录

      • 一、Docker Compose 简介
      • 二、安装 Docker Compose
      • 三、基础配置文件示例(docker-compose.yml)
      • 四、关键配置解析
      • 五、常用命令
      • 六、完整项目示例(Node.js + MySQL + Nginx)
      • 七、高级功能
      • 八、最佳实践
      • 九、调试技巧

一、Docker Compose 简介

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件配置应用程序服务,一键启动所有关联容器。

二、安装 Docker Compose

  1. Linux
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-compose
sudo chmod +x /usr/local/bin/docker-compose
  1. Windows/macOS
    通过 Docker Desktop 安装(已内置 Compose)

验证安装:

docker-compose --version

三、基础配置文件示例(docker-compose.yml)

version: '3.8'  # Compose文件格式版本services:web:build: .  # 使用当前目录的Dockerfile构建ports:- "8000:80"  # 主机端口:容器端口depends_on:- dbenvironment:- DB_HOST=dbnetworks:- mynetworkdb:image: mysql:8.0volumes:- db_data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: myappnetworks:- mynetworkhealthcheck:test: ["CMD-SHELL", "mysqladmin ping -h localhost"]interval: 30stimeout: 10sretries: 3volumes:db_data:networks:mynetwork:driver: bridge

四、关键配置解析

  1. version:指定Compose文件格式版本(常用3.x)
  2. services:定义服务(容器)
    • build:指定构建上下文路径(含Dockerfile)
    • image:直接使用官方镜像
    • ports:端口映射
    • depends_on:服务依赖关系
    • environment:环境变量设置
  3. volumes:数据卷定义(持久化存储)
  4. networks:自定义网络配置
  5. healthcheck:容器健康检查

五、常用命令

  1. 启动服务
docker-compose up -d  # 后台启动
docker-compose up --build  # 重新构建后启动
  1. 停止服务
docker-compose down  # 停止并删除容器、网络等
docker-compose stop  # 仅停止容器
  1. 查看日志
docker-compose logs -f  # 实时查看日志
docker-compose logs web  # 查看指定服务日志
  1. 进入容器
docker-compose exec web bash  # 进入web容器
  1. 构建镜像
docker-compose build  # 构建所有服务镜像
docker-compose build web  # 仅构建web服务镜像

六、完整项目示例(Node.js + MySQL + Nginx)

  1. 项目结构
myapp/
├── docker-compose.yml
├── nginx/
│   ├── nginx.conf
│   └── Dockerfile
├── app/
│   ├── package.json
│   ├── server.js
│   └── Dockerfile
└── .env
  1. docker-compose.yml
version: '3.8'services:nginx:build: ./nginxports:- "80:80"depends_on:- appnetworks:- frontend- backendapp:build: ./appenvironment:- NODE_ENV=production- DB_HOST=dbnetworks:- backenddepends_on:db:condition: service_healthydb:image: mysql:8.0volumes:- db_data:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_passwordMYSQL_DATABASE: myappsecrets:- db_root_passwordnetworks:- backendhealthcheck:test: ["CMD-SHELL", "mysqladmin ping -h localhost"]interval: 30stimeout: 10sretries: 3volumes:db_data:networks:frontend:backend:secrets:db_root_password:file: .env
  1. app/Dockerfile
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["npm", "start"]
  1. nginx/Dockerfile
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
  1. nginx/nginx.conf
server {listen 80;location / {proxy_pass http://app:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}
}
  1. .env
DB_ROOT_PASSWORD=supersecret

七、高级功能

  1. 扩展配置
# 扩展服务实例
app:deploy:replicas: 3resources:limits:cpus: '0.5'memory: 512M
  1. 多环境配置
# docker-compose.override.yml(开发环境)
version: '3.8'
services:app:build: ./appvolumes:- ./app:/app  # 挂载代码目录实现热更新environment:- NODE_ENV=development
  1. 使用模板文件
# docker-compose.yml
services:app:image: myapp:${TAG}

八、最佳实践

  1. 使用.env文件管理敏感信息
  2. 为不同环境创建独立的Compose文件(如docker-compose.prod.yml)
  3. 使用健康检查确保服务启动顺序
  4. 对持久化数据使用命名卷
  5. 定期清理未使用的镜像和卷:
docker system prune -a

九、调试技巧

  1. 查看容器状态:
docker-compose ps
  1. 检查网络配置:
docker network inspect mynetwork
  1. 验证配置文件:
docker-compose config
http://www.xdnf.cn/news/787.html

相关文章:

  • 【漫话机器学习系列】214.停用词(Stop Words)
  • 查看MAC 地址以及简单了解
  • CHAPTER 11 A Pythonic Object
  • 定期检查滚珠丝杆的频率是多久?
  • Rust: 从内存地址信息看内存布局
  • OpenCV 图形API(44)颜色空间转换-----将图像从 BGR 色彩空间转换为 RGB 色彩空间函数BGR2RGB()
  • XMC4800 芯片深度解读:架构、特性、应用与开发指南
  • OpenCV中的图像旋转方法详解
  • 特征选择与类不平衡处理
  • aws服务--S3介绍使用代码集成
  • Missashe考研日记-day23
  • 在Ubuntu下用Chrony做主从机时间同步
  • 栈和字符串,力扣.43.字符串相乘力扣1047.删除字符串中的所有相邻重复项力扣.844比较含退格的字符串力扣227.基本计算器II
  • 《马尼拉》桌游期望计算器
  • Ubuntu下展锐刷机工具spd_dump使用说明
  • Python3网络爬虫开发--爬虫基础
  • Java 设计模式心法之第4篇 - 单例 (Singleton) 的正确打开方式与避坑指南
  • 每天学一个 Linux 命令(30):cut
  • 【React】搜索时高亮被搜索选中的文案
  • 大数据系列 | 详解基于Zookeeper或ClickHouse Keeper的ClickHouse集群部署--完结
  • TensorFlow和PyTorch学习原理解析
  • 掌握常见 HTTP 方法:GET、POST、PUT 到 CONNECT 全面梳理
  • FreeRTos学习记录--2.内存管理
  • 华为云获取IAM用户Token的方式及适用分析
  • 潞晨科技将暂停DeepSeek API服务,AI大模型技术红利普惠化与市场竞争白热化叠加,内卷恶果,开始显现!
  • 在线查看【免费】 dcm、drawio,dcm wps文件格式网站
  • Spring Boot集成Keycloak
  • 颠覆传统!毫秒级响应的跨平台文件同步革命,远程访问如本地操作般丝滑
  • 从“堆料竞赛”到“体验深耕”,X200 Ultra和X200s打响手机价值升维战
  • 【锂电池容量特征提取】NASA数据集锂电池容量特征提取(Matlab完整源码)