Compose基础 #
什么是Docker Compose? #
Docker Compose是一个用于定义和运行多容器Docker应用的工具。通过Compose,你可以使用YAML文件配置应用的服务、网络和存储。
Compose的优势 #
text
┌─────────────────────────────────────────────────────┐
│ Docker Compose优势 │
├─────────────────────────────────────────────────────┤
│ │
│ 1. 单文件配置 - 所有服务配置在一个文件中 │
│ 2. 一键部署 - 一条命令启动所有服务 │
│ 3. 环境隔离 - 项目间网络隔离 │
│ 4. 变量替换 - 支持环境变量 │
│ 5. 服务依赖 - 自动处理启动顺序 │
│ 6. 开发便捷 - 本地开发环境标准化 │
│ │
└─────────────────────────────────────────────────────┘
安装Docker Compose #
Docker Desktop自带 #
Docker Desktop for Mac/Windows已内置Docker Compose。
Linux安装 #
bash
# 下载最新版本
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
使用Docker插件 #
bash
# Docker Compose V2 作为Docker插件
docker compose version
基本概念 #
项目(Project) #
一个Compose项目由一组相关服务组成,默认使用目录名作为项目名。
服务(Service) #
服务是应用的容器定义,可以包含多个容器实例。
docker-compose.yml #
yaml
version: '3.8' # Compose文件版本
services: # 服务定义
web:
image: nginx
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
基本命令 #
启动服务 #
bash
# 启动所有服务(后台运行)
docker-compose up -d
# 启动并构建
docker-compose up -d --build
# 启动指定服务
docker-compose up -d web
# 使用指定文件
docker-compose -f docker-compose.prod.yml up -d
停止服务 #
bash
# 停止所有服务
docker-compose stop
# 停止指定服务
docker-compose stop web
# 停止并删除容器
docker-compose down
# 停止并删除容器、网络、镜像
docker-compose down --rmi all
# 停止并删除容器、网络、卷
docker-compose down -v
查看状态 #
bash
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs
# 实时查看日志
docker-compose logs -f
# 查看指定服务日志
docker-compose logs web
进入容器 #
bash
# 进入容器
docker-compose exec web bash
# 以root用户进入
docker-compose exec -u root web bash
# 运行一次性命令
docker-compose run web ping db
其他命令 #
bash
# 查看服务配置
docker-compose config
# 查看服务镜像
docker-compose images
# 拉取镜像
docker-compose pull
# 构建镜像
docker-compose build
# 重启服务
docker-compose restart
# 暂停/恢复服务
docker-compose pause
docker-compose unpause
第一个Compose项目 #
项目结构 #
text
myapp/
├── docker-compose.yml
├── app/
│ └── index.html
└── nginx/
└── nginx.conf
docker-compose.yml #
yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./app:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
app:
image: node:18-alpine
working_dir: /app
volumes:
- ./app:/app
command: npm start
启动项目 #
bash
# 启动服务
docker-compose up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 访问应用
curl http://localhost:8080
# 停止服务
docker-compose down
常用配置示例 #
Web应用 + 数据库 #
yaml
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- php
php:
image: php:8.2-fpm-alpine
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
开发环境 #
yaml
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- .:/app
- /app/node_modules
ports:
- "3000:3000"
environment:
- NODE_ENV=development
command: npm run dev
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
postgres-data:
项目管理 #
项目名称 #
bash
# 使用-p指定项目名
docker-compose -p myproject up -d
# 或使用环境变量
COMPOSE_PROJECT_NAME=myproject docker-compose up -d
多环境配置 #
bash
# 开发环境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
环境变量文件 #
bash
# .env文件
COMPOSE_PROJECT_NAME=myapp
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=mydb
yaml
# docker-compose.yml
version: '3.8'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
小结 #
本节学习了Docker Compose的基础知识:
- Compose的概念和优势
- 安装和基本命令
- docker-compose.yml基本结构
- 简单项目示例
下一步 #
接下来,让我们学习 Compose文件详解,深入了解docker-compose.yml的配置语法。