当前位置: 首页 > article >正文

Docker学习路径——10、Docker Compose 一站式编排:从入门到生产级部署

Docker Compose 一站式编排从入门到生产级部署在微服务架构中单个应用往往由多个相互依赖的容器组成如 Web 服务器 数据库 缓存。手动管理这些容器docker run启动、依赖顺序、网络配置既繁琐又易错。Docker Compose 应运而生——它用声明式 YAML 文件定义整个应用栈实现“一键部署、一键销毁”。为什么必须用 Compose✅简化复杂度10 行 YAML 替代 10 条docker run命令✅依赖管理自动处理启动顺序如 DB 先于 Web 启动✅环境一致性开发、测试、生产环境配置统一✅资源隔离每个项目独立网络/卷避免冲突一、核心概念解析1. 三大核心要素要素说明示例Project项目一组关联服务的集合my-web-appService服务单个容器实例的配置模板web,db,redisCompose File定义项目的 YAML 文件docker-compose.yml2. 工作流程docker-compose.ymlDocker Compose解析配置创建网络拉取镜像启动容器按依赖顺序启动二、安装与验证安装步骤Linux# 下载二进制文件sudocurl-Lhttps://github.com/docker/compose/releases/latest/download/docker-compose-$(uname-s)-$(uname-m)-o/usr/local/bin/docker-compose# 添加执行权限sudochmodx /usr/local/bin/docker-compose# 创建软链接sudoln-s/usr/local/bin/docker-compose /usr/bin/docker-compose# 验证安装docker-compose--version# 输出Docker Compose version v2.24.5替代方案若 GitHub 下载慢可从 DaoCloud 镜像 获取三、Compose 文件深度解析基础结构v3.8 规范version:3.8# 指定 Compose 文件版本services:web:# 服务名自定义image:nginx:alpineports:-80:80networks:-app-netdb:image:mysql:5.7environment:MYSQL_ROOT_PASSWORD:examplevolumes:-db-data:/var/lib/mysql# 定义命名卷volumes:db-data:# 定义自定义网络networks:app-net:driver:bridge关键字段详解字段作用最佳实践image指定镜像优先使用带 tag 的镜像如redis:7.0build从 Dockerfile 构建与image二选一ports端口映射生产环境慎用建议仅暴露必要端口volumes数据卷挂载用命名卷替代绑定挂载更便携environment环境变量敏感信息用env_file或 secretsdepends_on启动依赖注意仅控制启动顺序不等待服务就绪networks网络连接必须先定义网络⚠️depends_on陷阱它只保证容器启动顺序不等待服务真正可用解决方案在应用代码中添加重试逻辑或使用healthcheck四、实战案例修复你的 Compose 文件你提供的配置存在几个关键问题以下是修正版修正后的 docker-compose.ymlversion:3.8services:# Tomcat 服务原 cenos 名称有误tomcat:image:billygoo/tomcat8-jdk8container_name:test01ports:-8080:8080# 添加端口映射否则无法外部访问networks:-xn_networkdepends_on:-redis-mysql# 添加健康检查确保 Tomcat 就绪healthcheck:test:[CMD,curl,-f,http://localhost:8080]interval:30stimeout:10sretries:3redis:image:redis# 修正拼写原 images → imageports:-6379:6379volumes:-/opt/redis/redis.conf:/etc/redis/redis.conf:ro# 只读挂载配置-redis-data:/data# 使用命名卷更安全networks:-xn_networkcommand:redis-server /etc/redis/redis.conf# Redis 健康检查healthcheck:test:[CMD,redis-cli,ping]interval:10stimeout:5sretries:3mysql:image:mysql:5.7# 修正拼写environment:MYSQL_ROOT_PASSWORD:123456MYSQL_DATABASE:db2021MYSQL_USER:xnMYSQL_PASSWORD:123456volumes:-mysql-data:/var/lib/mysql# 命名卷-/opt/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf:ro# 配置文件路径修正networks:-xn_network# MySQL 健康检查healthcheck:test:[CMD,mysqladmin,ping,-h,localhost]interval:10stimeout:5sretries:3# 定义命名卷避免直接挂载宿主机路径volumes:redis-data:mysql-data:# 定义网络networks:xn_network:driver:bridge关键修正点拼写错误images→image端口映射为 Tomcat 添加8080:8080数据卷优化使用命名卷redis-data,mysql-data替代直接挂载配置文件挂载为只读:ro健康检查确保服务真正就绪后再启动依赖服务配置路径MySQL 配置应放在/etc/mysql/conf.d/五、常用命令速查命令作用场景docker-compose up -d后台启动所有服务部署应用docker-compose down停止并删除容器/网络清理环境docker-compose logs -f web实时查看日志调试docker-compose exec db mysql -u root -p进入容器执行命令数据库操作docker-compose config验证 YAML 语法部署前检查docker-compose ps查看服务状态监控项目命名默认以目录名为项目名可通过-p指定docker-compose-pmyapp up-d六、高级技巧1. 环境变量分离创建.env文件DB_PASSWORDsupersecret REDIS_HOSTredis在 compose 文件中引用environment:MYSQL_ROOT_PASSWORD:${DB_PASSWORD}2. 多环境配置docker-compose.yml基础配置docker-compose.override.yml开发环境覆盖自动加载docker-compose.prod.yml生产环境配置# 生产环境启动docker-compose-fdocker-compose.yml-fdocker-compose.prod.yml up-d3. 扩展服务Scale# 启动 3 个 Redis 实例需无状态服务docker-composeup--scaleredis3-d七、生产环境最佳实践1. 安全加固敏感信息使用 Docker secretsSwarm 模式或 HashiCorp Vault最小权限容器以非 root 用户运行网络隔离前端/后端服务分属不同网络2. 资源限制services:web:deploy:# 仅 Swarm 模式有效resources:limits:cpus:0.5memory:512M# Compose 模式用以下方式mem_limit:512mcpus:0.53. 监控集成挂载/var/run/docker.sock给监控容器使用 Prometheus cAdvisor 收集指标八、常见问题排查Q1服务启动顺序问题现象Web 服务因 DB 未就绪而崩溃解决方案添加healthcheck在应用代码中实现连接重试使用wait-for-it.sh脚本GitHub 链接Q2卷权限错误现象MySQL 容器因权限拒绝启动解决方案# 初始化卷权限dockerrun--rm-vmysql-data:/var/lib/mysql alpinechown-R999:999 /var/lib/mysqlQ3网络 DNS 解析失败现象容器内无法通过服务名访问其他服务检查点# 进入容器检查 DNSdocker-composeexecwebcat/etc/resolv.conf# 应包含 nameserver 127.0.0.11Docker 内置 DNS九、总结Compose 黄金法则明确依赖用depends_onhealthcheck双保险持久化数据数据库必须用命名卷配置分离敏感信息绝不硬编码资源限制防止单个服务耗尽资源版本锁定Compose 文件指定version行动清单将现有docker run命令迁移至 Compose为团队制定 Compose 文件规范在 CI/CD 中集成docker-compose config验证掌握 Docker Compose你就拥有了高效管理多容器应用的核心能力。下一步我们将探索如何用Docker Swarm或Kubernetes实现集群化部署

相关文章:

Docker学习路径——10、Docker Compose 一站式编排:从入门到生产级部署

Docker Compose 一站式编排:从入门到生产级部署 在微服务架构中,单个应用往往由多个相互依赖的容器组成(如 Web 服务器 数据库 缓存)。手动管理这些容器(docker run 启动、依赖顺序、网络配置)既繁琐又易…...

CAST模型:流程性视频检索的时序一致性解决方案

1. CAST模型技术解析:重新定义流程性视频检索在当今视频内容爆炸式增长的时代,视频检索技术的重要性与日俱增。传统视频检索系统主要依赖全局视频-文本对齐,通过将视频片段和文本查询映射到共享嵌入空间来实现跨模态匹配。这种方法虽然简单有…...

数据驱动直流充电桩整流器开路故障识别技术【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,查看文章底部二维码(1)重加权自适应缩放网络的故障特征增强提取&#xff…...

参数传递规则问题-类型匹配

一、顶层参数传递给sub_function参数 note: candidate function not viable: no known conversion from ap_uint<32> * to ap_uint<16> * for 4th argument; void my_top (hls::stream<ap_axiu<PIX_W*N_PIX,1,1,1> >& src,hls::stream<ap_axiu&…...

收藏!全国首所网安本科高校2026招生!小白_程序员入行必看

收藏&#xff01;全国首所网安本科高校2026招生&#xff01;小白/程序员入行必看 全国首所独立设置的网络安全类公办本科高校2026年秋季在武汉招首批本科生&#xff0c;设4个紧扣网安的本科专业。该校产教融合扎实、硬件条件优&#xff0c;但存在不确定性强、转专业空间小、无…...

RTL设计和HLS高层次设计

一、RTL设计和HLS高层次设计 1.rtl设计需要关注微架构的决策&#xff0c;高层次设计不需要制定微架构决策&#xff0c;关注的是宏框架设计&#xff1b; 2.FSM状态机的创建、数据的路径、寄存器流水线这些细节留给HLS工具编译器来处理&#xff1b; 3.高层次综合通过提供的约束来…...

电磁车电感布局实战:水平、八字、T型,哪种方案过弯更稳?附LMV358电路实测数据

电磁智能车电感布局全解析&#xff1a;从理论到赛道实测的进阶指南 当你的电磁车在直道上风驰电掣&#xff0c;却在弯道频频冲出赛道时&#xff0c;问题的根源往往藏在那些不起眼的电感布局中。作为参加过三届智能车竞赛的老兵&#xff0c;我见过太多队伍在电感排布方案上栽跟头…...

基于LangGraph的AI智能体系统架构设计与工程实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Copaw_Agent”&#xff0c;作者是shanmugapriyag2196。虽然项目描述和文档几乎是空白的&#xff0c;但光看这个名字和仓库结构&#xff0c;就让我这个老码农嗅到了一丝熟悉又新鲜的味道——“Copaw”…...

【亲测免费】Phi-3.5-Mini-Instruct本地对话工具:5分钟开箱即用,小白零基础上手

【亲测免费】Phi-3.5-Mini-Instruct本地对话工具&#xff1a;5分钟开箱即用&#xff0c;小白零基础上手 1. 工具简介 Phi-3.5-Mini-Instruct是微软推出的轻量级大模型&#xff0c;专为本地对话场景优化。这个镜像工具将复杂的模型部署过程简化为"一键启动"&#xf…...

DreamActor-M2:基于时空上下文学习的角色动画生成技术

1. 角色动画技术演进与核心挑战角色动画技术近年来在数字娱乐、虚拟内容创作等领域展现出巨大潜力。这项技术的核心目标是将驱动视频中的运动模式迁移到静态参考图像上&#xff0c;生成既保持原始角色外观特征又呈现自然运动的高保真视频序列。传统方法通常依赖于显式的姿态先验…...

mPLUG-Owl3-2B Streamlit界面性能优化:首屏加载提速60%的4个关键配置

mPLUG-Owl3-2B Streamlit界面性能优化&#xff1a;首屏加载提速60%的4个关键配置 基于mPLUG-Owl3-2B多模态模型开发的本地图文交互工具&#xff0c;针对模型原生调用的各类报错做全维度修复&#xff0c;适配消费级GPU轻量化推理&#xff0c;采用Streamlit搭建聊天式交互界面&am…...

Flir Blackfly S多机同步拍摄避坑实录:从SpinView配置到Spinnaker SDK代码调优

Flir Blackfly S多机同步拍摄实战指南&#xff1a;从硬件连接到SDK深度调优 当工业视觉系统需要捕捉高速运动物体或多角度立体成像时&#xff0c;相机间的同步精度直接决定最终成像质量。作为工业级视觉解决方案中的明星产品&#xff0c;Flir Blackfly S系列凭借其优异的同步性…...

Flux2-Klein-9B-True-V2开源镜像部署:免conda环境一键运行方案

Flux2-Klein-9B-True-V2开源镜像部署&#xff1a;免conda环境一键运行方案 1. 项目概述 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型&#xff0c;具备强大的图像生成与编辑能力。这个开源镜像提供了免conda环境的一键运行方案&#xff0c;让用…...

Kafka集群管理新选择:深度体验Kafka-UI,对比CMAK/Offset Explorer谁更香?

Kafka集群管理工具横向评测&#xff1a;Kafka-UI与主流方案的深度对比 在分布式消息系统的运维实践中&#xff0c;可视化工具的选择往往决定了团队的管理效率。当命令行操作无法满足日常监控、故障排查和配置管理需求时&#xff0c;一个得心应手的Kafka管理界面就成了技术团队…...

X平台算法解析:掌握黄金法则提升内容触及率与互动率

1. 项目概述与核心价值如果你在X&#xff08;原Twitter&#xff09;上发布内容&#xff0c;却感觉自己的帖子像石沉大海&#xff0c;互动寥寥无几&#xff0c;那你很可能正在与那个看不见摸不着却又无处不在的“算法”作斗争。今天要聊的这个开源项目x-algorithm&#xff0c;不…...

MusicDownload:你的个人音乐库自由之路,三步开启免费音乐收藏新体验

MusicDownload&#xff1a;你的个人音乐库自由之路&#xff0c;三步开启免费音乐收藏新体验 【免费下载链接】MusicDownload 歌曲下载 项目地址: https://gitcode.com/gh_mirrors/mu/MusicDownload 还在为喜欢的音乐无法离线收听而烦恼吗&#xff1f;你是否曾想过建立一…...

LFM2.5-1.2B-Instruct镜像免配置:预装transformers+gradio+unsloth

LFM2.5-1.2B-Instruct镜像免配置&#xff1a;预装transformersgradiounsloth 1. 模型概述 LFM2.5-1.2B-Instruct是一个1.2B参数量的轻量级指令微调大语言模型&#xff0c;专为边缘设备和低资源服务器设计。这个模型特别适合需要本地AI对话能力的场景&#xff0c;比如嵌入式AI…...

Claude代码桥接器:让AI模型安全执行本地文件与命令的实战指南

1. 项目概述与核心价值最近在尝试将大型语言模型&#xff08;LLM&#xff09;的能力深度集成到我的本地开发工作流中时&#xff0c;遇到了一个普遍痛点&#xff1a;如何让像Claude这样的模型&#xff0c;不只是通过聊天窗口给我一些代码片段&#xff0c;而是能真正“动手”操作…...

G-Helper终极指南:免费掌控华硕笔记本的完整解决方案

G-Helper终极指南&#xff1a;免费掌控华硕笔记本的完整解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Sca…...

GAN判别器增强技术与对抗训练优化策略

1. 项目概述在生成对抗网络&#xff08;GAN&#xff09;的研究与应用中&#xff0c;判别器的性能直接影响整个模型的训练效果。这个项目聚焦于判别器的增强技术与对抗训练策略&#xff0c;通过改进判别器的结构和训练方法&#xff0c;提升GAN模型的稳定性和生成质量。作为一名长…...

解锁macOS视频预览新境界:QuickLookVideo全面解析与实战指南

解锁macOS视频预览新境界&#xff1a;QuickLookVideo全面解析与实战指南 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://…...

Flux Tasks API 的集成与使用指南

简介 Flux Tasks API 是 Ace Data Cloud 提供的一个强大工具&#xff0c;主要用于查询由 Flux Images Generation API 生成的任务执行状态。通过此 API&#xff0c;开发者可以轻松获取任务的实时进度和结果&#xff0c;从而更好地管理和优化图像生成工作流。 在本教程中&…...

DynamicVerse框架:4D动态场景重建与语义理解技术解析

1. DynamicVerse框架概述DynamicVerse是一个革命性的4D动态场景生成与理解框架&#xff0c;它通过融合多视角几何、计算机视觉和自然语言处理技术&#xff0c;实现了对真实世界动态场景的高精度建模与语义理解。这个框架的核心创新在于将传统的三维重建技术扩展到四维时空领域&…...

固定词汇表在NLP跨领域处理中的优化实践

1. 项目背景与核心价值在自然语言处理领域&#xff0c;固定词汇表&#xff08;Fixated Vocabularies&#xff09;的应用一直是个值得深入探讨的话题。这个项目聚焦于通用、符号和医疗三个关键领域的词汇表优化&#xff0c;试图解决跨领域文本处理中的核心痛点。我最初接触这个问…...

【困难】用栈来求解汉诺塔问题-Java:解法一

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程大家好&#xff01;欢迎来到我的网站&#xff01; 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

告别复杂配置!Wan2.2-I2V-A14B私有部署镜像,开箱即用,小白也能玩转AI视频

告别复杂配置&#xff01;Wan2.2-I2V-A14B私有部署镜像&#xff0c;开箱即用&#xff0c;小白也能玩转AI视频 1. 为什么选择这个镜像&#xff1f; 如果你曾经尝试过部署AI视频生成模型&#xff0c;一定被各种环境配置、依赖安装、版本冲突等问题折磨过。现在&#xff0c;这一…...

【中等】如何仅用递归函数和栈操作逆序一个栈-Java

分享一个大牛的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;希望你也加入到人工智能的队伍中来&#xff01;请轻击人工智能教程大家好&#xff01;欢迎来到我的网站&#xff01; 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑&#x…...

手把手教你部署DeepSeek-R1:1.5B轻量模型,办公本也能跑的逻辑推理引擎

手把手教你部署DeepSeek-R1&#xff1a;1.5B轻量模型&#xff0c;办公本也能跑的逻辑推理引擎 1. 为什么选择DeepSeek-R1 1.5B版本 在AI模型部署领域&#xff0c;我们常常面临一个困境&#xff1a;强大的模型需要昂贵的硬件支持&#xff0c;而轻量级模型又往往牺牲了核心能力…...

题解:洛谷 B2142 求 1+2+3+...+N 的值

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…...

SDXL潜在空间解析与AI绘画控制技巧

1. 项目概述SDXL&#xff08;Stable Diffusion XL&#xff09;作为当前最先进的文生图模型之一&#xff0c;其潜在空间&#xff08;latent space&#xff09;的运作机制一直是AI绘画领域的热门研究课题。不同于传统图像处理&#xff0c;SDXL通过将512x512像素的图像压缩到64x64…...