4、docker compose

1、介绍

Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的开发、部署和管理。它通过声明式配置文件(YAML格式)定义容器化应用的服务、网络、存储等组件及其依赖关系,使用户能够通过单一命令快速启动、停止和重建完整的应用环境。

Docker Compose 是开发者和运维人员快速搭建多容器应用的利器,尤其适合本地开发、测试和小型项目部署。其"基础设施即代码"的理念提升了可移植性和协作效率,但需结合 Docker Swarm 或 Kubernetes 等工具应对复杂生产场景。通过降低容器化应用的门槛,Compose 成为现代云原生开发流程中的重要组成部分。

以下是其核心特性与应用场景的详细介绍:


1.1、核心概念

  1. 项目与服务

    • 项目(Project):代表一个完整的应用,由多个关联服务组成,默认以所在目录命名。

    • 服务(Service):对应一个容器实例(如数据库、Web服务器),可在配置中定义副本数量、镜像来源、环境变量等参数。

  2. YAML 配置文件

    默认使用 docker-compose.yml 文件描述应用架构,包含以下关键部分:

    • 服务(Services):每个服务对应一个容器,定义镜像、环境变量、端口映射、依赖关系等。

    • 网络(Networks):自定义容器间通信的网络,默认创建独立隔离的虚拟网络。

    • 卷(Volumes):持久化存储配置,实现容器与主机或容器间的数据共享。


1.2、主要功能

  1. 一键式操作

    通过 docker compose up 命令自动完成镜像拉取、容器创建、网络配置等流程,替代繁琐的多条 docker run 指令。

  2. 依赖管理

    使用 depends_on 控制服务启动顺序,结合健康检查(healthcheck)确保依赖服务就绪后再启动后续容器。

  3. 环境隔离与复用

    • 每个项目拥有独立网络,避免端口冲突。

    • 配置文件可版本控制,团队共享开发环境,消除"在我机器上能运行"问题。

  4. 弹性扩展

    通过 docker compose up --scale service=num 快速扩展服务实例,适合负载测试或横向扩容场景。

  5. 生命周期管理

    提供 startstopdownlogs 等命令集中管理容器状态,简化调试与维护。


1.3、典型应用场景

  1. 本地开发环境

    快速启动包含数据库、缓存、后端 API 和前端应用的完整技术栈,例如同时运行 PostgreSQL、Redis、Node.js 服务和 React 应用,避免手动配置依赖。例如:

    复制代码
    services:
      web:
        build: .
        ports: ["5000:5000"]
        depends_on:
          - redis
      redis:
        image: "redis:alpine"
  2. CI/CD 流水线

    在自动化测试环节,通过 Compose 快速搭建临时环境,运行测试后自动销毁,节省资源。

  3. 微服务原型验证

    快速编排多个微服务,验证服务间通信与集成逻辑,加速架构设计迭代。

  4. 单机部署

    对小型应用或非生产环境,直接使用 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驱动,其核心优势体现在以下方面:

核心特点

  1. 开源免费:遵循GPL许可证,用户可自由下载、修改和扩展,无版权费用。

  2. 易用性:可视化后台界面和"古腾堡"块编辑器(Block Editor)支持拖拽操作,无需编程基础即可管理内容。

  3. 高度扩展:拥有超6万款免费插件(如WooCommerce、Yoast SEO)和1.2万+主题库,可快速实现SEO优化、多语言支持、会员系统等复杂功能。

  4. 多用户协作:支持多角色权限管理,适合团队协作运营。

  5. 响应式设计:多数主题自动适配移动端,保障跨设备浏览体验。

适用场景

  • 内容型网站:新闻媒体、博客、知识库等,内置分类/标签系统和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
相关推荐
bigdata-rookie39 分钟前
kafka SASL/PLAIN 认证及 ACL 权限控制
大数据·运维·服务器·分布式·zookeeper·kafka
藥瓿亭42 分钟前
2024 CKA模拟系统制作 | Step-By-Step | 18、题目搭建-备份还原Etcd
linux·运维·服务器·ubuntu·kubernetes·etcd·cka
angushine1 小时前
Docker设置代理
运维·docker·容器
伤不起bb2 小时前
负载均衡群集---Haproxy
运维·负载均衡·lvs
行之文2 小时前
Debian 11之解决daemon.log与syslog文件占用空间过大问题
运维·debian
行之文2 小时前
Debian 11 之使用hostapd与dnsmasq进行AP设置
运维·网络·debian
洁✘2 小时前
LVS 负载均衡群集
运维·负载均衡·lvs
SZ1701102313 小时前
主机号全0,代表网络本身地址; 主机号全1,代表广播地址
运维·服务器·网络
David爱编程3 小时前
轻量容器如何改变开发世界?Docker 基本概念与架构详解
后端·docker·容器
西阳未落3 小时前
Linux(9)——进程(控制篇——下)
linux·运维·服务器