1、介绍
Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的开发、部署和管理。它通过声明式配置文件(YAML格式)定义容器化应用的服务、网络、存储等组件及其依赖关系,使用户能够通过单一命令快速启动、停止和重建完整的应用环境。
Docker Compose 是开发者和运维人员快速搭建多容器应用的利器,尤其适合本地开发、测试和小型项目部署。其“基础设施即代码”的理念提升了可移植性和协作效率,但需结合 Docker Swarm 或 Kubernetes 等工具应对复杂生产场景。通过降低容器化应用的门槛,Compose 成为现代云原生开发流程中的重要组成部分。
以下是其核心特性与应用场景的详细介绍:
1.1、核心概念
-
项目与服务
-
项目(Project):代表一个完整的应用,由多个关联服务组成,默认以所在目录命名。
-
服务(Service):对应一个容器实例(如数据库、Web服务器),可在配置中定义副本数量、镜像来源、环境变量等参数。
-
-
YAML 配置文件
默认使用docker-compose.yml
文件描述应用架构,包含以下关键部分:-
服务(Services):每个服务对应一个容器,定义镜像、环境变量、端口映射、依赖关系等。
-
网络(Networks):自定义容器间通信的网络,默认创建独立隔离的虚拟网络。
-
卷(Volumes):持久化存储配置,实现容器与主机或容器间的数据共享。
-
1.2、主要功能
-
一键式操作
通过docker compose up
命令自动完成镜像拉取、容器创建、网络配置等流程,替代繁琐的多条docker run
指令。 -
依赖管理
使用depends_on
控制服务启动顺序,结合健康检查(healthcheck
)确保依赖服务就绪后再启动后续容器。 -
环境隔离与复用
-
每个项目拥有独立网络,避免端口冲突。
-
配置文件可版本控制,团队共享开发环境,消除“在我机器上能运行”问题。
-
-
弹性扩展
通过docker compose up --scale service=num
快速扩展服务实例,适合负载测试或横向扩容场景。 -
生命周期管理
提供start
、stop
、down
、logs
等命令集中管理容器状态,简化调试与维护。
1.3、典型应用场景
-
本地开发环境
快速启动包含数据库、缓存、后端 API 和前端应用的完整技术栈,例如同时运行 PostgreSQL、Redis、Node.js 服务和 React 应用,避免手动配置依赖。例如:services: web: build: . ports: ["5000:5000"] depends_on: - redis redis: image: "redis:alpine"
-
CI/CD 流水线
在自动化测试环节,通过 Compose 快速搭建临时环境,运行测试后自动销毁,节省资源。 -
微服务原型验证
快速编排多个微服务,验证服务间通信与集成逻辑,加速架构设计迭代。 -
单机部署
对小型应用或非生产环境,直接使用 Compose 部署,避免引入复杂编排系统(如 Kubernetes)。
1.4、配置文件示例解析
以下为一个 Web 应用与 PostgreSQL 的典型配置:
services:
webapp:
build: ./app
ports:
- "8000:8000"
environment:
- DB_HOST=postgres
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:14
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 5
volumes:
db_data:
-
服务互联:
webapp
通过服务名postgres
访问数据库,无需知晓具体IP。 -
健康检查:确保数据库就绪后再启动 Web 服务,避免连接失败。
-
数据持久化:
db_data
卷保证数据库重启后数据不丢失。
1.5、优势与局限
优势:
-
简化复杂度:用代码定义基础设施,替代手动输入冗长 Docker 命令。
-
环境一致性:消除“在我机器上能运行”问题,团队共享同一配置。
-
高效管理:通过命令批量操作容器,支持水平扩展(
docker compose up --scale
)。
局限:
-
单机限制:适用于单节点部署,缺乏集群管理、负载均衡等生产级功能。
-
配置规模:大型项目配置文件可能变得冗长,需结合其他工具(如 Kubernetes)管理。
2、安装
官方教程:Plugin | Docker Docs
# 设置Docker's apt repository
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 安装
sudo apt-get update
sudo apt-get install docker-compose-plugin
验证:
wangqiang@wangqiang:~$ docker compose version Docker Compose version v2.35.1
3、wordpress
3.1、wordpress介绍
WordPress是一款全球流行的开源内容管理系统(CMS),基于PHP和MySQL开发,最初于2003年作为博客平台推出,现已发展为功能强大的全能型建站工具,支持构建企业官网、个人博客、电商平台、论坛、在线课程等多种类型网站。截至2023年,全球超过43%的网站由WordPress驱动,其核心优势体现在以下方面:
核心特点
-
开源免费:遵循GPL许可证,用户可自由下载、修改和扩展,无版权费用。
-
易用性:可视化后台界面和“古腾堡”块编辑器(Block Editor)支持拖拽操作,无需编程基础即可管理内容。
-
高度扩展:拥有超6万款免费插件(如WooCommerce、Yoast SEO)和1.2万+主题库,可快速实现SEO优化、多语言支持、会员系统等复杂功能。
-
多用户协作:支持多角色权限管理,适合团队协作运营。
-
响应式设计:多数主题自动适配移动端,保障跨设备浏览体验。
适用场景
-
内容型网站:新闻媒体、博客、知识库等,内置分类/标签系统和RSS订阅功能。
-
商业展示:企业官网、产品手册、作品集,通过页面构建器(如Elementor)快速设计。
-
电子商务:通过WooCommerce插件可低成本搭建独立站,支持支付网关和库存管理。
-
社区互动:借助bbPress、BuddyPress构建论坛或社交平台。
技术生态
-
主题定制:支持子主题开发,可通过CSS/HTML/PHP深度定制界面。
-
开发者友好:提供REST API、钩子机制(Hooks)和丰富的开发文档,便于二次开发。
-
云兼容性:支持主流服务器环境(如Apache/Nginx),可部署在共享主机或云服务器。
安全与维护
-
官方持续更新核心系统修复漏洞,建议搭配安全插件(如Wordfence)并定期备份。
-
社区活跃,全球贡献者提供多语言支持和问题解决方案。
作为平衡灵活性与成本效益的建站方案,WordPress既适合个人快速上线网站,也能满足中大型项目的定制需求,是数字化转型的优选工具。
3.2、部署wordpress
以下以部署WordPress为例介绍docker compose的使用:
# 创建文件夹
(llm) wangqiang@wangqiang:~$ mkdir docker
(llm) wangqiang@wangqiang:~$ cd docker
(llm) wangqiang@wangqiang:~$ mkdir wordpress
(llm) wangqiang@wangqiang:~$ cd wordpress
(llm) wangqiang@wangqiang:~/docker/wordpress$ pwd
/home/wangqiang/docker/wordpress
# 创建文件
(llm) wangqiang@wangqiang:~/docker/wordpress$ vi docker-compose.yml
# 将以下文件复制进去
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- /home/wangqiang/docker/wordpress:/var/www/html
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- /home/wangqiang/docker/wordpress/db:/var/lib/mysql
volumes:
wordpress:
db:
# 部署
(llm) wangqiang@wangqiang:~/docker/wordpress$ sudo docker compose up -d
[+] Running 35/35
✔ db Pulled 221.7s
✔ wordpress Pulled 188.0s
[+] Running 3/3
✔ Network wordpress_default Created 0.1s
✔ Container wordpress-wordpress-1 Started 1.0s
✔ Container wordpress-db-1 Started 0.9s
(llm) wangqiang@wangqiang:~/docker/wordpress$
访问:http://192.168.2.22:8080/ (ip地址:端口号)
4、常用命令
4.1、启动服务
docker compose up
作用:根据
docker-compose.yml
文件启动所有服务常用参数:
-d
:后台运行
--build
:强制重新构建镜像
--force-recreate
:强制重新创建容器
# 示例:后台启动并重新构建镜像
docker compose up -d --build
4.2、停止服务
docker compose down
作用:停止并删除容器、网络
常用参数:
-v
:同时删除数据卷 (volumes
)
--rmi all
:删除所有相关镜像
# 示例:停止服务并删除数据卷
docker compose down -v
4.3、查看服务状态
docker compose ps
作用:列出当前项目中所有容器的状态
# 示例输出:
NAME COMMAND SERVICE STATUS PORTS
web-app "nginx -g 'daemon of…" nginx running 0.0.0.0:80->80/tcp
db "docker-entrypoint.s…" mysql running 3306/tcp
4.4、查看日志
docker compose logs
作用:查看所有服务的日志
常用参数:
-f
:实时跟踪日志
服务名
:查看指定服务的日志
# 示例:实时跟踪 web 服务的日志
docker compose logs -f web
4.5、构建镜像
docker compose build
作用:根据
docker-compose.yml
中的build
配置构建镜像常用参数:
--no-cache
:不使用缓存
# 示例:强制重新构建 web 服务的镜像
docker compose build --no-cache web
4.6、启动/停止单个服务
docker compose start [服务名]
docker compose stop [服务名]
# 示例:启动 MySQL 服务
docker compose start mysql
# 示例:停止 Nginx 服务
docker compose stop nginx
4.7、进入容器执行命令
docker compose exec [服务名] [命令]
作用:在运行中的容器内执行命令
# 示例:进入 MySQL 容器的 Bash 终端
docker compose exec mysql bash
# 示例:在 web 容器中执行 ls 命令
docker compose exec web ls /app
4.8、拉取镜像
docker compose pull
-
作用:拉取
docker-compose.yml
中定义的所有镜像
# 示例:仅拉取 Redis 镜像
docker compose pull redis
4.9、查看服务依赖
docker compose config
作用:验证并输出最终的 Compose 配置(用于调试配置文件)
# 示例:显示合并后的配置
docker compose config
4.10、扩展服务实例
docker compose up --scale [服务名]=数量
# 示例:启动 3 个 web 服务实例
docker compose up -d --scale web=3
4.11、暂停/恢复服务
docker compose pause [服务名]
docker compose unpause [服务名]
4.12、指定自定义配置文件
docker compose -f custom-compose.yml up
4.13、使用环境变量文件
创建 .env
文件:
DB_PASSWORD=secret
在 docker-compose.yml
中引用:
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
4.14、项目命名
docker compose -p myproject up