4、docker compose
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:- redisredis:image: "redis:alpine"
-
CI/CD 流水线
在自动化测试环节,通过 Compose 快速搭建临时环境,运行测试后自动销毁,节省资源。 -
微服务原型验证
快速编排多个微服务,验证服务间通信与集成逻辑,加速架构设计迭代。 -
单机部署
对小型应用或非生产环境,直接使用 Compose 部署,避免引入复杂编排系统(如 Kubernetes)。
1.4、配置文件示例解析
以下为一个 Web 应用与 PostgreSQL 的典型配置:
services:webapp:build: ./appports:- "8000:8000"environment:- DB_HOST=postgresdepends_on:postgres:condition: service_healthypostgres:image: postgres:14volumes:- db_data:/var/lib/postgresql/datahealthcheck:test: ["CMD-SHELL", "pg_isready -U postgres"]interval: 5stimeout: 3sretries: 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: wordpressrestart: alwaysports:- 8080:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: exampleuserWORDPRESS_DB_PASSWORD: examplepassWORDPRESS_DB_NAME: exampledbvolumes:- /home/wangqiang/docker/wordpress:/var/www/htmldb:image: mysql:8.0restart: alwaysenvironment:MYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassMYSQL_RANDOM_ROOT_PASSWORD: '1'volumes:- /home/wangqiang/docker/wordpress/db:/var/lib/mysqlvolumes: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
相关文章:

4、docker compose
1、介绍 Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的开发、部署和管理。它通过声明式配置文件(YAML格式)定义容器化应用的服务、网络、存储等组件及其依赖关系,使用户能够通过单一命令快速启动、停止…...
Node.js全局对象详解:console、process与核心功能
在Node.js开发中,全局对象是一类无需引入即可直接访问的对象,它们为开发者提供了与运行时环境、系统交互和调试相关的核心功能。本文将深入解析Node.js中两个最常用的全局对象 console 和 process,并简要介绍其他全局对象的作用。通过代码示例…...
测试策略:AI模型接口的单元测试与稳定性测试
测试策略:AI模型接口的单元测试与稳定性测试 在构建支持AI能力的系统中,开发者不仅要关注业务逻辑的正确性,也必须保障AI模型接口在各种环境下都能稳定运行。这就要求我们在开发阶段制定清晰的测试策略,从功能验证到性能保障,逐步推进系统可用性、可维护性与可扩展性的提…...

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

基于通义千问的儿童陪伴学习和成长的智能应用架构。
1.整体架构概览 我们的儿童聊天助手将采用典型的语音交互系统架构,结合大模型能力和外部知识库: 2. 技术方案分解 2.1. 前端应用/设备 选择: 移动App(iOS/Android)、Web应用,或者集成到智能音箱/平板等硬件设备中。技术栈: 移动App: React Native / Flutter (跨平台…...
生产环境Mysql推荐配置参数
以下是针对生产环境的 MySQL 配置(my.cnf 或 mysqld.cnf)推荐配置及说明。请根据实际硬件资源(如内存、CPU、磁盘类型)和应用场景调整参数。 核心配置模板(InnoDB 优化) [mysqld] #---------------------- 基础设置 ---------------------- datadir = /var/lib…...

LVS-DR 负载均衡群集
目录 一、LVS-DR集群 1、LVS-DR 工作原理 2、数据包流向分析 3、LVS-DR 模式特点 二、直接路由模式(LVS-DR) 1、准备案例环境 2、配置负载调度器(101) (1)配置虚拟IP 地址(VIPÿ…...
理解并解决高丢包率问题,构建清晰流畅的实时音视频通话
丢包作为数字通信中的重要干扰因素,常常潜伏在表面之下,却严重影响性能,将清晰的对话变的模糊不清,将连贯的演示变的断断续续。因此,对音视频通话相关应用的开发者来说,理解丢包率非常重要。 什么是丢包&am…...
Ubuntu系统Todesk进度卡在100%
1 : 修改配置文件,关闭wayland sudo nano /etc/gdm3/custom.conf2 : 把#WaylandEnablefalse前的#号删掉 按图片删除注释 3 : 按Ctrl X ,离开(会问你要不要保存,输入 Y 回车保存) 4 : 重启系统 或在命令行输入 r…...

[Dify] 如何应对明道云API数据过长带来的Token超限问题
在集成明道云与大型语言模型(LLM)如ChatGPT或本地部署的Dify时,开发者经常会面临一个核心问题:API获取的数据太长,超出LLM支持的Token数限制,导致无法直接处理。本文将深入探讨这个问题的成因,并提供几种可行的解决方案,包括分段处理、外部知识库构建等策略。 明道云AP…...
Axure动态面板学习笔记
一、动态面板概述 动态面板(Dynamic Panel)是Axure中一个强大的交互组件,它本质上是多页面的集合,可以实现更丰富的页面交互功能。 主要特点: 可以包含多个状态(State),每个状态相当于一个独立页面 支持在不同状态间切换&#…...

eNSP企业综合网络设计拓扑图
1.拓扑图 2.拓扑配置 此拓扑还有一些瑕疵,仅做参考和技术提升使用。 想要配置的可以关注下载 大型网络综合实验拓扑图(eNSP)资源-CSDN文库...
工程化架构设计:Monorepo 实战与现代化前端工程体系构建
三、核心架构实践:从模块管理到微前端落地 1. Monorepo 进阶:依赖治理与性能优化 痛点深化 依赖提升冲突:不同包对同一依赖的版本要求冲突幽灵依赖治理:未声明依赖被非法引用巨型仓库构建慢:全量构建耗时随项目增长线…...

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

华为AP6050DN无线接入点瘦模式转胖模式
引言 华为AP6050DN是一款企业级商用的无线接入点。由于产品定位原因,其默认工作在瘦模式下,即须经AC统一控制和管理,是不能直接充当普通的无线路由器来使用的。 而本文的目的,就是让其能脱离AC的统一控制和管理,当作普通无线路由器来使用。 硬件准备 华为AP6050DN无线接…...
uniapp 配置本地 https 开发环境(基于 Vue2 的 uniapp)
1、生成本地 HTTPS 证书(mac)打开终端,运行以下命令: mkdir ~/ssl-cert && cd ~/ssl-cert2、生成私钥: openssl genrsa -out localhost.key 20483、生成自签名证书(有效期365天)&…...

十、【核心功能篇】项目与模块管理:前端页面开发与后端 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,而…...
Vue-Router中的三种路由历史模式详解
在最新版的 Vue-Router 中,我们使用createRouter和createWebHashHistory、createwebHistory、createMemoryHistory等方法来配置路由。 下面详细介绍这几种历史记录栈的使用与场景,并结合实际代码说明。 1. createWebHashHistory 原理: 1.…...

机器学习多分类逻辑回归和二分类神经网络实践
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)近似计数(牺牲…...
K6 是什么
K6 是一款现代化的 开源性能测试工具,专注于开发者和 DevOps 团队的易用性,用于对 Web 应用、API 和微服务 进行高性能的负载测试。它采用 JavaScript 脚本编写测试用例,结合命令行工具和云原生设计,特别适合 CI/CD 集成 和 自动化…...

RISC-V PMA、PMP机制深入分析
1 PMA PMA(Physical Memory Attributes),物理内存属性,顾名思义就是用来设置物理内存属性的,但这里说“设置”,并不合理,因为一般情况下各存储的属性,在芯片设计时就固定了…...
git常见命令说明
git branch -avv -a 显示 所有分支-vv (--verbose 的缩写) 额外显示本地分支跟踪的远程分支(如 [origin/main])及其状态对比。 # git branch -v * main abc1234 修复登录bugdev def5678 更新文档# git branch -vv * main abc1234 …...
深入解析 Tomcat 线程管理机制:从设计思想到性能调优
一、Tomcat 线程模型的核心架构 Tomcat 的线程管理机制是其高性能的核心支撑,其设计围绕 Connector(连接器) 和 Executor(执行器) 两大组件展开。以下为架构分层解析: 1. Connector 的线程模型 Tomcat 的…...

【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…...

从“刚性扩容”到“弹性供给”:移动充电服务重构配电网边际成本
随着新能源技术的快速发展,电动汽车的普及对传统配电网提出了新的挑战。传统的“刚性扩容”模式依赖基础设施的物理扩建,不仅投资成本高,且难以应对动态变化的电力需求。在此背景下,“弹性供给”理念逐渐兴起,特别是移…...
Java与Docker容器化优化:从核心技术到生产实践
在2025年的云原生与微服务时代,容器化技术已成为企业级应用部署的标准,Docker作为主流容器平台,显著提升了应用的 portability、可扩展性和部署效率。根据CNCF 2024年报告,95%的企业在其生产环境中使用Docker,特别是金…...
QT单例模式简单讲解与实现
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。在QT开发中,单例模式常用于管理全局资源,如配置管理、日志系统等。 最简单的QT单例实现 方法一:静态局部变量实现(C11及以上…...