Docker-Compose概述与简单编排部署

目录

前言

一、Docker-Compose 概述

1、Docker-Compose 概念

2、Docker-Compose 优缺点

2.1 Docker-Compose 优点

2.2 Docker-Compose 缺点

3、Docker-Compose与Docker-Swarm的区别

二、两大文件格式

1、YAML 文件格式

2、JOSON 文件格式

3、YAML 与 JOSON 格式的区别

三、Docker-Compose.yml 文件格式

1、数据结构

1.1 对象映射:

1.2 序列数组

1.3 布尔值

2、Docker-Compose 配置常用字段

3、Docker-Compose 常用命令

四、Docker-Compose 环境安装

五、 Docker-Compose 简单编排部署

1、Nginx Docker-Compose编排

1.1 建立工作目录并上传相关安装包

1.2 编写 Nginx Dockerfile 脚本

1.3 创建网页目录和文件

1.4 编写配置文件 docker-compose.yml

1.5 Nginx Docker-Compose 文件结构

1.6 启动 Docker 容器

1.7 浏览器测试页面

2、nginx+tomcat docker-compose编排

1.1 建立工作目录并上传相关安装包

1.2 编写 Tomcat Dockerfile 脚本

1.3 修改配置文件 docker-compose.yml

1.4 Nginx+Tomcat Docker-Compose 文件结构

1.5 启动 Docker 容器


前言

  • 在当今软件开发和部署的环境中,容器化技术已经成为主流。Docker Compose 在这一背景下应运而生,为开发人员和运维团队提供了一种便捷的方式来定义和管理多个容器化应用程序的部署
  • 使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。服务编排有很多种技术方案,今天给大家介绍 Docker 官方产品 Docker Compose 
  • Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等

一、Docker-Compose 概述

1、Docker-Compose 概念

  • Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
  • Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡,比如 Consul
  • Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器
  • 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等
  • Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
  • Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API, 就可以在其上利用Compose来进行编排管理

2、Docker-Compose 优缺点

2.1 Docker-Compose 优点

  • 简化部署: Docker Compose 可以通过一个 YAML 文件定义整个应用程序的组件,使得部署变得简单且可重复

  • 容器编排: 允许用户轻松地定义多个相互关联的容器,实现容器编排,确保各个组件可以协同工作

  • 环境一致性: 使用 Docker Compose 可以确保开发、测试和生产环境中的容器配置保持一致,减少了环境引起的问题

  • 快速启动: 一条命令即可启动整个应用程序,节省了时间和精力,特别适用于开发和测试环境

  • 易于维护: 通过统一的配置文件管理多个服务,便于维护和更新

2.2 Docker-Compose 缺点

  • 不适用于大型集群: 对于大规模的、需要高度扩展性和动态调整的应用程序,Docker Compose 显示出了一些局限性,这时候可能需要更为强大的编排工具,比如 Kubernetes

  • 单机限制: Docker Compose 针对单机或者少量主机的场景设计,如果需要跨主机的容器编排,需要额外考虑其他解决方案

  • 监控和治理: 在生产环境中,监控和治理方面的需求可能超出了 Docker Compose 的能力范围,需要额外的工具来支持

总体来说,Docker-Compose 在简化部署、容器编排、环境一致性等方面有着明显的优势,但在大规模集群、监控治理等方面存在一定的局限性 

3、Docker-Compose与Docker-Swarm的区别

Docker-Compose和Docker-Swarm是两个不同的工具,用于管理Docker容器的部署和运行,它们之间有一些重要的区别:

  • Docker-Compose:

    • Docker-Compose是用于定义和运行多容器Docker应用程序的工具。它使用YAML文件来配置应用程序的服务、网络和卷等信息,并通过一个命令来启动、停止和管理整个应用程序的容器
    • Docker-Compose适用于在单个主机上部署和管理容器化应用程序,通常用于开发和测试环境
  • Docker-Swarm:

    • Docker-Swarm是Docker官方提供的容器编排工具,用于在多个Docker主机上部署和管理容器化应用程序。它允许将多个Docker主机组成一个集群,统一管理和调度容器的部署
    • Docker-Swarm支持高可用性、负载均衡和自动容器恢复等功能,适用于生产环境中需要横向扩展和高可用性的场景

总的来说,Docker-Compose更适合于单个主机上的开发和测试环境,而Docker-Swarm适合于生产环境中需要在多个主机上部署和管理容器的场景

二、两大文件格式

1、YAML 文件格式

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 XML数据描述语言,语法比 XML 简单的很多。

YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [ ] 括起来, hash 用花括号 { } 括起来

使用 YAML 时需要注意下面事项:

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释
  • 符号字符后缩进1个空格,如冒号 :  、逗号 ,  、横杠 -    
  • 如果包含特殊字符用单引号(' ')引起来会作为普通字符串处理,双引号(" "): 特殊字符作为本身想表示的意思

2、JOSON 文件格式

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于前后端数据传输和配置文件等场景

对象: JSON 使用花括号 {} 表示对象,对象由键值对组成,键和值之间使用冒号 : 分隔,不同键值对之间使用逗号 , 分隔

数组: JSON 使用方括号 [] 表示数组,数组中可以包含多个值,各个值之间使用逗号 , 分隔

字符串: 字符串需要使用双引号 " 括起来

使用 JOSON 时需要注意下面事项:

  • 正确格式: JSON 必须严格遵循其定义的格式,包括花括号、方括号、逗号、冒号等

  • 嵌套结构: JSON 支持嵌套的对象和数组,但要确保嵌套结构的格式正确

  • 字符串转义: 特殊字符需要进行转义,例如 \n 表示换行符,\t 表示制表符等

  • 数据类型: JSON 中支持字符串、数字、布尔值、对象、数组等数据类型,需根据实际情况选择合适的数据类型

  • 注释: JSON 标准不支持注释,因此在 JSON 文件中不能添加注释

  • 编码: 在网络传输时,需要确保 JSON 数据按照 UTF-8 或其他适当的编码进行编码

  • 错误处理: 解析 JSON 时要处理可能出现的解析错误,以及确保所生成的 JSON 是有效的

3、YAML 与 JOSON 格式的区别

可读性

  • YAML 擅长人类可读性,其缩进和简洁的语法使得文件更易于阅读和理解
  • JSON 更适合机器处理,尤其是在网络传输和数据交换方面

注释

  • YAML 支持注释,这使得可以在文件中添加解释和说明
  • JSON 标准不支持注释,因此在 JSON 文件中不能添加注释

使用场景

  • YAML 常用于配置文件、Docker Compose 文件等,由于其可读性好,非常适合人类编辑和阅读
  • JSON 常用于API通信、前后端数据交互等,由于其简洁性和广泛的支持,更适合机器处理

总体来说,YAML 更适合人类编辑和阅读,而 JSON 更适合机器处理和数据交换。在选择使用哪种格式时,需要考虑到具体的应用场景和需求

三、Docker-Compose.yml 文件格式

Docker-Compose.yml 文件采用 YAML 格式,用于定义 Docker Compose 应用程序的服务、网络和卷等

1、数据结构

1.1 对象映射:

  • 键值对的字典
  • 对象映射指的是在docker-compose.yml文件中定义的服务和它们的配置
  • 这些对象映射定义了每个服务的配置,以及如何运行这些服务
如:animal: pets
#符号字符“ : ”后必须缩进1个空格

1.2 序列数组

  • 一组按次序排列的列表
  • 序列数组是一种数据结构,用于表示一组有序的元素
  • docker-compose.yml文件中,序列数组通常用于定义多个相似的配置项,例如多个服务或多个环境变量
如:
- Cat
- Dog
- Goldfish或者
["Cat", "Dog", "Goldfish"]
示例:# yaml 格式
languages:   #序列的映射- Java- Golang- Python
websites:    #映射的映射cpu: 2memory: 1024Mswap: 2048Mdisk: 60G # Json 格式
{languages: ['Java','Golang','Python'	],resources: {cpu: '2',memory: '1024M',swap: '2048M',disk: '60G'}
}

1.3 布尔值

  • 布尔值可以用来表示真假值
  • 在 YAML 中,以下是表示布尔值的方式:

① true 和 false:分别表示真和假

② yes 和 no:分别表示真和假

③ on 和 off:分别表示真和假

④ 1 和 0:分别表示真和假

如:
debug: true
debug: false

2、Docker-Compose 配置常用字段

Docker-Compose 配置常用字段
字段说明
build指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定
dockerfile构建镜像上下文路径 dockerfile-nginx
context可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址
image指定镜像
command执行命令,覆盖容器启动后默认执行的命令
container_name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
deploy指定部署和运行服务相关配置,只能在 Swarm 模式使用
environment添加环境变量
networks加入网络,引用顶级networks下条目
network_mode设置容器的网络模式,如 host,bridge,...
ports暴露容器端口,与 -p 相同,但端口不能低于 60
volumes挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
volumes_from从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持
hostname容器主机名
sysctls在容器内设置内核参数
links连接到另外一个容器,- 服务名称[:服务别名]
privileged

用来给容器root权限,注意是不安全的,true | false

设置重启策略,no,always,no-failure,unless-stoped,no,默认策略,在容器退出时不重启容器

on-failure :在容器非正常退出时(退出状态非0),才会重启容器

on-failure:3 :在容器非正常退出时重启容器,最多重启3次

always :在容器退出时总是重启容器

unless-stopped :在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器

depends_on

在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败

例如:在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出depends_on标签用于解决容器的依赖、启动先后的问题

例如:

php:
  depends_on:
    - apache         #先启动apache
    - mysql           #再启动mysql

3、Docker-Compose 常用命令

Docker-Compose 常用命令
命令说明
build重新构建服务
ps用于显示当前Docker Compose项目中正在运行的服务的状态
up创建和启动容器
exec在容器里面执行命令
scale指定一个服务容器启动数量
top显示容器进程
logs查看容器输出
down删除容器、网络、数据卷和镜像
stop/start/restart

停止/启动/重启服务

四、Docker-Compose 环境安装

Docker-Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker-Compose

#关闭防火墙和核心防护
systemctl disable --now  firewalld
setenforce 0
#下载
cd /opt
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /opt#安装:下载到本地并添加权限就能直接使用
mv /opt/docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose #查看版本
docker-compose --version

五、 Docker-Compose 简单编排部署

1、Nginx Docker-Compose编排

1.1 建立工作目录并上传相关安装包

mkdir -p /opt/docker-compose-nginx/nginx
cd /opt/docker-compose-nginx/nginx
#需在此路径上传 nginx 安装包 nginx-1.12.0.tar.gz

1.2 编写 Nginx Dockerfile 脚本

vim Dockerfile#基于基础镜像
FROM centos:7
#用户信息
MAINTAINER this is nginx image <dh>
#添加环境包
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx
#上传nginx软件压缩包,并解压
ADD nginx-1.12.0.tar.gz /usr/local/src/
#指定工作目录
WORKDIR /usr/local/src/nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
#指定http和https端口
EXPOSE 80
EXPOSE 443
//方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf			#关闭 nginx 在后台运行
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

若使用方法一,必须得创建启动容器时执行的脚本:

vim run.sh#!/bin/bash
/usr/local/nginx/sbin/nginx

1.3 创建网页目录和文件

mkdir -p /opt/docker-compose-nginx/html/
echo "<h1>this is nginx web</h1>" > /opt/docker-compose-nginx/html/index.html

1.4 编写配置文件 docker-compose.yml

vim /opt/docker-compose-nginx/docker-compose.yml
version: '3'
services:nginx:container_name: web1hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 1212:80- 2121:443networks:lnmp:ipv4_address: 172.30.0.10volumes:- ./html:/usr/local/nginx/html
networks:lnmp:driver: bridgeipam:config:- subnet: 172.30.0.0/16

1.5 Nginx Docker-Compose 文件结构

yum install -y tree
tree /opt/docker-compose-nginx

1.6 启动 Docker 容器

cd /opt/docker-compose-nginx
docker-compose -f docker-compose.yml up -d
#-f, --file FILE:使用特定的 compose 模板文件,默认为 docker-compose.yml
#-p, --project-name NAME:指定项目名称,默认使用目录名称
#up: Docker Compose 要启动配置文件中定义的服务
#-d:在后台运行

docker images   #查看所有镜像
docker ps       #查看当前正在运行中的容器

cd /opt/docker-compose-nginx
docker-compose ps   #必须在docker-compose.yml所在目录执行此命令
#用于显示当前Docker Compose项目中正在运行的服务的状态

docker inspect web1    #查看指定容器的ip地址等信息

1.7 浏览器测试页面

2、nginx+tomcat docker-compose编排

在上述 Nginx Docker-Compose编排的基础上,加入tomcat

1.1 建立工作目录并上传相关安装包

mkdir -p /opt/docker-compose-nginx/tomcat
cd /opt/docker-compose-nginx/tomcat
#需在此目录上上传jdk-8u291-linux-x64.tar.gz、apache-tomcat-8.5.16.tar.gz

1.2 编写 Tomcat Dockerfile 脚本

vim DockerfileFROM centos:7
MAINTAINER tomcat image <dh>
ADD jdk-8u291-linux-x64.tar.gz /usr/local/  
# 将jdk……tar.gz文件解压到/usr/local/目录下
WORKDIR /usr/local/                         
# 为后续命令指定工作目录/usr/local/
RUN mv jdk1.8.0_291 /usr/local/java         
# 解压后的JDK目录重命名为java并移动到/usr/local/目录下
ENV JAVA_HOME /usr/local/java               
# 设置环境变量JAVA_HOME为/usr/local/java
ENV JRE_HOME ${JAVA_HOME}/jre               
# 设置环境变量JRE_HOME为${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib 
# 设置环境变量CLASSPATH,包含当前目录、Java库和JRE库 
ENV PATH $JAVA_HOME/bin:$PATH               
# 将JAVA_HOME/bin加入到PATH环境变量中
ADD apache-tomcat-8.5.16.tar.gz /usr/local/
WORKDIR /usr/local/                         
# 设置工作目录为/usr/local/
RUN mv apache-tomcat-8.5.16 /usr/local/tomcat 
# 将解压后的Tomcat目录重命名为tomcat并移动到/usr/local/目录下
EXPOSE 8080                                 # 暴露容器的 8080 端口
#CMD ["/usr/local/tomcat/bin/catalina.sh","run"]
# 设置容器启动时执行的命令为 /usr/local/tomcat/bin/catalina.sh run,以启动 Tomcat 服务
ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]
CMD ["/usr/local/tomcat/bin/startup.sh","start"]
# 设置容器启动时默认执行的命令为 /usr/local/tomcat/bin/startup.sh start,以启动Tomcat服务

1.3 修改配置文件 docker-compose.yml

#在services模块下继nginx后的添加tomcat
vim /opt/docker-compose-nginx/docker-compose.ymltomcat:hostname: tomcatbuild:context: ./tomcatdockerfile: Dockerfileports:- 8080:80networks:lnmp:
#注意格式对齐

1.4 Nginx+Tomcat Docker-Compose 文件结构

yum install -y tree
tree /opt/docker-compose-nginx

1.5 启动 Docker 容器

前提:必须删除之前使用该docker-compose.yml文件启动的容器

cd /opt/docker-compose-nginx
docker-compose down   #必须在docker-compose.yml所在目录执行此命令
#将删除由 docker-compose up 创建的所有容器、网络、数据卷和镜像
#如果你只想删除特定的容器、网络、数据卷或镜像,你可能需要使用 docker container rm, docker network rm, docker volume rm 和 docker image rm 等命令来手动删除它们

然后再启动 Docker 容器

cd /opt/docker-compose-nginx
docker-compose -f docker-compose.yml up -d
#-f, --file FILE:使用特定的 compose 模板文件,默认为 docker-compose.yml
#-p, --project-name NAME:指定项目名称,默认使用目录名称
#up: Docker Compose 要启动配置文件中定义的服务
#-d:在后台运行

docker images   #查看所有镜像
docker ps       #查看当前正在运行中的容器

cd /opt/docker-compose-nginx
docker-compose ps   #必须在docker-compose.yml所在目录执行此命令
#用于显示当前Docker Compose项目中正在运行的服务的状态

docker inspect ce482a4fb6e4    #查看指定容器的ip地址等信息

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

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

相关文章

【Mac】Mac安装软件常见问题解决办法

前言 刚开始用Mac系统的小伙伴或者在更新系统版本后运行App的朋友会经常碰到弹窗提示「xxx已损坏&#xff0c;无法打开&#xff0c;您应该将它移到废纸篓」、「打不开xxx&#xff0c;因为Apple无法检查其是否包含恶意软件」、「打不开xxx&#xff0c;因为它来自身份不明的开发…

​「Python大数据」词频数据渲染词云图导出HTML

前言 本文主要介绍通过python实现数据聚类、脚本开发、办公自动化。词频数据渲染词云图导出HTML。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词词频数据渲染词云图将可视化结果保存到HTML文件中二、具体产出 三、执行脚本 python wordCloud.p…

基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 matlab2022a的测试结果如下&#xff1a; vivado2019.2的仿真结果如下&#xff1a; 将数据导入到matlab中&#xff0c; 系统的RTL结构图如下图所示…

格瑞威特 | 邀您参加2024全国水科技大会暨技术装备成果展览会

—— 展位号&#xff1a;A13 —— 企业介绍 北京格瑞威特环保设备有限公司成立于2009年&#xff0c;是专业从事设计、研发、销售智能加药计量泵、在线水质分析仪表、便携式水质分析仪表、流量计、液位计、阀门、搅拌机、烟气报警仪、加药装置等各类水处理设备及配件的OEM供服…

react-lib 读取本地模板创建PDF

读取本地文件和读取远程的一样&#xff0c;都使用fetch去获取 async function modifyPdf() {let url ./template.pdflet existingPdfBytes await fetch(url).then(res > res.arrayBuffer()) // 这里也有问题要转一下const d new Uint8Array(existingPdfBytes)const pdfDo…

springboot 自动配置源码解读

什么是自动装配 当我们程序依赖第三方功能组件时&#xff0c;不需要手动将这些组件类加载到IOC容器中。例如 当程序需要用到redis时&#xff0c;在pom.xml文件中引入依赖&#xff0c;然后使用依赖注入的方式直接从IOC容器中拿到相应RedisTemplate实例。 SpringBootApplication …

kubernetes中使用ELK进行日志收集

目录 一、需要收集哪些日志 1、kubernetes集群的系统组件日志 2、应用日志 二、日志收集方案ELK 1、收集日志&#xff1a;Logstash 2、存储日志&#xff1a;Elasticsearch 3、展示日志&#xff1a;Kibana 三、安装elk 1、下载安装包 2、创建用户并切换到新用户 3、上…

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 TF*IDF&#xff1a; 优势&#xff1a; 可解释性好 可以清晰地看到关键词 即使预测结果出错&#xff0c;也很容易找到原因 计算速度快 分词本身占耗时最多&#xff0c;其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

[RocketMq:基于容器化]:快速部署安装

文章目录 一&#xff1a;相关镜像准备&#xff1a;RocketNameServer1.1&#xff1a;查看相关镜像和版本1.2&#xff1a;拉取镜像1.3&#xff1a;配置和运行RocketNameServer容器 二&#xff1a;相关镜像准备&#xff1a;RocketBroker2.1&#xff1a;创建配置目录和broker配置文…

使用docker创建rocketMQ主从结构,使用

1、 创建目录 mkdir -p /docker/rocketmq/logs/nameserver-a mkdir -p /docker/rocketmq/logs/nameserver-b mkdir -p /docker/rocketmq/logs/broker-a mkdir -p /docker/rocketmq/logs/broker-b mkdir -p /docker/rocketmq/store/broker-a mkdir -p /docker/rocketmq/store/b…

计算机网络 -- 多人聊天室

一 程序介绍和核心功能 这是基于 UDP 协议实现的一个网络程序&#xff0c;主要功能是 构建一个多人聊天室&#xff0c;当某个用户发送消息时&#xff0c;其他用户可以立即收到&#xff0c;形成一个群聊。 这个程序由一台服务器和n个客户端组成&#xff0c;服务器扮演了一个接受…

vue 实现项目进度甘特图

项目需求&#xff1a; 实现以1天、7天、30天为周期&#xff08;周期根据筛选条件选择&#xff09;&#xff0c;展示每个项目不同里程碑任务进度。 项目在Vue-Gantt-chart: 使用Vue做数据控制的Gantt图表基础上进行了改造。 有需要的小伙伴也可以直接引入插件&#xff0c;自己…

装饰器模式、代理模式、适配器模式对比

装饰器模式、代理模式和适配器模式都是结构型设计模式&#xff0c;它们的主要目标都是将将类或对象按某种布局组成更大的结构&#xff0c;使得程序结构更加清晰。这里将装饰器模式、代理模式和适配器模式进行比较&#xff0c;主要是因为三个设计模式的类图结构相似度较高、且功…

4-1 STM32C8T6控制OLED显示

实物接线&#xff1a; #include "stm32f10x.h" // Device header #include "delay.h" #include "LED.h" #include "Key.h" #include "Buzzer.h" #include "Oled.h"int main(void) {OLED_Init()…

基于SpringBoot实现各省距离Excel导出实战

目录 前言 一、列表及图表信息展示 1、数据过滤调整 2、信息列表及图表展示 3、Excel写入 二、界面可视化 1、Echarts图表和列表展示 2、城市详情和下载功能设计 三、成果展示 1、图表展示 2、部分城市数据分析 总结 前言 今天是五一黄金周假期第二天&#xff0c;不知…

搜索引擎的设计与实现参考论文(论文 + 源码)

【免费】搜索引擎的设计与实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89249705?spm1001.2014.3001.5501 搜索引擎的设计与实现 摘要&#xff1a; 我们处在一个大数据的时代&#xff0c;伴随着网络信息资源的庞大&#xff0c;人们越来越多地注重怎样才能…

光模块基础概念

一:什么是光模块&#xff1f; 光模块作为光通信中的重要组成部分&#xff0c;是实现光信号传输过程中光电互相转换的光电子器件。 光模块通常由光发射组件、光接收组件、激光器芯片、探测器芯片等部件组成。光模块结构示意图&#xff08;SFP封装&#xff09;此图来源于光模块…

Tensorflow2.0笔记 - ResNet实践

本笔记记录使用ResNet18网络结构&#xff0c;进行CIFAR100数据集的训练和验证。由于参数较多&#xff0c;训练时间会比较长&#xff0c;因此只跑了10个epoch&#xff0c;准确率还没有提升上去。 import os import time import tensorflow as tf from tensorflow import keras …

自适应医疗决策框架 MDAgents:问题复杂度评估 + 医疗决策 + 多智能体协作

自适应医疗决策框架 MDAgents&#xff1a;问题复杂度评估 医疗决策 多智能体协作 提出背景MDAgents 拆解解法&#xff1a;MDAgents框架处理医疗问题3.1 查询复杂性评估例子&#xff1a;糖尿病患者的医疗查询 3.2 专家招募3.3 医疗协作与改良3.4 决策制定 分阶段决策1. 问题复…

【实时数仓架构】方法论

笔者不是专业的实时数仓架构&#xff0c;这是笔者从其他人经验和网上资料整理而来&#xff0c;仅供参考。写此文章意义&#xff0c;加深对实时数仓理解。 一、实时数仓架构技术演进 1.1 四种架构演进 1&#xff09;离线大数据架构 一种批处理离线数据分析架构&#xff0c;…