Docker Compose 的作用
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它解决了以下问题:
- 简化多容器应用的部署和管理
- 统一管理容器间的网络通信
- 协调多个服务的启动顺序
- 提供一键启动/停止整个应用栈的能力
docker-compose.yaml 的作用
docker-compose.yaml
是 Docker Compose 的配置文件,用于:主要功能:
- 定义服务架构:描述整个应用由哪些服务组成
- 配置服务关系:定义服务间的依赖、网络连接
- 统一管理:一个文件管理所有容器的配置
示例:
version: '3.8' services: web: build: . ports: - "8000:80" depends_on: - db environment: - DATABASE_URL=postgresql://user:pass@db:5432/mydb db: image: postgres:13 environment: - POSTGRES_DB=mydb - POSTGRES_USER=user - POSTGRES_PASSWORD=pass volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data:
Dockerfile 的作用
Dockerfile
是用于构建单个镜像的指令文件:主要功能:
- 定义镜像构建过程:从基础镜像开始,逐步构建自定义镜像
- 安装依赖:安装应用所需的软件包、依赖
- 配置运行环境:设置环境变量、工作目录等
示例:
FROM node:16-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["npm", "start"]
两者的关系
┌─────────────────┐ ┌──────────────────────┐ │ Dockerfile │────▶│ Docker Image │ │ (构建单个镜像) │ │ (单个服务的镜像) │ └─────────────────┘ └──────────────────────┘ │ ▼ ┌─────────────────┐ ┌──────────────────────┐ │docker-compose │────▶│ Multi-Container │ │.yaml │ │ Application │ │(编排多个服务) │ │ (完整的应用系统) │ └─────────────────┘ └──────────────────────┘
实际工作流程
- 开发阶段:编写
Dockerfile
定义各个服务的镜像
- 集成阶段:编写
docker-compose.yaml
定义服务间关系
- 部署阶段:使用
docker-compose up
一键启动整个应用
常用命令:
# 启动所有服务 docker-compose up # 后台启动 docker-compose up -d # 停止所有服务 docker-compose down # 重新构建并启动 docker-compose up --build
总结:Dockerfile 负责"做蛋糕",docker-compose.yaml 负责"摆餐桌" - 前者定义单个服务如何构建,后者定义多个服务如何协同工作。