4、docker compose

news2025/5/31 19:29:43

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

      本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2391676.html

      如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

      相关文章

      SQL里几种JOIN连接

      数据信息: 员工表EMP 部门表DEPT 一、INNER JOIN(内连接) 作用:只返回两个表中完全匹配的行,相当于取交集。 场景:查询「有部门的员工信息」。 示例: SELECT 员工.姓名, 部门.部门名称 FR…

      基于通义千问的儿童陪伴学习和成长的智能应用架构。

      1.整体架构概览 我们的儿童聊天助手将采用典型的语音交互系统架构,结合大模型能力和外部知识库: 2. 技术方案分解 2.1. 前端应用/设备 选择: 移动App(iOS/Android)、Web应用,或者集成到智能音箱/平板等硬件设备中。技术栈: 移动App: React Native / Flutter (跨平台…

      LVS-DR 负载均衡群集

      目录 一、LVS-DR集群 1、LVS-DR 工作原理 2、数据包流向分析 3、LVS-DR 模式特点 二、直接路由模式(LVS-DR) 1、准备案例环境 2、配置负载调度器(101) (1)配置虚拟IP 地址(VIP&#xff…

      [Dify] 如何应对明道云API数据过长带来的Token超限问题

      在集成明道云与大型语言模型(LLM)如ChatGPT或本地部署的Dify时,开发者经常会面临一个核心问题:API获取的数据太长,超出LLM支持的Token数限制,导致无法直接处理。本文将深入探讨这个问题的成因,并提供几种可行的解决方案,包括分段处理、外部知识库构建等策略。 明道云AP…

      eNSP企业综合网络设计拓扑图

      1.拓扑图 2.拓扑配置 此拓扑还有一些瑕疵,仅做参考和技术提升使用。 想要配置的可以关注下载 大型网络综合实验拓扑图(eNSP)资源-CSDN文库

      BugKu Web渗透之备份是个好习惯

      启动场景后,网页显示一段字符串。 看起来像md5值,但是又过长了。 步骤一:右键查看源代码,没有发现任何异常。 步骤二:使用dirsearch去查看是否有其他可疑文件。 在终端输入: dirsearch -u http://117.72.…

      华为AP6050DN无线接入点瘦模式转胖模式

      引言 华为AP6050DN是一款企业级商用的无线接入点。由于产品定位原因,其默认工作在瘦模式下,即须经AC统一控制和管理,是不能直接充当普通的无线路由器来使用的。 而本文的目的,就是让其能脱离AC的统一控制和管理,当作普通无线路由器来使用。 硬件准备 华为AP6050DN无线接…

      十、【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战

      【核心功能篇】项目与模块管理:前端页面开发与后端 API 联调实战 前言准备工作第一部分:完善项目管理功能 (Project)1. 创建/编辑项目的表单对话框组件 第二部分:模块管理功能 (集成到项目详情页)1. 创建模块相关的 API 服务 (src/api/module…

      【大模型/MCP】MCP简介

      一句话总结 如果你打算让 LLM 像人一样“随手”调用脚本、数据库、搜索引擎或 CI/CD 流水线,而又不想为每个工具分别写 REST 插件或轮询接口,那么把它们包进 MCP 服务器是当前最省心、延迟最低、可复用最高的做法——正因如此 OpenAI、Google DeepMind、…

      [Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)

      在使用 Godot 进行 Android 项目的开发与导出时,配置 Android 环境是一项必要步骤。随着 Android Studio 的更新(特别是自 Arctic Fox 版本起),安装方式发生了变化,默认不再引导用户手动配置 SDK/JDK/NDK,而…

      机器学习多分类逻辑回归和二分类神经网络实践

      1、2-17 实现多分类逻辑回归 代码 # 2-17 实现多分类逻辑回归 import pandas as pd import numpy as np import matplotlib.pyplot as plt# 参数设置 iterations 5400 # 迭代次数 learning_rate 0.1 # 学习率 m_train 200 # 训练样本数量# 整数索引值转one-hot向量 def…

      社交类网站设计:经典feed流系统架构详细设计(小红书微博等)

      文章目录 一、关注服务1、粉丝、关注数架构设计(1)数据库实现方案1(2)数据库实现方案2(3)基于redis缓存优化(4)使用专用计数服务(5)近似计数(牺牲…

      RISC-V PMA、PMP机制深入分析

      1 PMA PMA(Physical Memory Attributes),物理内存属性,顾名思义就是用来设置物理内存属性的,但这里说“设置”,并不合理,因为一般情况下各存储的属性,在芯片设计时就固定了&#xf…

      【NebulaGraph】查询案例(七)

      【NebulaGraph】查询案例 七 1. 查询语句12. 查询语句23. 查询语句34. 查询语句4 1. 查询语句1 GO FROM "player100" OVER * YIELD type(edge) AS link, properties($$) AS properties,tostring(src(edge)) AS src,tostring(dst(edge)) AS dst, tags($$) AS tagLi…

      从“刚性扩容”到“弹性供给”:移动充电服务重构配电网边际成本

      随着新能源技术的快速发展,电动汽车的普及对传统配电网提出了新的挑战。传统的“刚性扩容”模式依赖基础设施的物理扩建,不仅投资成本高,且难以应对动态变化的电力需求。在此背景下,“弹性供给”理念逐渐兴起,特别是移…

      Grafana-Gauge仪表盘

      仪表盘是一种单值可视化。 可让您快速直观地查看某个值落在定义的或计算出的最小和最大范围内的位置。 通过重复选项,您可以显示多个仪表盘,每个对应不同的序列、列或行。 支持的数据格式 单值 数据集中只有一个值,会生成一个显示数值的…

      游戏引擎学习第313天:回到 Z 层级的工作

      回顾并为今天的内容定下基调 昨天我们新增了每个元素级别的排序功能,并且采用了一种我们认为挺有意思的方法。原本计划采用一个更复杂的实现方式,但在中途实现的过程中,突然意识到其实有个更简单的做法,于是我们就改用了这个简单…

      Milvus部署架构选择和Docker部署实战指南

      导读:向量数据库作为AI时代的核心基础设施,Milvus凭借其强大的性能和灵活的架构设计在市场中占据重要地位。然而,许多开发者在部署Milvus时面临架构选择困惑和配置复杂性挑战,导致项目进展受阻。 本文将为您提供一套完整的Milvus部…

      高效合并 Excel 表格实用工具

      软件介绍 这里介绍一款用于 Excel 合并的软件。 使用反馈与工具引入 之前推荐过 Excel 合并工具,但有小伙伴反馈这些工具对于需要合并单元格的 Excel 文件不太适用,而且无法合并表头。鉴于这些问题,找到了今天要介绍的这款 Excel 合并工具…

      拉取gitlab项目

      一、下载nvm管理node 先下载配置好nvm,再用nvm下载node 下载链接:开始 下载nvm - nvm中文官网 情况:npm i 下载依赖缓慢,可能是node版本不对,可能node版本太高 可能得问题:使用nvm 下载低版本的node时,…