DockerCompose以及docker swarm

Docker Compose介绍

  1. 定义 Docker 官方单机多容器编排工具 ,通过 docker-compose.yml 统一管理多个容器。

  2. 作用 告别一堆 docker run 命令,一条命令批量启动 / 停止 / 重启多个服务(Nginx、MySQL、Redis 等)。

  3. 核心优势

  • 统一配置、一键部署
  • 自动创建网络,容器内部用服务名互相访问
  • 支持目录挂载、数据持久化、自启动

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 顶层五大关键字

  1. version:Compose 版本
  2. services:核心,定义所有应用服务
  3. networks:自定义网络,实现服务互通
  4. volumes:数据卷,持久化数据
  5. env_file/secrets:环境变量、密钥(可选)

三、services 高频核心参数(必记)

  1. image:指定镜像
  2. build:基于 Dockerfile 构建镜像
  3. container_name:自定义容器名
  4. ports:端口映射 宿主机:容器
  5. volumes:目录 / 数据卷挂载,持久化
  6. environment:配置环境变量
  7. restart:重启策略(always 常用)
  8. depends_on:定义服务启动依赖
  9. networks:加入自定义网络
  10. 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. 四大核心概念

  1. Swarm:整体集群环境
  2. Node:集群节点,分 Manager(管理调度)、Worker(运行容器)
  3. Task:最小调度单元,单个容器实例
  4. 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
  • 退出集群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>
  • 节点维护(排空)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 <服务名>(停止并删除指定的服务)