【docker】docker compose多容器部署
Docker Compose 的详细讲解与实际应用
-
什么是 Docker Compose?
Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。
通过一个docker-compose.yml文件,可以同时启动多个服务,简化多容器管理。 -
Docker Compose 的核心功能
- 服务定义:通过 YAML 文件描述服务的构建和运行方式。
- 网络通信:服务间自动创建网络通信,无需额外配置。
- 依赖管理:可以定义服务间的启动顺序。
- 多环境支持:通过
.env文件实现环境变量管理。
实际应用场景:部署微服务应用
场景:一个应用有三个服务:
web服务:前端 Web 应用,使用 Nginx。app服务:后端服务,使用 Python Flask。db服务:数据库,使用 MySQL。
优化后的文件结构
myapp/
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ ├── app.py
│ └── requirements.txt
└── db/
docker-compose.yml 文件
version: '3.8'services:web:image: nginx:latestports:- "8080:80"networks:- myapp_networkapp:build:context: ./appdockerfile: Dockerfilenetworks:- myapp_networkdepends_on:- dbdb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: rootpasswordMYSQL_DATABASE: myappnetworks:- myapp_networknetworks:myapp_network:driver: bridge
app/Dockerfile 文件
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
app/requirements.txt 文件
flask
mysql-connector-python
app/app.py 文件
from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello, Docker Compose!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
-
操作步骤
- 构建并启动服务:
docker-compose up --build - 查看运行的容器:
docker-compose ps - 停止服务:
docker-compose down - 查看容器日志:
docker-compose logs
- 构建并启动服务:
-
应用网络配置
- Docker Compose 默认为每个项目创建独立的网络,服务之间通过服务名称通信。
- 例如:
app服务可以通过db直接访问数据库,无需额外配置 IP 地址。
-
扩展:多环境支持
- 使用
.env文件管理环境变量。 - 在
docker-compose.yml中通过${VAR_NAME}引用环境变量。 - 示例
.env文件:MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=myapp - 修改
docker-compose.yml:environment:MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}MYSQL_DATABASE: ${MYSQL_DATABASE}
- 使用
-
总结
Docker Compose 简化了多容器应用的管理流程,通过 YAML 文件定义服务间依赖、网络和存储配置,适合开发、测试和生产环境。
相关文章:
【docker】docker compose多容器部署
Docker Compose 的详细讲解与实际应用 什么是 Docker Compose? Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。 通过一个 docker-compose.yml 文件,可以同时启动多个服务,简化多容器管理。 Docker Compose 的核心…...
JS +CSS @keyframes fadeInUp 来定义载入动画
JSCSS 更完美展现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>跳动加载指示器</title>&l…...
Seatunnel解决ftp读取json文件无法读取数组以及格式化之后的json无法解析的问题
问题原因 在JsonRead这个方法里面 在源码中使用的逻辑是读取一行 然后把这个json进行解析 但是这样存在一个问题 比如如果json的格式是这样的 { name:“zhangsan”, age:25 } 如果是这样的话 第一行读到的内容就是 { 显然 一个 { 并不是一个…...
Elasticsearch在liunx 中单机部署
下载配置 1、下载 官网下载地址 2、上传解压 tar -zxvf elasticsearch-XXX.tar.gz 3、新建组和用户 (elasticsearch 默认不允许root账户) #创建组 es groupadd es #新建用户 useradd ryzhang -g es 4、更改文件夹的用户权限 chown -R ryzhang …...
深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
在移动应用开发中,页面的跳转和导航一直是核心功能之一。对于 HarmonyOS 开发者来说,Navigation 组件提供了一个强大的工具来实现灵活的页面管理和导航体验。今天,我们将深入探讨如何使用 HarmonyOS 中的 Navigation 组件来管理页面跳转、工具…...
【CUDA】CUDA Hierarchy
【CUDA】CUDA 基本概念和 Hierarchy CUDA 编程基础:Host 和 Device 工作流程 首先简单介绍CUDA 编程的基本概念:讲解 Host(CPU)与 Device(GPU)的区别、内存管理以及 CUDA 运行时的工作机制。 Host&#x…...
28.100ASK_T113-PRO Linux+QT 显示一张照片
1.添加资源文件 2. 主要代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QImage> #include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QIm…...
GitLab使用中遇到的一些问题-记录
错误内容一 Warning: Permanently added gitlab.com (ED25519) to the list of known hosts. gitgitlab.com: Permission denied (publickey). Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. …...
【微服务】Docker
一、Docker基础 1、依赖的兼容问题:Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像Docker应用运行在容器中,使用沙箱机制,相互隔离。 2、如何解决开发、测试、生产环境有差异的问题:Docker镜像…...
【C#】书籍信息的添加、修改、查询、删除
文章目录 一、简介二、程序功能2.1 Book类属性:方法: 2.2 Program 类 三、方法:四、用户界面流程:五、程序代码六、运行效果 一、简介 简单的C#控制台应用程序,用于管理书籍信息。这个程序将允许用户添加、编辑、查看…...
Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境
文章目录 一、VSCode配置Node.js运行环境1、软件安装2、安装Node.js插件3、配置VSCode4、创建并运行Node.js文件5、调试Node.js代码 一、VSCode配置Node.js运行环境 1、软件安装 安装下面的软件: 安装Node.js:Node.js官网 下载Node.js安装包。建议选择L…...
Spark常问面试题---项目总结
一、数据清洗,你都清洗什么?或者说 ETL 你是怎么做的? 我在这个项目主要清洗的式日志数据,日志数据传过来的json格式 去除掉无用的字段,过滤掉json格式不正确的脏数据 过滤清洗掉日志中缺少关键字段的数据ÿ…...
【AI系统】Auto-Tuning 原理
Auto-Tuning 原理 在硬件平台驱动算子运行需要使用各种优化方式来提高性能,然而传统的手工编写算子库面临各种窘境,衍生出了自动生成高性能算子的的方式,称为自动调优。在本文我们首先分析传统算子库面临的挑战,之后介绍基于 TVM…...
AMEYA360:上海永铭电子全新高压牛角型铝电解电容IDC3系列,助力AI服务器电源高效运转
随着数据中心和云计算的高速发展,AI服务器的能效要求日益提高。如何在有限空间内实现更高的功率密度和稳定的电源管理,成为AI服务器电源设计的一大挑战。永铭推出全新高压牛角型铝电解电容IDC3系列,以大容量、小尺寸的创新特性,为…...
echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip
一.地图立体效果 方法1:两层地图叠加 实现原理:geo数组中放入两个地图对象,通过修改zlevel属性以及top,left,right,bottom形成视觉差 配置项参考如下代码: geo: [{zlevel: 2,top: 96,map: map,itemStyle: {color: #091A51ee,opacity: 1,borderWidth: 2,borderColor: #16BAFA…...
什么是 Socket?
Socket(套接字)是计算机网络编程中的一个重要概念,它用于在不同计算机之间进行通信。Socket 提供了一种机制,使得应用程序可以通过网络发送和接收数据。Socket 通信通常基于 TCP/IP 协议,但也可以使用其他协议…...
【版本控制】SVN安装到使用一条路讲解
文章目录 安装使用 Subversion (SVN) 是一款集中式版本控制系统,广泛应用于团队协作和代码管理中。尽管随着 Git 的兴起,集中式版本控制逐渐被分布式工具取代,但 SVN 仍在许多企业项目中发挥着重要作用。它的简单、稳定和易用特性,…...
KVCKVO
KVC KVC意思是键值编码,是一种可以通过键名来访问对象属性的机制,也可以对属性进行赋值,包括私有属性,由于KVC的定义是对OC中的NSObject的扩展进行实现的,所以如果要使用KVC机制,那么这个类需要继承NSObje…...
PyQt设计界面优化 #qss #ui设计 #QMainWindow
思维导图 通过qss实现ui界面设计优化 Qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性,它是用来美化UI界面。实现界面和程序的分离,快速切换界面。 首先我们在Pytchram创建一个新目录 然后将我们所需要的图片打…...
Qt Serial Bus 前置介绍篇
文章目录 Qt Serial Bus 简介前言 什么是 Qt Serial Bus?Qt Serial Bus 的核心功能支持的协议1. **CAN 总线**2. **Modbus**3. **自定义协议** 应用场景优势总结 Qt Serial Bus 简介 前言 Qt Serial Bus 是 Qt 框架中的一个模块,用于与工业设备和嵌入式…...
基于单片机的汽车雨刷器装置
文章目录一、摘要二、系统设计总体思路三、系统方案设计四、效果图源码获取一、摘要 下雨天时道路十分模糊,能见度非常低,司机分散注意力去手动打开雨刷器开关会非常危险。据统计,全世界雨天行车的车祸事故有7%是因为司机手动打开…...
3步解锁LunaTranslator:零基础也能掌握的视觉小说翻译解决方案
3步解锁LunaTranslator:零基础也能掌握的视觉小说翻译解决方案 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 日语视觉小说语言障碍让你望而却步?…...
网络协议深度解析:TCP的SACK机制引入是为了解决什么问题?原理+流程图+场景全解
网络协议深度解析:TCP的SACK机制引入是为了解决什么问题?原理流程图场景全解一、前言二、前置知识:快速重传的致命缺陷2.1 传统快速重传的工作方式2.2 核心问题(SACK 要解决的问题)三、SACK 机制是为了解决什么问题&am…...
告别资源获取繁琐,实现高效资源管理与效率提升
告别资源获取繁琐,实现高效资源管理与效率提升 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-downloader是一…...
DeadLock v1.5.1 是专业 Windows 文件解锁工具,可视化占用状态,一键解锁 + 强制删除 / 移动
大家好,我是大飞哥。在 Windows 系统的日常使用中,用户常遇到文件 / 文件夹被进程占用、无法删除、移动或修改的痛点,系统自带功能无法直接解锁,手动排查占用进程操作繁琐,专业工具又操作复杂、学习门槛高,…...
在RK3588上搞定XDMA AXI-Stream回环测试:从Verilog到Rust的完整流程与避坑指南
RK3588平台XDMA AXI-Stream全链路开发实战:从FPGA设计到Rust测试的工程化实现 当我们需要在嵌入式系统中实现高速数据交换时,PCIeAXI-Stream的组合无疑是黄金搭档。RK3588作为一款高性能处理器,配合FPGA的灵活可编程特性,能够构建…...
业务流程及业务流程优化
业务流程业务流程是指为了实现特定业务目标,将一系列相互关联的活动、任务按照一定的顺序和规则进行组织和执行的过程。它涵盖了从业务起始到结束的整个过程,涉及到人员、设备、信息等多种资源的协调与运用。以下是对业务流程的详细阐述:构成…...
Go JSON 编解码性能优化技巧
Go语言因其高效的并发模型和简洁的语法广受开发者喜爱,但在处理JSON编解码时,性能问题常成为瓶颈。随着微服务和高并发场景的普及,优化JSON处理效率变得尤为重要。本文将分享几个实用的Go JSON编解码性能优化技巧,帮助开发者提升应…...
Wan2.2-I2V-A14B与Visio流程图结合:让架构图“动”起来
Wan2.2-I2V-A14B与Visio流程图结合:让架构图"动"起来 1. 静态架构图的痛点与动态化需求 在日常技术方案沟通中,我们经常使用Visio绘制各类架构图、网络拓扑图和业务流程图。这些静态图表虽然能清晰展示系统结构,但在演示数据流向…...
OFDM802.11a的FPGA实现(八)二级交织:子载波交织优化策略(附Verilog与Matlab对比)
1. 二级交织在802.11a中的核心作用 在无线通信系统中,突发错误是导致数据传输失败的主要原因之一。802.11a标准采用二级交织技术来解决这个问题,它通过重新排列数据比特的顺序,使得原本连续的突发错误在接收端被分散开来。这种技术就像是洗牌…...
