Docker 学习笔记:Docker Compose 多容器编排

Docker 学习笔记:Docker Compose 多容器编排

本笔记介绍 Docker Compose 的使用方法,通过一个 YAML 文件定义和运行多容器应用,实现高效的一键部署与生命周期管理。包含 WordPress 实战案例,覆盖从开发到生产的典型场景。


30. Docker Compose 概述

Docker Compose 是 Docker 官方提供的用于定义和运行多容器应用的工具。通过一个 docker-compose.yml 模板文件,可以一次性启动一组相关联的容器,无需逐个手动操作。

30.1 核心概念

  • 服务 (service):一个应用的容器,实际上可以包含若干个运行相同镜像的容器实例。
  • 项目 (project) :由一组相关联的服务组成的完整业务单元,在 docker-compose.yml 中定义。

Compose 的默认管理对象是项目,通过子命令可以对项目中的一组容器进行便捷的生命周期管理。Compose 项目由 Python 编写(后用 Go 重写),底层调用 Docker API,只要平台支持 Docker,就可以使用 Compose 进行编排管理。

30.2 为什么需要 Compose?

在日常工作中,一个 Web 项目通常需要 Web 服务、数据库服务甚至负载均衡等多个容器配合工作。如果逐一手动启停,维护量巨大且效率低下。Compose 可以轻松、高效地管理这些容器。


31. 安装与版本检查

Docker Compose 已作为 Docker CLI 插件集成,安装 Docker 后即可使用 docker compose 命令。

bash

复制代码
$ docker compose version
Docker Compose version v2.27.0

查看帮助信息:

bash

复制代码
$ docker compose -h

32. Compose 模板文件

默认模板文件名为 docker-compose.yml,采用 YAML 格式。

32.1 文件结构

  • version:模板文件版本(Compose v2 开始不再强制要求)。
  • services:定义各个服务容器,每个服务可以指定镜像、端口、环境变量、数据卷、依赖等。
  • networksvolumes:可选,定义网络和卷。

32.2 简单示例

yaml

复制代码
services:
  webapp:
    image: httpd

更详细的配置可参考官方文档:Compose file reference


33. 实战:使用 Compose 部署 WordPress

33.1 传统 docker run 方式

bash

复制代码
# MySQL 容器
$ docker run -tid --name db --restart always \
    -v /db:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=huawei \
    -e MYSQL_DATABASE=wordpress \
    mysql

# WordPress 容器
$ docker run -tid --name blog \
    -v /web:/var/www/html \
    -p 80:80 \
    --link db \
    -e WORDPRESS_DB_HOST=db \
    -e WORDPRESS_DB_USER=root \
    -e WORDPRESS_DB_PASSWORD=huawei \
    -e WORDPRESS_DB_NAME=wordpress \
    wordpress

33.2 Compose 方式

创建项目目录并编写 docker-compose.yml

bash

复制代码
$ mkdir wordpress && cd wordpress
$ vim docker-compose.yml

yaml

复制代码
services:
  blog:                          # WordPress 服务
    image: wordpress:latest
    restart: always
    ports:
      - "80:80"
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=root
      - WORDPRESS_DB_PASSWORD=huawei
      - WORDPRESS_DB_NAME=wordpress

  db:                             # MySQL 服务
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=huawei
      - MYSQL_DATABASE=wordpress

检查语法:

bash

复制代码
$ docker compose config -q

33.3 启动项目

bash

复制代码
$ docker compose up -d
[+] Running 3/3
 ✔ Network wordpress_default  Created
 ✔ Container wordpress-db-1   Started
 ✔ Container wordpress-blog-1 Started

查看状态:

bash

复制代码
$ docker ps
CONTAINER ID   IMAGE              COMMAND                  ...  PORTS                  NAMES
85b438b2ff89   wordpress:latest   "docker-entrypoint.s..."   ...  0.0.0.0:80->80/tcp     wordpress-blog-1
3c340ed1e299   mysql:latest       "docker-entrypoint.s..."   ...  3306/tcp, 33060/tcp    wordpress-db-1

33.4 验证

浏览器访问 http://<宿主机IP>/wp-admin/install.php,按照界面完成 WordPress 安装。


34. 常用 Compose 命令速查

命令 功能
docker compose up -d 后台启动所有服务
docker compose down 停止并删除容器、网络(默认不删除 volume)
docker compose ps 查看项目中的容器状态
docker compose logs -f 查看所有服务的日志
docker compose restart 重启所有服务
docker compose stop 停止所有服务
docker compose start 启动已停止的服务
docker compose rm 删除已停止的服务容器
docker compose config -q 验证并查看最终配置
docker compose pull 拉取服务镜像
docker compose exec <服务名> <命令> 在指定服务容器中执行命令

35. 知识点速查表

35.1 Compose 文件常用指令

指令 说明 示例
image 指定使用的镜像 image: wordpress:latest
build 指定 Dockerfile 路径,用于构建镜像 build: .
ports 端口映射,格式 宿主机端口:容器端口 ports: - "80:80"
environment 设置环境变量 environment: - MYSQL_ROOT_PASSWORD=123
volumes 挂载数据卷 volumes: - ./data:/var/lib/mysql
networks 指定网络 networks: - my_net
depends_on 指定服务依赖顺序 depends_on: - db
restart 重启策略 restart: always
command 覆盖容器默认命令 command: python app.py

35.2 Compose 与 docker run 参数对照

docker run 参数 Compose 对应配置 说明
-d docker compose up -d 后台运行
-p 8080:80 ports: - "8080:80" 端口映射
-v /host:/container volumes: - /host:/container 绑定挂载
-e KEY=VALUE environment: - KEY=VALUE 环境变量
--name web 服务名默认为容器名前缀 自动以 项目名_服务名_序号 命名
--restart always restart: always 重启策略
--link db 同一项目内服务名可直接 DNS 解析 无需 --link

35.3 项目生命周期管理

阶段 命令
启动 docker compose up -d
停止 docker compose stopdown
重启 docker compose restart
删除 docker compose down(默认保留 volume,加 -v 删除)
扩展 docker compose up -d --scale 服务名=数量

至此,Docker Compose 多容器编排学习完毕,后续可结合 Swarm 或 Kubernetes 进入容器集群管理。

相关推荐
qeen871 小时前
【算法笔记】各种常见排序算法详细解析(上)
c语言·数据结构·c++·学习·算法·排序算法
j_xxx404_1 小时前
Linux进程信号:内核数据结构与捕捉递达全流程
linux·运维·服务器·人工智能·ai
金色光环1 小时前
【DSP学习】 EPWM 原理-基于普中DSP开发攻略
学习·dsp开发
小新同学^O^1 小时前
简单学习 --> 数据标注
人工智能·python·学习·数据标注
STARFALL0011 小时前
MySQL 运维
运维·数据库·mysql
YangYang9YangYan1 小时前
2026出纳岗位学习数据分析的价值
学习·数据挖掘·数据分析
浪客灿心1 小时前
Linux网络NAT
linux·网络
怀旧,1 小时前
【Linux网络编程】10. NAT技术、代理服务、内网穿透
linux·网络·智能路由器
人生苦短1281 小时前
Ubuntu 系统常用操作命令大全
linux·chrome·ubuntu