一、docker-compose 概述

docker-compose 是 Docker 官方推出的用于定义和运行多容器 Docker 应用的工具。它通过一个 YAML 格式的配置文件(默认 docker-compose.yml)集中描述应用所需的所有服务(容器)、网络、数据卷等依赖关系,再通过简单的命令实现多容器的批量创建、启动、停止、重启等全生命周期管理,解决了多容器协同部署的复杂性问题。

二、docker-compose 的优点

  1. 简化多容器配置
    用一个 docker-compose.yml 文件定义所有容器的参数(镜像、端口、依赖等),避免手动执行冗长的 docker run 命令,配置可纳入版本控制,便于团队协作。

  2. 统一生命周期管理
    一条命令(如 docker-compose up)即可启动所有关联服务,无需逐个操作容器,大幅降低操作成本。

  3. 自动处理依赖与网络
    通过 depends_on 定义服务启动顺序,默认创建桥接网络,容器间可通过服务名直接通信(无需手动配置 IP)。

  4. 环境一致性
    配置文件可在开发、测试、生产环境复用,确保不同环境的容器配置一致,避免“在我电脑上能运行”的问题。

  5. 支持批量操作
    可同时对所有服务执行启动、停止、重启、日志查看等操作,也可针对单个服务进行精细化管理(如 docker-compose restart web)。

三、docker-compose 的缺点

  1. 仅限单机部署
    主要用于单机环境的多容器管理,无法支持跨主机的集群部署(需依赖 Docker Swarm 或 Kubernetes 等工具)。

  2. 版本兼容性问题
    配置文件的 version 字段需与 docker-compose 版本严格匹配,不同版本语法可能存在差异,升级时需注意兼容性。

  3. 依赖管理局限性
    depends_on 仅保证启动顺序,不保证依赖服务“就绪”(如数据库启动但未初始化完成时,应用可能连接失败),需额外通过健康检查或脚本处理。

  4. 不适合大规模应用
    对于包含数十个以上容器的复杂应用,配置文件会变得庞大,管理和维护成本增加,此时更适合 Kubernetes 等容器编排平台。

四、docker-compose 离线安装(Linux 环境)

在无网络环境中安装 docker-compose,需提前在有网络的机器上准备二进制文件,再传输到离线环境部署,步骤如下:

1. 提前在有网络的机器上下载二进制文件
# 1. 查看最新版本:https://github.com/docker/compose/releases,替换 VERSION
VERSION="v2.24.6"

# 2. 下载对应系统架构的二进制文件(Linux x86_64 为例)
curl -L "https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-Linux-x86_64" -o docker-compose

# 3. 赋予执行权限
chmod +x docker-compose

此时会生成 docker-compose 二进制文件,通过 U 盘、内网等方式传输到离线机器。

2. 在离线机器上安装
# 1. 将二进制文件移动到系统可执行目录(全局可用)
sudo mv docker-compose /usr/local/bin/

# 2. (可选)创建软链接(部分系统需要)
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 3. 验证安装
docker-compose --version
# 成功输出:docker-compose version 2.24.6, build 5f4c08e1

五、docker-compose 常用命令

命令 作用 示例
启动服务
docker-compose up 前台启动所有服务(日志输出到终端) docker-compose up
docker-compose up -d 后台启动所有服务(推荐) docker-compose up -d
docker-compose up -d --build 启动时重新构建自定义镜像 docker-compose up -d --build web
停止服务
docker-compose stop 停止所有运行中的服务(容器保留) docker-compose stop
docker-compose stop <服务名> 停止指定服务 docker-compose stop db
docker-compose down 停止并删除所有服务、网络(数据卷保留) docker-compose down
docker-compose down --volumes 停止并删除所有服务、网络及数据卷 docker-compose down --volumes
查看状态
docker-compose ps 查看所有服务的运行状态 docker-compose ps
docker-compose ps <服务名> 查看指定服务状态 docker-compose ps web
日志查看
docker-compose logs 查看所有服务的日志 docker-compose logs
docker-compose logs -f 实时跟踪所有服务日志 docker-compose logs -f
docker-compose logs -f <服务名> 实时跟踪指定服务日志 docker-compose logs -f db
容器操作
docker-compose exec <服务名> <命令> 进入指定容器执行命令(如 bash) docker-compose exec web bash
docker-compose restart 重启所有服务 docker-compose restart
docker-compose restart <服务名> 重启指定服务 docker-compose restart web
镜像操作
docker-compose build 构建所有自定义镜像 docker-compose build
docker-compose build <服务名> 构建指定服务的镜像 docker-compose build app
docker-compose build --no-cache 不使用缓存重新构建 docker-compose build --no-cache
其他实用命令
docker-compose config 验证配置文件语法并输出 docker-compose config
docker-compose images 列出所有服务使用的镜像 docker-compose images
docker-compose top 查看服务容器内的进程 docker-compose top

六、离线环境使用注意事项

  1. 离线环境中,docker-compose 依赖的镜像需提前通过 docker save 导出,再在离线机器用 docker load 导入(避免联网拉取)。
  2. 配置文件 docker-compose.yml 中指定的镜像标签(如 nginx:latest)必须与导入的镜像标签完全一致,否则会启动失败。
  3. 若需更新应用,需重复“有网环境准备新镜像/代码 → 离线传输 → 导入镜像 → 重启服务”流程。

通过上述步骤,可在离线环境完成 docker-compose 的安装,并通过常用命令管理多容器应用的生命周期。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐