❧ Docker-Compose完整教程
一、Docker Compose 定义
Docker Compose 通过一个单独的 docker-compose.yml 模板文牛(YAML 格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的 Docker 容器的快速部署。

二、Docker Compose 命令
docker-compose [options] [command]| 类型 | 参数或指令 | 说明 |
|---|---|---|
| Options | -f, —file FILE | 指定 docker-compose.yml 文件路径 |
| Options | -p, --project-name NAME | 指定项目名称 |
| Options | —verbose | 显示更多输出信息 |
| Options | -h, —help | 显示帮助信息 |
| Command | up | 创建并启动所有容器 |
| Command | down | 停止并删除所有容器 |
| Command | ps | 列出所有启动的容器 |
| Command | logs | 查看指定容器日志 |
| Command | exec | 在运行中的容器中执行命令 |
| Command | start | 启动所有容器 |
| Command | stop | 停止所有容器 |
| Command | restart | 重启所有容器 |
| Command | kill | 强制停止所有容器 |
| Command | scale | 设置容器数量 |
| Command | top | 显示容器进程信息 |
| Command | config | 验证 docker-compose.yml 文件 |
| Command | build | 构建或重新构建服务 |
| Command | commit | 创建一个新的镜像,从容器的更改中创建 |
| Command | volumes | 列出所有卷 |
| Command | pull | 拉取服务镜像 |
| Command | push | 推送服务镜像 |
| Command | version | 显示docker-compose版本信息 |
三、Docker-compose.yml 配置文件
# Docker Compose 完整示例version: '3.8' # 声明Compose文件版本
services: # Web应用服务 web: # 构建配置 build: context: . # 构建上下文,当前目录 dockerfile: Dockerfile.dev # 自定义Dockerfile名称 args: # 构建参数 - APP_HOME=app container_name: web_app # 自定义容器名称
# 基于现有镜像构建(二选一,这里注释掉了) # image: remote-registry:4000/web:latest
# 端口配置 ports: - "8080:80" # 宿主机端口8080映射到容器端口80 - "6379" # 容器端口6379,宿主机会随机分配端口 expose: - "3000" # 暴露端口给同一网络的容器,不暴露给宿主机
# 环境变量配置 environment: - MODE=development - SHOW=true env_file: - .env # 从.env文件加载环境变量 - ./common.env - ./apps/web.env
# 命令和入口点 entrypoint: /code/entrypoint.sh # 容器启动入口点 command: bundle exec thin -p 3000 # 容器启动后执行的命令 # command: ['/bin/bash', 'start.sh'] # 另一种命令格式
# 网络配置 networks: - frontend - backend
# 卷配置 volumes: - .:/code # 挂载当前目录到容器的/code目录 - static_volume:/app/static # 挂载命名卷
# 依赖关系 depends_on: - db - redis
# 外部链接(连接到docker-compose.yml外的容器) external_links: - redis_1 - project_db_1:mysql
# 数据库服务 db: image: postgres:latest # 使用官方PostgreSQL镜像 container_name: postgres_db
# 网络配置 networks: - backend
# 卷配置 volumes: - postgres_data:/var/lib/postgresql/data # 使用命名卷存储数据 - ./init.sql:/docker-entrypoint-initdb.d/init.sql # 初始化SQL脚本
# Redis服务 redis: image: redis:alpine # 使用轻量级的Redis镜像 container_name: redis_cache
# 网络配置 networks: - backend
# 网络定义networks: frontend: driver: bridge # 使用bridge驱动 backend: driver: bridge
# 外部网络(已经存在的网络) default: external: name: my-pre-existing-network
# 卷定义volumes: postgres_data: # 存储PostgreSQL数据的命名卷 static_volume: # 存储静态文件的命名卷