Docker Compose介绍
-
定义 Docker 官方单机多容器编排工具 ,通过
docker-compose.yml统一管理多个容器。 -
作用 告别一堆
docker run命令,一条命令批量启动 / 停止 / 重启多个服务(Nginx、MySQL、Redis 等)。 -
核心优势
- 统一配置、一键部署
- 自动创建网络,容器内部用服务名互相访问
- 支持目录挂载、数据持久化、自启动
docker compse安装
bash
# 1. 下载最新版 compose v2 二进制文件
curl -L "https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2. 加执行权限(必须)
sudo chmod +x /usr/local/bin/docker-compose
# 3. 软链接到 docker cli 插件目录
sudo ln -s /usr/local/bin/docker-compose /usr/libexec/docker/cli-plugins/docker-compose
# 4. 验证
docker compose version
Docker Compose 高频常用命令清单
一、项目启停(最核心)
| 命令 | 作用 |
|---|---|
docker compose up -d |
后台启动所有服务(最常用) |
docker compose up -d --build |
构建镜像并后台启动(修改 Dockerfile 后用) |
docker compose up -d 服务名 |
只启动 / 重建指定服务(如 nginx) |
docker compose stop |
停止所有容器(不删除) |
docker compose stop 服务名 |
停止单个服务 |
docker compose start |
启动已停止的容器 |
docker compose restart |
重启所有服务 |
docker compose restart 服务名 |
重启单个服务 |
docker compose down |
停止并删除容器、网络 |
docker compose down -v |
停止并删除容器 + 网络 + 数据卷(清空数据,慎用) |
二、查看状态与日志(排查问题必备)
| 命令 | 作用 |
|---|---|
docker compose ps |
查看当前项目所有容器状态 |
docker compose ps -a |
查看所有状态(含已停止)的容器 |
docker compose logs |
查看所有服务的日志 |
docker compose logs -f |
实时跟踪日志(类似 tail -f) |
docker compose logs -f 服务名 |
只跟踪指定服务的日志 |
docker compose logs --tail=100 |
只看最后 100 行日志 |
三、镜像管理
| 命令 | 作用 |
|---|---|
docker compose build |
构建所有服务的镜像 |
docker compose build 服务名 |
构建指定服务的镜像 |
docker compose pull |
拉取所有服务配置的镜像 |
docker compose pull 服务名 |
拉取指定服务的镜像 |
docker compose images |
列出当前项目用到的所有镜像 |
四、进入容器执行命令
| 命令 | 作用 |
|---|---|
docker compose exec 服务名 bash |
进入容器(Linux 镜像) |
docker compose exec 服务名 sh |
进入容器(Alpine 轻量镜像) |
docker compose exec 服务名 命令 |
在容器内执行一次性命令 |
docker compose exec mysql mysql -uroot -p |
示例:直接进入 MySQL 命令行 |
五、配置与调试
| 命令 | 作用 |
|---|---|
docker compose config |
验证并输出 Compose 文件的最终配置 |
docker compose config --services |
列出配置中定义的所有服务名 |
docker compose -f 文件名.yml up -d |
指定非默认的配置文件启动 |
docker compose -p 项目名 up -d |
指定项目名称启动(避免冲突) |
docker-compose.yml文件配置
一、Docker Compose 核心作用
单机多容器编排 ,用一份 docker-compose.yml 文件,统一管理多个服务(启动、停止、网络、挂载、依赖),替代一堆 docker run 命令。
二、yml 顶层五大关键字
version:Compose 版本services:核心,定义所有应用服务networks:自定义网络,实现服务互通volumes:数据卷,持久化数据env_file/secrets:环境变量、密钥(可选)
三、services 高频核心参数(必记)
image:指定镜像build:基于 Dockerfile 构建镜像container_name:自定义容器名ports:端口映射 宿主机:容器volumes:目录 / 数据卷挂载,持久化environment:配置环境变量restart:重启策略(always 常用)depends_on:定义服务启动依赖networks:加入自定义网络command:覆盖容器默认启动命令
完整 docker-compose.yml(Nginx 示例)
bash
version: '3.8'
services:
nginx:
image: nginx:alpine # 轻量镜像
container_name: my-nginx
restart: always # 开机/崩溃自动重启
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 网页目录
- ./conf:/etc/nginx/conf.d # 配置文件目录
networks:
- nginx-net
networks:
nginx-net:
Docker Swarm
1. 定义
Docker 原生内置轻量容器集群编排工具,将多台 Docker 主机组成分布式集群,实现容器统一调度、自愈、扩缩容,适合小型业务。
2. 四大核心概念
- Swarm:整体集群环境
- Node:集群节点,分 Manager(管理调度)、Worker(运行容器)
- Task:最小调度单元,单个容器实例
- Service:业务模板,统一管理一组 Task 副本
3. 核心能力
- 集群管理:初始化集群、增减节点、查看节点状态
- 服务运维:创建服务、监控集群运行状态
- 弹性伸缩:调整服务实例数、增减集群服务器节点
4. 核心优点
- 内置无需额外安装,上手简单
- 故障自动恢复、内置负载均衡
- 支持快速扩缩容、滚动更新
1. 集群管理命令 (docker swarm)
主要用于集群的初始化、节点加入与退出等操作。
- 初始化集群 :
docker swarm init --advertise-addr <IP地址>(在当前节点创建 Swarm 集群并指定管理 IP) - 加入集群 :
docker swarm join --token <Token> <Manager_IP>:2377(将当前节点作为 Worker 或 Manager 加入集群) - 获取加入令牌 :
- 获取 Worker 节点加入命令:
docker swarm join-token worker - 获取 Manager 节点加入命令:
docker swarm join-token manager
- 获取 Worker 节点加入命令:
- 退出集群 :
docker swarm leave(使当前节点脱离 Swarm 集群)
2. 节点管理命令 (docker node)
用于查看集群节点状态、角色升降级及节点维护。
- 查看节点列表 :
docker node ls(列出集群中所有节点及其状态) - 查看节点详情 :
docker node inspect <节点ID或名称> - 查看节点任务 :
docker node ps <节点ID或名称>(查看指定节点上运行的容器任务) - 节点角色升降级 :
- 升级为 Manager:
docker node promote <节点ID> - 降级为 Worker:
docker node demote <节点ID>
- 升级为 Manager:
- 节点维护(排空) :
docker node update --availability drain <节点ID>(将节点设为排空状态,其上的容器会被迁移,常用于节点维护) - 移除节点 :
docker node rm <节点ID>(从集群中删除已处于leave状态的节点)
3. 服务管理命令 (docker service)
这是日常部署和管理应用最常用的命令集。
- 创建服务 :
docker service create --name <服务名> --replicas <副本数> <镜像名>(在集群中部署多副本应用) - 查看服务列表 :
docker service ls(查看集群中所有服务及其副本状态) - 查看服务任务详情 :
docker service ps <服务名>(查看该服务下所有容器副本分布在哪些节点及运行状态) - 弹性伸缩 :
docker service scale <服务名>=<目标副本数>(动态增加或减少服务的副本数量) - 更新服务 :
docker service update <服务名> --image <新镜像名>(更新服务的镜像版本,支持滚动更新) - 服务回滚 :
docker service rollback <服务名>(将服务配置回滚到上一个版本) - 查看服务日志 :
docker service logs <服务名>(聚合查看该服务所有副本的运行日志) - 删除服务 :
docker service rm <服务名>(停止并删除指定的服务)