Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 106|回复: 0
打印 上一主题 下一主题

介绍一下 docker-compose 命令

[复制链接]

1319

主题

2129

帖子

8303

积分

认证用户组

Rank: 5Rank: 5

积分
8303
跳转到指定楼层
楼主
发表于 2025-3-2 23:08:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2025-3-2 23:17 编辑

以下是 docker-compose 的详细介绍,涵盖核心概念、常用命令、配置文件及实际应用场景,帮助你高效管理多容器应用。



1. docker-compose 是什么?
docker-compose Docker 官方的 容器编排工具,用于通过一个 YAML 文件(docker-compose.yml)定义和运行多个关联的容器。它简化了多容器应用的启动、停止和管理流程。
核心价值
· 一键启动多容器环境(如同时启动 Web 服务、数据库、缓存)。
· 声明式配置:所有容器参数集中在一个文件中,便于版本控制和复用。
· 依赖管理:自动处理容器间的启动顺序和网络连接。



2. 核心概念(1) docker-compose.yml 配置文件
定义容器组(称为 services)及其参数,例如:
version: "3.9"  # Compose 版本services:  web:                        # 服务名称    image: nginx:latest       # 使用镜像    ports:      - "80:80"               # 端口映射    volumes:      - ./html:/usr/share/nginx/html  # 挂载目录    depends_on:               # 依赖项      - db  db:    image: mysql:8.0    environment:              # 环境变量      MYSQL_ROOT_PASSWORD: secret
(2) 服务(Services)
每个服务对应一个容器,可以定义镜像、端口、卷、环境变量等参数。
(3) 网络(Networks)
默认自动创建专用网络,同一 Compose 文件中的容器可通过服务名互相通信(如 web 容器可通过 db 主机名访问数据库)。



3. 常用命令
命令
作用
docker-compose up
启动所有服务(前台运行)
docker-compose up -d
后台启动所有服务
docker-compose down
停止并删除所有容器、网络
docker-compose build
根据 Dockerfile 构建镜像
docker-compose start
启动已存在的容器
docker-compose stop
停止运行中的容器(不删除)
docker-compose logs
查看容器日志
docker-compose ps
列出运行中的容器
docker-compose exec <服务名> <命令>
在运行中的容器内执行命令(如进入 Shell)



4. 典型使用场景(1) 本地开发环境
一键启动包含数据库、消息队列、后端 API 的完整环境:
docker-compose up -d
(2) 微服务调试
通过 Compose 定义多个微服务及其依赖:
services:  frontend:    build: ./frontend  # 使用 Dockerfile 构建镜像    ports:      - "3000:3000"  backend:    build: ./backend    environment:      DB_URL: "postgres://db:5432"    depends_on:      - db  db:    image: postgres:14
(3) 持续集成(CI)
CI 流水线中使用 docker-compose 运行测试:
docker-compose up -ddocker-compose exec web pytest  # web 服务中运行测试docker-compose down



5. 配置文件详解(示例)
version: "3.9"
services:  web:    build: .                 # 基于当前目录的 Dockerfile 构建镜像    ports:      - "5000:5000"          # 端口映射(宿主机:容器)    environment:      FLASK_ENV: development    volumes:      - .:/code              # 挂载代码目录(实时同步修改)    depends_on:      - redis
  redis:    image: "redis:alpine"    volumes:      - redis_data:/data     # 命名卷持久化数据
volumes:  redis_data:                # 定义命名卷



6. 高级技巧(1) 多环境配置
通过 -f 指定不同配置文件,区分开发和生产环境:
# 开发环境docker-compose -f docker-compose.yml -f docker-compose.dev.yml up
# 生产环境docker-compose -f docker-compose.yml -f docker-compose.prod.yml up
(2) 变量替换
Compose 文件中使用环境变量:
services:  db:    image: "postgres{POSTGRES_VERSION:-14}"  # 默认值 14    environment:      POSTGRES_PASSWORD: ${DB_PASSWORD}
运行前设置变量:
export DB_PASSWORD=secretdocker-compose up
(3) 扩展配置
使用 extends 复用配置:
services:  web:    extends:      file: common-services.yml      service: webapp



7. 注意事项
· 版本兼容性:不同 Compose 版本支持的功能不同(如 version: "3.9" 对应 Docker Engine 20.10.0+)。
· Docker Swarm 区别docker-compose 适用于单机环境,生产集群建议使用 Kubernetes Docker Swarm
· 资源限制:可在配置中限制 CPU/内存:
services:  web:    deploy:      resources:        limits:          cpus: "0.5"          memory: 512M
·



8. 实战示例:启动 WordPress
version: "3.9"
services:  wordpress:    image: wordpress:latest    ports:      - "8080:80"    environment:      WORDPRESS_DB_HOST: db      WORDPRESS_DB_USER: root      WORDPRESS_DB_PASSWORD: secret    depends_on:      - db
  db:    image: mysql:8.0    environment:      MYSQL_ROOT_PASSWORD: secret      MYSQL_DATABASE: wordpress    volumes:      - mysql_data:/var/lib/mysql
volumes:  mysql_data:
运行:
docker-compose up -d
访问 http://localhost:8080 即可初始化 WordPress



docker-compose 是开发、测试和部署多容器应用的利器,通过声明式配置显著提升效率。建议结合 官方文档 深入学习更多功能!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2025-4-5 00:00 , Processed in 0.075648 second(s), 26 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表