当前位置: 首页 > news >正文

Docker Compose 实战指南:从配置到多容器联动的全流程解析

Docker Compose 理解

一、什么是 Docker Compose?

Docker Compose 是 Docker 官方提供的工具,用于定义和运行多容器 Docker 应用。通过一个 YAML 格式的配置文件(docker-compose.yml),可以声明应用所需的所有服务(容器)、网络、存储卷等,然后通过单条命令即可创建、启动、停止所有服务。

二、为什么需要 Docker Compose?

当应用依赖多个容器时(例如:Web 应用 + 数据库 + 缓存),手动管理容器存在以下问题:

  • 需逐个启动容器,指定网络、端口映射、环境变量等参数,步骤繁琐;
  • 容器间依赖关系需手动维护(如:先启动数据库,再启动 Web 应用);
  • 配置参数分散,难以复用和版本控制。

Docker Compose 解决了这些问题:通过统一配置文件管理所有依赖,实现一键部署、环境一致、配置可复用

三、核心概念

Docker Compose 配置文件(docker-compose.yml)主要包含 3 个核心部分:

  1. services(服务):定义应用依赖的容器(如 web 服务、db 服务),每个服务对应一个容器配置(镜像、端口、环境变量等)。
  2. networks(网络):定义容器间的通信网络,默认会创建一个桥接网络,服务间可通过服务名互相访问。
  3. volumes(卷):定义持久化存储,用于容器数据的持久化(如数据库数据)。
四、实际操作:创建多容器应用

以「Flask 后端 + Redis 缓存」为例,演示 Docker Compose 的使用流程。

步骤 1:准备项目结构
myapp/
├── docker-compose.yml   # Compose 配置文件
├── app/                 # Flask 应用代码
│   ├── Dockerfile       # Flask 容器构建文件
│   └── app.py           # Flask 应用逻辑
步骤 2:编写 Flask 应用代码

app/app.py(简单计数功能,依赖 Redis 存储计数):

from flask import Flask
from redis import Redisapp = Flask(__name__)
redis = Redis(host='redis', port=6379)  # 连接 Redis 服务(服务名作为主机名)@app.route('/')
def hello():redis.incr('hits')  # 每次访问计数 +1return f'Hello! This page has been visited {redis.get("hits").decode("utf-8")} times.'if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)
步骤 3:编写 Flask 容器的 Dockerfile

app/Dockerfile(构建 Flask 应用镜像):

# 基础镜像
FROM python:3.9-slim# 工作目录
WORKDIR /app# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir flask redis# 复制应用代码
COPY . .# 启动命令
CMD ["python", "app.py"]

需在 app 目录下创建 requirements.txt

flask==2.0.1
redis==4.1.0
步骤 4:编写 docker-compose.yml 配置文件

docker-compose.yml(定义两个服务:web(Flask)和 redis):

version: '3.8'  # Compose 版本(可选,默认使用最新)services:# Flask 服务web:build: ./app  # 从 ./app 目录的 Dockerfile 构建镜像ports:- "5000:5000"  # 宿主机端口:容器端口(外部可通过 localhost:5000 访问)depends_on:- redis  # 依赖 redis 服务,启动时先启动 redisnetworks:- app-network  # 加入自定义网络# Redis 服务(直接使用官方镜像)redis:image: redis:6-alpine  # 使用 Redis 官方轻量镜像volumes:- redis-data:/data  # 挂载卷到容器 /data 目录(持久化 Redis 数据)networks:- app-network  # 加入自定义网络# 自定义网络(服务间通信)
networks:app-network:driver: bridge  # 桥接网络(默认类型)# 持久化卷(存储 Redis 数据)
volumes:redis-data:
步骤 5:使用 Docker Compose 操作应用
  1. 启动应用(创建并启动所有服务):

    # 前台启动(日志会输出到终端,按 Ctrl+C 停止)
    docker compose up# 后台启动(推荐)
    docker compose up -d
    
  2. 验证应用
    访问 http://localhost:5000,会显示访问次数,且刷新后计数递增(数据存储在 Redis 中)。

  3. 查看运行状态

    docker compose ps  # 查看所有服务状态
    
  4. 查看日志

    docker compose logs  # 查看所有服务日志
    docker compose logs web  # 只查看 web 服务日志
    
  5. 进入容器内部(例如进入 web 容器):

    docker compose exec web sh  # 进入 web 容器的 shell
    
  6. 停止并清理应用

    # 停止服务(保留容器、网络、卷)
    docker compose stop# 停止并删除容器、网络(保留卷,数据不丢失)
    docker compose down# 停止并删除所有(包括卷,数据会丢失)
    docker compose down -v
    
五、常用 Docker Compose 命令总结
命令作用
docker compose up创建并启动所有服务(前台)
docker compose up -d后台启动服务
docker compose down停止并删除容器、网络
docker compose ps查看运行的服务
docker compose logs查看服务日志
docker compose exec <服务名> <命令>在指定服务容器中执行命令
docker compose restart <服务名>重启指定服务(默认所有)
docker compose build重新构建服务镜像
六、总结

Docker Compose 核心价值在于简化多容器应用的管理,通过配置文件实现「一次编写,到处运行」,尤其适合开发环境和小型部署场景。掌握它可以大幅提升多容器应用的开发和运维效率。

http://www.dtcms.com/a/321736.html

相关文章:

  • Linux系统编程Day9 -- 理解计算机的软硬件管理
  • Dijkstra?spfa?SPstra?
  • 01Vue3
  • 增长强势 成果丰硕 | Fortinet发布2025年第二季度财报
  • GPT-5正式发布:与Claude 4、Gemini 2.5等主流大模型谁更胜一筹?
  • Java中重写和重载有哪些区别
  • 大模型——部署体验gpt-oss-20b
  • 写论文助手Zotero 的使用
  • Scrapy返回200但无数据?可能是Cookies或Session问题
  • electron 静默安装同时安装完成后自动启动(nsis)
  • 【vLLM 学习】Load Sharded State
  • VB网际探针:零依赖轻量爬虫实战
  • GPT-5 is here
  • STM32 输入捕获,串口打印,定时器,中断综合运用
  • centos系统配置防火墙
  • DDR-怎么计算存储空间-什么是预取(Pre-fetch)
  • 【世纪龙科技】汽车车身测量虚拟实训软件-虚境精测全维赋能
  • 应急响应流程
  • vue2-scoped关键字、组件通信
  • Qwen-Image擅长文字渲染的创作利器
  • 用 Go 写个极简反向代理,把 CC 攻击挡在业务容器之外
  • 深入浅出:掌握银河麒麟桌面操作系统的防火墙管理艺术
  • 3- Python 网络爬虫 — 如何抓取动态加载数据?Ajax 原理与实战全解析
  • Redis:集群(Cluster)
  • eNSP 模拟器安装教程
  • 深入理解模板方法模式:框架设计的“骨架”艺术
  • [激光原理与应用-180]:测量仪器 - 频谱型 - 干涉仪的定义、功能、原理、组成
  • 目标检测数据集 - 番茄叶病虫害检测数据集下载「包含VOC、COCO、YOLO三种格式
  • LeetCode盛最多水的容器
  • 线程死锁相关知识点