利用Docker Compose构建微服务架构

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

利用Docker Compose构建微服务架构

    • 引言
    • Docker Compose 简介
      • 安装 Docker Compose
      • 创建项目结构
      • 编写 Dockerfile
        • 前端 Dockerfile
        • 后端 Dockerfile
        • 数据库 Dockerfile
      • 编写 docker-compose.yml
      • 启动服务
      • 访问应用
      • 关闭服务
    • 微服务之间的通信
    • 环境变量
    • 总结

引言

随着互联网技术的发展,传统的单体应用已经无法满足现代业务的需求。为了提高系统的可伸缩性、灵活性以及维护性,越来越多的开发者开始转向微服务架构。Docker Compose 是 Docker 官方提供的工具,用于定义和运行多容器 Docker 应用程序。本文将介绍如何使用 Docker Compose 构建一个简单的微服务架构。

Docker Compose 简介

Docker Compose 允许你在一个 YAML 文件中定义多个容器及其依赖关系,然后通过一个命令启动所有服务。这大大简化了多服务应用的部署过程。

安装 Docker Compose

在使用 Docker Compose 之前,需要先安装 Docker。安装完成后,可以通过以下命令安装 Docker Compose:

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

编写 Dockerfile

前端 Dockerfile
frontend 目录下创建 Dockerfile

FROM node:14WORKDIR /appCOPY package*.json ./
RUN npm install
COPY . .EXPOSE 3000
CMD ["npm", "start"]

后端 Dockerfile
backend 目录下创建 Dockerfile

FROM python:3.8-slimWORKDIR /appCOPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .EXPOSE 5000
CMD ["python", "app.py"]

数据库 Dockerfile
db 目录下创建 Dockerfile

FROM postgres:13ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword
ENV POSTGRES_DB=mydb

编写 docker-compose.yml

在项目根目录下创建 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 使得微服务架构的构建变得更加简单和高效。
Docker Compose 服务启动图

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

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

相关文章

Redis未授权访问漏洞复现和修复建议

Redis未授权访问漏洞利用(总结) 一、漏洞介绍及危害1.1 原理1.2 漏洞影响版本1.3 漏洞危害1.4 实战中redis常用命令 二、漏洞复现2.1 环境准备2.1.1 靶机安装redis服务器2.1.2 kali安装Redis客户端(Redis-cli) 三、漏洞利用3.1 利…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略,以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法: 一、编队控制方法 领航-跟随法(Leader-Follower) 通过设定一架无人机作为领航者(长机&am…

流水线商品标签如何快速打印?商品标签自定义打印软件操作方法

一、概述 【软件可定制详情点文章最后信息卡片】 流水线商品标签如何快速打印?商品标签自定义打印软件操作方法 ‌定义与用途‌ 商品标签打印软件,即用于打印商品标签的应用软件。标签包含产品上的文字、商品详情等说明信息 如图,可以预先…

不只是任务分配!管理者应具备的核心认知

背景 二十年,中国的互联网行业飞速发展,让无数年轻人有了从技术岗走向管理岗的机会。然而,许多工程师在走上管理岗位时往往是“仓促上任”,没有足够时间适应管理工作和责任。少数悟性高、能力突出的工程师能够迅速胜任&#xff0…

第二十五章 Vue父子通信之sync修饰符

目录 一、概述 二、完整代码 2.1. main.js 2.2. App.vue 2.3. BaseDialog.vue 三、运行效果 一、概述 前面的章节我们讲到,通过v-model我们可以实现父子组件间的通信,但是使用v-model的时候,子组件接收的prop属性名必须固定为valu…

【浪潮商城-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

轻松成为文本文件管理大师,将每个文件夹中的所有TXT分别合并成一个文本文档,发现办公软件TXT合并功能的无限可能

文本文件如潮水般涌来,管理它们成为了一项令人头疼的任务。但是,别怕,有了首助编辑高手软件,你将成为办公软件达人,轻松驾驭这些文本文件,体验无限魅力!想象一下,杂乱无章的文件夹瞬…

安卓13默认连接wifi热点 android13默认连接wifi

总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有时候我们需要让固件里面内置好,相关的wifi的ssid和密码,让固件起来就可以连接wifi,不用在手动操作。 2.问题分析 这个功能,使用普通的安卓代码就可以实现了。 3.代…

青春的海洋:海滨学院班级回忆录项目

3系统分析 3.1可行性分析 通过对本海滨学院班级回忆录实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本海滨学院班级回忆录采用SSM框架,JAVA作为开…

基于matlab的线性卷积演示系统

文章目录 前言1. 卷积的简单介绍1.1 翻褶1.2 移位1.3 相乘1.4相加1.5 整体的运行效果展示 2.App Designer的介绍3.具体的开发步骤3.1 声明成员变量3.2 设计基本布局3.3 编写回调函数 4.运行展示结语 前言 本篇文章按照如下要求,完成线性卷积演示系统 (1)用matlab完…

如何在Linux命令行中使用GhatGPT

2、验明正身,证明我的所在地是国内 3、第一次提问 4、第二次提问 5、问他一首古诗 6、话不多说,现在来展示他的安装过程 7、输入GitHub的网址 https://github.com/aandrew-me/tgpt 8、详情页向下翻 9、到终端输入 下列命令,等待安装&#x…

java并发编程-volatile的作用

文章目录 volatile的作用1.改变线程间的变量可见性2.禁止指令重排序 参考的学习视频 volatile的作用 1.改变线程间的变量可见性 每个线程都有一个专用的工作集内存,下图里面粉色的表示专用工作集内存,黄色的是共享内存工作区,如果加入了vol…

linux中级(防火墙firewalld)

一。firewalld与iptables区别1.firewalld可以动态修改单条规则,不需要像iptables那样,修改规则后必须全部刷新才可生效。firewalld默认动作是拒绝,则每个服务都需要去设置才能放行,而iptables里默认是每个服务是允许,需…

C#/.NET/.NET Core学习路线集合,学习不迷路!

前言 C#、.NET、.NET Core、WPF、WinForm、Unity等相关技术的学习、工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习、工作、面试指南:https://github.com/YSGStudyHards/DotNetGuide C#/.NET/.N…

Linux 实例:无法通过 SSH 方式登录

现象描述 使用 SSH 登录 Linux 实例 时,提示无法连接或者连接失败,导致无法正常登录 Linux 实例。 现象描述 处理措施 SSH 登录报错 User root not allowed because not listed in AllowUsers 排查 SSH 登录报错 User root not allowed because not …

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储? 阿里云对象存储OSS(Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

当下的力量:拥抱自我与持续学习的旅程

许多人被无尽的选择与信息所淹没,常常感到迷茫与焦虑。然而,真正的力量来自于对当下的专注,以及对自我的深刻理解与不断提升。如何在喧嚣中找到内心的宁静?如何在复杂的世界中坚持学习与成长?这不仅是一个时代的问题&a…

【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 其他系列 本人系列文章-CSDN博客 1.简介 前面两篇我们主要介绍了有回复和无回复的消息的使用方法和源码解析&a…

GPRS是什么?

‌GPRS(General Packet Radio Service)‌是一种基于GSM(Global System for Mobile Communications)系统的无线分组交换技术,提供端到端的广域无线IP连接。与传统的GSM系统不同,GPRS采用分组交换技术&#x…

flutter 专题二 Flutter状态管理之Riverpod 0.8.4

一 、flutter 有哪些状态管理方式 Flutter的状态管理方式有很多,Redux、 Bloc、 MobX、Provider等等。单单一个Provider,我也见到了各种组合,例如ChangeNotifier Provider / StateNotifier Provider( freezed)。各…