docker-compose学习笔记一 入门学习compose
Docker Compose 简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具,通过 YAML 文件(docker-compose.yml)描述服务、网络、存储等资源的配置,实现一键式环境部署。调用Docker服务提供的API来对容器进行管理。负责实现对Docker容器集群的快速编排。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
解决的问题
- 简化多容器应用的启动、停止和重建流程。
- 统一管理容器间的依赖关系和资源隔离。
- 支持环境变量配置,实现开发、测试、生产环境的一致性。
典型使用场景
| 使用场景 | 描述 |
|---|---|
| 本地开发环境 | - 快速启动包含前端、后端、数据库的完整环境。 - 支持热重载代码调试(如挂载宿主机的代码目录)。 |
| 自动化测试 | - 在 CI/CD 流水线中启动临时测试环境,运行集成测试。 |
| 微服务架构 | - 定义多个关联服务(API Gateway、Auth Ser展:异主容器互vice、Database 等)。 |
| 演示与教学 | - 一键部署复杂应用栈(如 WordPress + MySQL + Redis)。 |
扩展阅读
官方文档:https://docs.docker.com/compose/
最佳实践:https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
Compose 示例仓库:https://github.com/docker/awesome-compose
安装docker-compose
# echo "20.205.243.166 github.com" >> /etc/hosts
# curl -SL https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:31 --:--:-- 0
100 58.5M 100 58.5M 0 0 468k 0 0:02:07 0:02:07 --:--:-- 1079k
# chmod +x /usr/local/bin/docker-compose
# docker-compose --version
Docker Compose version v2.24.6
创建一个简单的compose文件
# docker-compose.yml
version: '3.8' # Compose 文件版本(推荐 3.8,兼容主流 Docker 版本)
services: # 定义所有服务
nginx: # 服务名(自定义)
image: nginx:alpine # 使用的镜像
ports: # 端口映射(宿主端口:容器端口)
- "8080:80"
restart: always # 容器退出后自动重启
二、核心知识点(重点必掌握)
1. 配置文件核心规则
-
文件名:默认
docker-compose.yml(必须,大小写敏感) -
版本:推荐
3.8(兼容 Docker 19.03+,版本需与Docker版本匹配,过高/过低会解析失败) -
YAML 语法(严格要求,新手最易踩坑):
-
缩进必须用 空格(2个或4个,统一风格),禁止用Tab
-
键值对冒号
:后面必须加空格(如image: nginx而非image:nginx) -
列表项
-后面必须加空格(如- "80:80")
-
-
服务名即DNS:同一网络内,服务之间可直接用「服务名」访问(无需记IP,如MySQL服务名是
mysql,后端配置DB_HOST=mysql即可连接)
2. 必背核心字段(yml文件核心)
| 字段 | 作用 | 示例 |
|---|---|---|
| services | 定义所有服务(容器),Compse核心节点 | services: nginx: image: nginx |
| image | 指定服务使用的官方/自定义镜像(优先使用) | image: nginx:alpineimage: mysql:8.0 |
| build | 基于本地Dockerfile构建镜像(替代image字段) | build: context: ./backend dockerfile: Dockerfile |
| ports | 端口映射(宿主机端口:容器端口),避免端口冲突 | ports: - “8080:80” - “3306:3306” |
| volumes | 数据持久化(避免容器删除数据丢失),分2种类型 | # 命名卷(推荐)volumes: mysql-data:services: mysql: volumes: - mysql-data:/var/lib/mysql# 绑定挂载(开发用) - ./html:/usr/share/nginx/html |
| environment | 设置环境变量(替代docker run -e),支持引用.env文件 | environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_DATABASE=demo_db |
| depends_on | 控制服务启动顺序(不保证服务就绪) | depends_on: - mysql - redis |
| healthcheck | 验证服务是否真正就绪(配合depends_on使用) | healthcheck: test: [“CMD”, “mysqladmin”, “ping”, “-h”, “localhost”] interval: 5s timeout: 5s retries: 5 |
| networks | 自定义网络,实现服务隔离(避免不同项目冲突) | networks: app-net: driver: bridge |
| restart | 容器重启策略(保证服务稳定性) | restart: always(始终重启)restart: on-failure(失败时重启) |
3. 环境变量配置(.env文件,企业级规范)
作用:分离敏感信息(密码、密钥),避免直接写在yml文件中,便于维护和切换环境。
步骤1:创建.env文件
# .env 文件内容(无需缩进,key=value格式)
MYSQL_ROOT_PASSWORD=root123
MYSQL_DATABASE=demo_db
APP_PORT=8080
REDIS_PWD=123456
步骤2:在docker-compose.yml中引用
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
ports:
- "${APP_PORT}:8080"
优先级:docker-compose up -e 临时变量 > .env文件 > environment字段 > Dockerfile ENV
4. 多环境配置(开发/生产分离)
核心:避免重复编写yml文件,用「基础配置+环境配置」拆分,灵活切换环境。
文件结构
-
docker-compose.yml:基础配置(通用部分,如服务名、数据卷、网络)
-
docker-compose.dev.yml:开发环境配置(暴露端口、调试模式、热更新)
-
docker-compose.prod.yml:生产环境配置(隐藏端口、资源限制、生产模式)
启动命令
# 启动开发环境
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
三、高频常用命令(必背,实战必备)
| 命令 | 作用 | 补充说明 |
|---|---|---|
| docker-compose up | 启动所有服务(前台运行) | Ctrl+C 可停止服务 |
| docker-compose up -d | 后台启动所有服务(推荐) | 启动后不占用终端 |
| docker-compose down | 停止并删除容器、网络 | 保留数据卷(安全) |
| docker-compose down -v | 停止并删除容器、网络、数据卷 | 谨慎使用,会丢失持久化数据 |
| docker-compose ps | 查看当前项目的容器状态 | 可快速查看服务是否正常运行 |
| docker-compose logs | 查看所有服务日志 | 排查服务启动失败问题 |
| docker-compose logs -f 服务名 | 实时查看指定服务日志 | 如 docker-compose logs -f backend |
| docker-compose exec 服务名 命令 | 进入容器执行命令 | 如 docker-compose exec mysql bash(进入MySQL容器) |
| docker-compose restart 服务名 | 重启指定服务 | 不重启其他无关服务 |
| docker-compose build | 构建/重新构建服务镜像 | 修改Dockerfile后必须执行 |
| docker-compose config | 验证yml配置文件语法是否正确 | 启动前先验证,避免语法错误 |
实战案例(可直接复制运行,覆盖核心场景)
案例1:基础版 - Nginx + 静态网页(快速上手)
目录结构
nginx-demo/
├── docker-compose.yml
└── html/
└── index.html
1. index.html(静态网页)
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Demo</title>
</head>
<body>
<h1>Hello Docker Compose!</h1>
</body>
</html>
2. docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:alpine # 轻量版Nginx,占用资源少
container_name: nginx-demo # 自定义容器名,便于识别
ports:
- "8080:80" # 宿主机8080端口映射容器80端口
volumes:
- ./html:/usr/share/nginx/html # 绑定挂载,本地修改实时生效
restart: always # 容器退出后自动重启
networks:
- nginx-net
networks:
nginx-net:
driver: bridge
3. 启动与验证
# 进入目录
cd nginx-demo
# 启动服务
docker-compose up -d
# 验证(浏览器访问 http://localhost:8080 或用curl)
curl http://localhost:8080
# 停止服务
docker-compose down
未完待续。。。下一篇章进阶实战
更多推荐




所有评论(0)