docker 基础中怎么使用 docker compose?

如果是本地开发或多容器应用部署,直接用 Docker Compose V2(docker compose 命令)通过一个 YAML 文件编排服务,比手动执行多个 docker run 命令更可靠。

先说结论:Docker Compose 适合用单个配置文件管理多个关联容器,开发环境和小型部署场景首选,生产环境需配合持久化卷和数据备份。

  • 适合:本地开发、测试环境、微服务快速编排、单主机多容器部署
  • 先看:确认安装的是 Compose V2(docker compose 空格格式),V1 已停止更新
  • 建议:配置持久化卷避免数据丢失,依赖关系用 depends_on 声明

命令速用版

安装完成后,以下是日常最常用的命令:

docker compose version          # 查看版本确认安装成功
docker compose up               # 构建并启动所有服务
docker compose up -d            # 后台启动
docker compose down             # 停止并删除容器、网络
docker compose ps               # 查看运行状态
docker compose logs             # 查看服务日志
docker compose build            # 重新构建镜像

注意命令格式是docker compose(空格),不是docker-compose(连字符),后者是已弃用的 V1 版本。

为什么会这样

Docker Compose 解决的核心问题是:当应用需要多个容器协作时(比如 Web 应用 + 数据库 + 缓存),手动执行多条docker run命令容易出错,且难以管理容器间的网络和依赖关系。

Compose 通过 YAML 文件声明式描述所有服务,一条命令就能完成整个应用栈的启动。它把容器编排分为三层:工程(project)、服务(service)、容器(container),同一工程下的服务会自动加入同一个网络,可以通过服务名互相访问。

官方推荐的三步流程是:用 Dockerfile 定义环境 → 用 docker-compose.yml 定义服务 → 执行docker compose up启动。

分步处理

第一步:确认安装版本

docker compose version

如果提示docker: 'compose' is not a docker command,需要安装 Compose 插件。Linux 系统可通过包管理器安装docker-compose-plugin,Windows/macOS 升级 Docker Desktop 即可自动获得。

第二步:准备项目文件

在项目根目录创建两个文件:

Dockerfile(定义镜像构建):

FROM openjdk:8
EXPOSE 8080
ADD target/myapp.jar /demo.jar
ENTRYPOINT ["java", "-jar", "demo.jar"]

docker-compose.yml(定义服务编排):

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - redis
  redis:
    image: redis:alpine

第三步:启动服务

docker compose up -d

-d参数让容器后台运行。首次执行会自动构建镜像并创建网络。

第四步:配置数据持久化

如果服务需要保存数据(如数据库),必须配置卷映射,否则容器删除后数据会丢失:

volumes:
  - ./data:/var/lib/redis

把宿主机目录映射到容器内部路径,确保重启后数据保留。

怎么验证是否生效

执行以下检查命令确认服务状态:

docker compose ps           # 所有服务状态应为 Up
docker compose logs web     # 查看特定服务日志
curl http://localhost:8080  # 测试端口是否可访问

如果ps显示状态为Exit,用logs查看错误信息。服务间网络连通性可以通过在容器内ping服务名验证。

常见坑

  • 版本混淆:老教程用docker-compose命令,新环境应使用docker compose,两者不兼容
  • 数据丢失:没配置volumes时,容器删除后数据库内容会清空,生产环境必须持久化
  • 端口冲突:ports映射的宿主机端口不能低于 60,且不能与其他服务冲突
  • 依赖顺序:depends_on只控制启动顺序,不等待服务就绪,需要健康检查配合
  • 容器命名:指定container_name后无法使用scale扩展实例数
  • 网络隔离:Compose 默认创建独立网络,同一工程的服务可通过服务名访问,但宿主机访问需用端口映射

参考来源

  • Docker Compose 实战指南 - Docker Compose 核心概念与底层原理
  • 阿里云开发者社区 - 深入浅出之 Docker Compose 详解(2023 年 6 月 13 日)
  • 阿里云开发者社区 - docker compose 详细使用教程(2023 年 8 月 22 日)
  • 阿里云开发者社区 - 简化多容器应用部署:深入理解 Docker Compose(2024 年 6 月 7 日)
  • 云原生之 Docker 篇 Docker Compose 介绍及使用入门(2022 年 10 月 11 日)

原文链接:https://www.zjcp.cc/ask/10167.html

posted @ 2026-05-07 13:07  茶猫云呀  阅读(12)  评论(0)    收藏  举报