Docker Compose 之详解(Detailed Explanation of Docker Compose)

 Docker Compose 之详解

当容器数量逐渐增多,你是否感到手忙脚乱?面对复杂的部署场景,是时候祭出神器Docker Compose了!它能帮你优雅地管理多容器应用,一键启动、停止所有服务,不再为复杂的手动操作焦头烂额。


什么是 Docker Compose?

Docker Compose 是 Docker 官方提供的多容器管理工具,允许你通过一个简单的 YAML 配置文件定义和管理多容器服务。
它的核心功能包括:

  1. 定义多容器:通过一个docker-compose.yml 文件描述多个服务的构建方式、网络配置和依赖关系。

  2. 一键管理:启动、停止、重启和查看服务日志都可以通过一条命令完成。

  3. 跨环境部署:支持开发、测试和生产环境的灵活配置。


为什么要用 Docker Compose?

  1. 多容器协作的利器
    当你的项目依赖多个容器(如 Web 服务 + 数据库 + 缓存),Compose 可以一键启动并连接它们。

  2. 高效的开发体验
    不再需要记住复杂的docker run 参数;通过 Compose,所有配置都在一个文件里。

  3. 简化部署
    无论是本地开发环境还是远程服务器,一份docker-compose.yml 文件搞定部署。

  4. 减少重复劳动
    每次需要启动服务时,不再需要重复输入一大堆命令。


安装 Docker Compose

以下是在 CentOS 下安装 Docker Compose 的步骤:

  1. 下载二进制文件

 sudo curl -L "https://github.com/docker/compose/releases/download/2.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 赋予执行权限

 sudo chmod +x /usr/local/bin/docker-compose
  1. 验证安装

 docker-compose --version

输出类似:Docker Compose version 2.22.0,表示安装成功。


用 Docker Compose 梭哈一个完整项目

项目场景:Java Web 应用 + MySQL + Redis

当你的项目需要同时运行 Java 应用、MySQL 数据库和 Redis 缓存时,一个简单的docker-compose.yml 文件就可以解决问题。

目录结构:

my-project/
├── app/
│   ├── Dockerfile
│   └── target/demo.jar
├── db/
│   └── init.sql
├── redis/
│   └── redis.conf
└── docker-compose.yml

docker-compose.yml 文件:

version: '3.8'services:
app:build:context:./appports:-"8080:8080"environment:-SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/demo-SPRING_DATASOURCE_USERNAME=root-SPRING_DATASOURCE_PASSWORD=root-SPRING_REDIS_HOST=redisdb:image:mysql:5.7ports:-"3306:3306"environment:MYSQL_ROOT_PASSWORD:rootMYSQL_DATABASE:demovolumes:-./db/init.sql:/docker-entrypoint-initdb.d/init.sqlredis:image:redis:7.0ports:-"6379:6379"volumes:-./redis/redis.conf:/usr/local/etc/redis/redis.confcommand:["redis-server","/usr/local/etc/redis/redis.conf"]
启动项目

在项目目录下运行以下命令:

docker-compose up --build

一条命令即可启动 Java Web 应用、MySQL 和 Redis 三个服务。


一键管理多容器

Docker Compose 提供了一系列便捷命令:

  1. 启动所有服务

 docker-compose up
  1. 停止所有服务

 docker-compose down
  1. 重启指定服务

 docker-compose restart app
  1. 查看服务日志

 docker-compose logs -f

使用 Docker Compose 的注意事项

  1. 容器间通信
    Docker Compose 会自动为所有服务创建一个默认网络,服务之间可以通过名称互相访问。

  2. 数据持久化
    确保数据库等重要数据使用挂载卷(volumes),避免容器重启后数据丢失。

  3. 资源分配
    在生产环境中,可以通过deploy 配置限制 CPU 和内存使用量。

  4. 环境变量管理
    使用.env 文件集中管理敏感信息,例如数据库密码。


总结

当项目需要多个容器协同工作时,Docker Compose 是最值得信赖的“梭哈”工具。它让开发者从繁琐的手动操作中解放出来,将多容器管理变得简单高效。不妨试试为你的项目编写一个docker-compose.yml 文件,体验一下“一键部署”的快感!

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

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

相关文章

C语言 —— 此去经年梦浪荡魂音 - 深入理解指针(卷一)

目录 1. 内存和地址 2. 指针变量和地址 2.1 取地址操作符(&) 2.2 指针变量 2.3 解引用操作符 (*) 3. 指针的解引用 3.1 指针 - 整数 3.2 void* 指针 4. const修饰指针 4.1 const修饰变量 4.2 const修饰指针变量 5…

【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目

【AI】从头到脚详解如何创建部署Azure Web App的OpenAI项目 在Azure Web应用上,您可以使用Python的OpenAI包方便快捷地调用官方API,上传您的训练数据,并利用他们的算法进行处理。本教程提供了一个逐步指南,帮助您在Azure Web应用上部署您的OpenAI项目,涵盖了从资源设置到…

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…

uni-app学习笔记——自定义模板

一、流程 1.这是一个硬性的流程,只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面,都如第二步一样;可以选择自定义的模版(vue3Setup——这是我自己的模版),第二步的…

DeepSeek模型本地化部署方案及Python实现

DeepSeek实在是太火了,虽然经过扩容和调整,但反应依旧不稳定,甚至小圆圈转半天最后却提示“服务器繁忙,请稍后再试。” 故此,本文通过讲解在本地部署 DeepSeek并配合python代码实现,让你零成本搭建自己的AI…

Vue3计算属性深度解析:经典场景与Vue2对比

一、计算属性的核心价值 计算属性(Computed Properties)是Vue响应式系统的核心特性之一,它通过依赖追踪和缓存机制优雅地解决模板中复杂逻辑的问题。当我们需要基于现有响应式数据进行派生计算时,计算属性总能保持高效的性能表现…

python-leetcode-删除链表的倒数第 N 个结点

LCR 021. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 可以使用双指针方法来解决这个问题,这样可以在一次遍历内完成删除操作,从而达到 O(n) 的时间复杂度。以下是 Python 代码实现: 解题思路: 初始化快…

vue2的webpack(vue.config.js) 怎么使用请求转发 devServer.proxy

首先用 express 搭建后端服务器,注意使用中间件解析json格式的请求体,才会获取到 post 参数 app.use(express.json()); app.js const express require(express) const app express() app.use(express.json()); const port 3000app.post(/api/vue2, …

Linux:基本指令与内涵理解

1.文件操作指令 1.1 ls ls指令用于查看指定层级文件夹下的文件或文件夹 基本格式:ls (选项) (查看层级) 其中选项处不写就默认是显示文件名,查看层级默认是当前层级 选项1: -l 作用:将查找文件的详细信息显示出来 我们…

SpaceSync智能排班:重构未来办公空间的神经中枢

文心智能体平台可免费使用DeepSeek 满血版啦,使用DeepSeek模型创建并提交智能体,即有机会瓜分万元奖金!有这等好事还不快冲! 文心智能体官网:文心智能体平台AgentBuilder | 想象即现实 本片文章为作者参加文心智能体平…

flutter dio库 源码赏析

1. factory函数 //调用factory构造方法后,实际返回的是Dio的子类 Dio dio Dio();abstract class Dio {factory Dio([BaseOptions? options]) > createDio(options); } 2. CancelToken 作用:取消操作 CancelToken cancelToken CancelToken();//监听取消 ca…

RGV调度算法

1、基于时间窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校数学建模挑战赛B题 2019-mathorcupB题-环形穿梭机调度模型&a…

基于CATIA VBA与Python的自动化音乐生成技术对比研究

在工程软件二次开发领域,CATIA 也可以许多另类的玩法。通过CATIA自带的VBA可以演奏歌曲,但实际效果往往差强人意。为了进一步优化实际演奏效果,本文以自动生成林宥嘉《说谎》钢琴前奏旋律为案例,探讨两种语言在多媒体控制领域的技…

最大数位置(信息学奥赛一本通-2038)

【题目描述】 输入n个整数,存放在数组a[1]至a[n]中,输出最大数所在位置(n≤1000)。 【输入】 第一行,数的个数n; 第二行,n个正整数,每个数在232−1之内。 【输出】 最大数所在位置。 【输入样例】 5 67 43 90 78 32 【输出样例】 …

【AIGC】OpenAI 集成 Langchain 操作实战使用详解

目录 一、前言 二、前置准备 2.1 安装 Langchain必须的依赖 2.1.1 python环境 2.1.2 langchain openai 环境 2.1.3 准备一个apikey 2.1.4 langchain 核心组件 三、Langchain 各组件使用 3.1 Chat models组件 3.1.1 Invocation 使用 3.1.1.1 结果解析 3.2 提示词模板…

【C#学习笔记04】深入掌握C语言格式化输出

引言 ​​printf()​​函数不仅可以将数据输出到控制台,还可以通过格式化字符串灵活地控制输出的格式。​​printf()​​​函数的使用规则,包括标志说明、字段宽度、转换精度、长度修饰、转换说明、转义字符和返回结果等内容。 1. ​​printf()​​函数…

python-leetcode-定长子串中元音的最大数目

1456. 定长子串中元音的最大数目 - 力扣(LeetCode) 可以使用 滑动窗口 方法来解决这个问题。步骤如下: 初始化:计算前 k 个字符中元音字母的个数,作为初始窗口的值。滑动窗口:遍历字符串,每次右…

蓝桥真题讲解

第一题 题目链接 0贪吃蛇长度 - 蓝桥云课 题目解析 题意:数#个数和个数再加上首尾 代码原理 略 代码编写 略 填空题技巧 眼看手数 当然并不是真的一个一个数,我们需要借助一些工具,不过各位小伙伴们放心,我们借助的工具…

【C++ 函数模板】—— 模板参数推导、实例化策略与编译优化

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

Java基础入门流程控制全解析:分支、循环与随机数实战

引言 流程控制是编程语言的核心逻辑结构,决定了程序的执行顺序与逻辑判断能力。本文以 分支结构、循环结构 和 随机数生成 为核心,结合代码示例与底层原理,全面解析Java中流程控制的应用场景与实战技巧。 一、分支结构 1. if分支 作用&am…