利用Docker Compose构建微服务架构
💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》
利用Docker Compose构建微服务架构
- 引言
- Docker Compose 简介
- 安装 Docker Compose
- 创建项目结构
- 编写 Dockerfile
- 前端 Dockerfile
- 后端 Dockerfile
- 数据库 Dockerfile
- 编写 docker-compose.yml
- 启动服务
- 访问应用
- 关闭服务
- 微服务之间的通信
- 环境变量
- 总结
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
假设我们要构建一个包含前端、后端和数据库的微服务架构。项目结构如下:
microservices/
├── frontend/
│ └── Dockerfile
├── backend/
│ ├── app.py
│ └── Dockerfile
├── db/
│ └── Dockerfile
└── docker-compose.yml
在
frontend 目录下创建
Dockerfile:
FROM node:14WORKDIR /appCOPY package*.json ./
RUN npm install
COPY . .EXPOSE 3000
CMD ["npm", "start"]
在
backend 目录下创建
Dockerfile:
FROM python:3.8-slimWORKDIR /appCOPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .EXPOSE 5000
CMD ["python", "app.py"]
在
db 目录下创建
Dockerfile:
FROM postgres:13ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword
ENV POSTGRES_DB=mydb
在项目根目录下创建
docker-compose.yml 文件:
version: '3'services:frontend:build: ./frontendports:- "3000:3000"depends_on:- backendbackend:build: ./backendports:- "5000:5000"depends_on:- dbdb:build: ./dbenvironment:POSTGRES_USER: myuserPOSTGRES_PASSWORD: mypasswordPOSTGRES_DB: mydb
在项目根目录下运行以下命令启动所有服务:
docker-compose up
打开浏览器,访问
http://localhost:3000,你应该能够看到前端应用。后端服务将在
http://localhost:5000 上运行。
要关闭所有服务,可以在终端中按
Ctrl+C,或者运行以下命令:
docker-compose down
在微服务架构中,服务之间需要相互通信。Docker Compose 提供了一个内部网络,使得服务之间可以通过服务名进行通信。
例如,在后端服务中,可以通过以下方式连接到数据库:
import psycopg2conn = psycopg2.connect(host='db',port=5432,user='myuser',password='mypassword',dbname='mydb'
)
在生产环境中,通常会使用环境变量来管理配置信息。Docker Compose 支持从
.env 文件中读取环境变量。
在项目根目录下创建 .env 文件:
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
POSTGRES_DB=mydb
然后在 docker-compose.yml 中引用这些环境变量:
version: '3'services:frontend:build: ./frontendports:- "3000:3000"depends_on:- backendbackend:build: ./backendports:- "5000:5000"depends_on:- dbenvironment:- DATABASE_HOST=db- DATABASE_PORT=5432- DATABASE_USER=${POSTGRES_USER}- DATABASE_PASSWORD=${POSTGRES_PASSWORD}- DATABASE_NAME=${POSTGRES_DB}db:build: ./dbenvironment:POSTGRES_USER: ${POSTGRES_USER}POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}POSTGRES_DB: ${POSTGRES_DB}
通过本文,你已经学会了如何使用 Docker Compose 构建一个简单的微服务架构。Docker Compose 的强大之处在于它能够简化多服务应用的部署过程,使得开发者可以更专注于业务逻辑的实现。
Docker Compose 使得微服务架构的构建变得更加简单和高效。

相关文章:
利用Docker Compose构建微服务架构
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 利用Docker Compose构建微服务架构 引言 Docker Compose 简介 安装 Docker Compose 创建项目结构 编写 Dockerfile 前端 Dockerf…...
数据中台一键大解析!
自从互联玩企业掀起了数据中台风,数据中台这个点马上就火起来了,短短几年数据中台就得到了极高的热度,一大堆企业也在跟风做数据中台,都把数据中台作为企业数字化转型的救命稻草,可是如果我告诉你数据中台并不是万能钥…...
MySQL45讲 第十六讲 “order by”是怎么工作的?
文章目录 MySQL45讲 第十六讲 “order by”是怎么工作的?一、引言二、全字段排序(一)索引创建与执行情况分析(二)执行流程(三)查看是否使用临时文件 三、rowid 排序(一)参…...
智慧商城项目-VUE2
实现效果 项目收获 通过本项目的练习,可以掌握以下内容: 创建项目 ##基本创建 基于 VueCli 自定义创建项目架子,并对相关的配置进行选择 vue create demo-shopping调整目录 删除文件 删除初始化的一些默认文件 src/assets/logo.pngsrc/components…...
音视频入门基础:FLV专题(22)——FFmpeg源码中,获取FLV文件音频信息的实现(中)
本文接着《音视频入门基础:FLV专题(21)——FFmpeg源码中,获取FLV文件音频信息的实现(上)》,继续讲解FFmpeg获取FLV文件的音频信息到底是从哪个地方获取的。本文的一级标题从“四”开始。 四、音…...
Chrome与火狐哪个浏览器的性能表现更好
在数字时代,浏览器是我们日常生活中不可或缺的工具。无论是工作、学习还是娱乐,一个好的浏览器都能显著提高我们的效率和体验。市场上有许多优秀的浏览器,其中Google Chrome和Mozilla Firefox无疑是最受欢迎的两款。本文将比较这两款浏览器的…...
uniapp在js方法中,获取当前用户的uid(uni-id-user)表中的用户id
// 1.判断当前用的权限 let uid uniCloud.getCurrentUserInfo().uid //获取当前用户的uid // 用户uid等于发布者id或者用户权限等于admin或者用户角色等于webmaster if (uid this.item.user_id[0]._id || this.uniIDHasRole…...
影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台
影响神经网络速度的四个主要因素分别是 FLOPs(浮点操作数)、MAC(内存访问成本)、并行度以及计算平台。这些因素共同作用,直接影响到神经网络的计算速度和资源需求。 1. FLOPs(Floating Point Operations&a…...
【万字详解】如何在微信小程序的 Taro 框架中设置静态图片 assets/image 的 Base64 转换上限值
设置方法 mini 中提供了 imageUrlLoaderOption 和 postcss.url 。 其中: config.limit 和 imageUrlLoaderOption.limit 服务于 Taro 的 MiniWebpackModule.js , 值的写法要 ()KB * 1024。 config.maxSize 服务于 postcss-url 的…...
复合选择器,CSS特性,背景属性,显示模式(HTML)
目录 复合选择器,CSS特性,背景属性,显示模式知识点: 练习一: 练习二: 复合选择器,CSS特性,背景属性,显示模式知识点: 复合选择器:后代选择器 :父选择器 子选择器(中间用空格隔开) eg:对div中的span进行设置,会对后代中的所有span都进行设置 选中所有后代(后代选择器.html)…...
加密货币行业与2024年美国大选
加密货币行业经历了近十年的飞速发展,尤其是在比特币、以太坊等主要加密资产的兴起之后,越来越多的美国人开始将其视为一种财富积累或交易的工具。然而,尽管这一新兴行业的市场规模在持续扩大,但加密货币仍面临着重重监管难题&…...
Hive SQL中判断内容包含情况的全面指南
Hive SQL中判断内容包含情况的实用指南 在 Hive SQL 的数据处理与分析世界里,判断字段是否包含特定内容是一项非常重要的操作。今天,我将为大家详细介绍 Hive SQL 中实现这一功能的多种方法,并附上相应的表创建和数据插入语句。 一、准备工作 - 表创建与数据插入 首先,我…...
匿名管道 Linux
目录 管道 pipe创建一个管道 让子进程写入,父进程读取 如何把消息发送/写入给父进程 父进程该怎么读取呢 管道本质 结论:管道的特征: 测试管道大小 写端退了,测试结果 测试子进程一直写,父进程读一会就退出 …...
苍穹外卖WebSocket无法建立连接 (修改前端代码)
我在部署nginx 反向代理服务器时,把80端口改成了90端口(不与80端口的Tomcat冲突)。 但黑马的资料里定义了前端连接nginx的端口号默认为80,造成连接不上的问题,此时只需要修改前端的端口号,使其知道如何连接到修改后的后端端口。 …...
音频内容理解
音频内容理解是音频处理和理解领域的一个重要方向,它涉及到从环境声音中提取语义信息,并能够对这些声音进行解释和描述。以下是音频内容理解的几个关键应用: 1. 音频问答(Audio Question Answering, AQA) 在这个任务…...
MQTT实用示例集:Air201版
今天贴出的是Air201版关于MQTT实用示例集,希望大家喜欢。 本示例教你通过使用脚本代码,对Air201模组进行MQTT链接操作。 操作例程包括: MQTT单链接 MQTT多链接 MQTT SSL不带证书链接 MQTT SSL带证书链接 大家可根据自身需求,…...
Day23 opencv图像预处理
图像预处理 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,常见的操作包括图像空间转换、图像大小调…...
优化模型训练过程中的显存使用率、GPU使用率
参考:https://blog.51cto.com/u_16099172/7398948 问题:用小数据集训练显存使用率、GPU使用率正常,但是用大数据集训练GPU使用率一直是0. 小数据: 大数据: 1、我理解GPU内存占用率显存使用率,由模型的大小…...
RocketMQ学习笔记
RocketMQ笔记 文章目录 一、引言⼆、RocketMQ介绍RocketMQ的由来 三、RocketMQ的基本概念1 技术架构2 部署架构 四、快速开始1.下载RocketMQ2.安装RocketMQ3.启动NameServer4.启动Broker5.使⽤发送和接收消息验证MQ6.关闭服务器 五、搭建RocketMQ集群1.RocketMQ集群模式2.搭建主…...
Linux第三讲:环境基础开发工具使用
Linux第三讲:环境基础开发工具使用 1.Linux软件包管理器yum1.1什么是软件包管理器1.2操作系统生态问题1.3什么是yum源 2.vim详解2.1什么是vim2.2vim的多模式讲解2.2.1命令模式的诸多指令2.2.1.1gg和nshiftg2.2.1.2shift$和shift^2.2.1.3上、下、左、右2.2.1.4w和b2.…...
3步掌握React Easy Crop:从零到精通的图像裁剪完整指南
3步掌握React Easy Crop:从零到精通的图像裁剪完整指南 【免费下载链接】react-easy-crop A React component to crop images/videos with easy interactions 项目地址: https://gitcode.com/gh_mirrors/re/react-easy-crop 你是否在为React应用中的图片裁剪…...
为什么你的Gemini总在“浅层回答”?揭秘深度研究模式的3层激活机制与强制触发密钥
更多请点击: https://intelliparadigm.com 第一章:为什么你的Gemini总在“浅层回答”? 当你反复向 Gemini 提问却只得到泛泛而谈、回避细节或机械复述提示词的答案时,问题往往不在模型本身,而在于**交互范式与上下文工…...
教师增强器:AI如何真正赋能一线教学而非替代教师
1. 这不是一场技术秀,而是一场教育现场的“静默革命”“AI正在重塑教育”——这句话听上去像极了科技发布会的开场白,但如果你真走进过北京某所公立小学的三年级语文课堂,或者旁听过深圳一所职校的数控编程实训课,你就会发现&…...
【架构实战】GitOps实践:让运维更优雅
【架构实战】GitOps实践:让运维更优雅 字数统计:约3600字 一、真实故事引入:一次误删引发的运维革命 2024年春天,我们团队负责维护一个拥有23个微服务的K8s生产集群,当时的运维方式还停留在"半自动化"阶段&a…...
ncmdump:网易云NCM音乐解密转换终极指南
ncmdump:网易云NCM音乐解密转换终极指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 在数字音乐时代,网易云音乐的NCM加密格式成为众多音乐爱好者的使用障碍。ncmdump作为一款高效的开源解密工具ÿ…...
Feishin:3个核心功能带你体验现代化自托管音乐播放器
Feishin:3个核心功能带你体验现代化自托管音乐播放器 【免费下载链接】feishin A modern self-hosted music player. 项目地址: https://gitcode.com/gh_mirrors/fe/feishin Feishin是一个现代化的自托管音乐播放器客户端,专为个人音乐服务器设计…...
功能子图检测技术在集成电路设计中的应用与优化
1. 功能子图检测技术概述 在集成电路设计领域,功能子图检测是一项基础而关键的技术。简单来说,它就像是在一堆乐高积木搭建的复杂结构中,找出那些功能相同但拼法可能不同的组件模块。这项技术的核心任务是判断一个给定的子图Q是否是目标图G的…...
React Native Deck Swiper事件处理完全指南:从基础回调到复杂交互
React Native Deck Swiper事件处理完全指南:从基础回调到复杂交互 【免费下载链接】react-native-deck-swiper tinder like react-native deck swiper 项目地址: https://gitcode.com/gh_mirrors/re/react-native-deck-swiper React Native Deck Swiper是一…...
如何用Python快速接入Taotoken调用多模型API完成开发任务
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 如何用Python快速接入Taotoken调用多模型API完成开发任务 对于开发者而言,快速验证想法、构建原型是开发流程中的关键环…...
【 linux 】来完成一个进度条吧
c语言是有缓冲区的,缓冲区刷新有三种方式,输入\n,程序结束后自动刷新,fflush(stdout)手动刷新。效果展示视觉上#是逐个往后加的,这是视觉欺骗。事实是每次#都是从头开始的,只不过计算…...
