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: 2
  memory: 1024M
  swap: 2048M
  disk: 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: web1
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1212:80
      - 2121:443
    networks:
      lnmp:
        ipv4_address: 172.30.0.10
    volumes:
      - ./html:/usr/local/nginx/html
networks:
  lnmp:
    driver: bridge
    ipam:
      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 Dockerfile
 
FROM 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.yml

tomcat:
    hostname: tomcat
    build:
      context: ./tomcat
      dockerfile: Dockerfile
    ports:
      - 8080:80
    networks:
      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地址等信息

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】:const成员,取地址及const取地址操作符重载

目录 一&#xff0c;const成员二&#xff0c;取地址及const取地址操作符重载 一&#xff0c;const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的…

力扣刷题第0天:只出现一次的数字

目录 第一部分:题目描述 ​第二部分:题目分析 第三部分:解决方法 3.1思路1: 双指针暴力求解 3.2 思路2&#xff1a;异或运算 第四部分:总结收获 第一部分:题目描述 第二部分:题目分析 由图片分析可得&#xff0c;该题目对算法时间复杂度有一定的要求时间复杂度为O(N)&a…

Linux搭建mysql环境

搭建 MySQL 环境 1、使用 wget 下载安装包&#xff0c;下载到 opt 目录中 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm2、安装 MySQL 公钥 rpm -i mysql57-community-release-el7-10.noarch.rpmrpm --import https://repo.mysql.com/RPM-GP…

【算法刷题 | 动态规划02】5.02(不同路径、不同路径||、整数拆分、不同的二叉搜索树)

文章目录 5.不同路径5.1题目5.2解法一&#xff1a;深度搜索5.2.1深度搜索思路5.2.2代码实现 5.3解法二&#xff1a;动规5.3.1动规思路5.3.2代码实现 6.不同路径||6.1题目6.2解法&#xff1a;动规6.2.1动规思路&#xff08;1&#xff09;dp数组以及下标含义&#xff08;2&#x…

python学习笔记B-18:序列结构之集合--集合的创建、操作与删除

集合的创建、常用操作和删除方法&#xff1a; s {1,2,3,4,5,} print(s)s set() #创建了一个空集合 print(s,type(s))s {} #创建了一个空字典 print(s, type(s))s set("helloworld") print(s) #集合内容是无序的&#xff0c;不重复&#xff0c;所以顺序混乱…

VG做mirror引起的块偏移

事件起因 Oracle10.2环境 Aix操作系统使用aix的lvm技术。制作vg的mirror。以此来替换掉老的存储。 做mirror前&#xff0c;数据库已完全关闭 故障现象 在启动数据库时&#xff0c;发现IO错误。该系统的spfile&#xff0c;ctl&#xff0c;dbf均是用lv做的裸设备。其中dbf是使…

STM32项目设计:基于stm32f1的智能门锁(附项目视频全套教程)

最近假期比较闲,拿着之前剩下的模块做了一个小玩具, 先制定一下此次玩具的规划,也可以理解为简易项目书。 开发软件&#xff1a;keil 硬件选型&#xff1a;STM32F103C8T6、RFID读卡器、oled屏幕、按键模块、蓝牙通信模块、蜂鸣器、舵机; 上位机&#xff1a; 1.上位机可以对密…

pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx 文件读取漏洞复现

0x01 产品简介 pkpmbs 建设工程质量监督系统是湖南建研信息技术股份有限公司一个与工程质量检测管理系统相结合的,B/S架构的检测信息监管系统。 0x02 漏洞概述 pkpmbs 建设工程质量监督系统 Ajax_operaFile.aspx接口处存在文件读取漏洞,未经身份认证的攻击者可以利用漏洞读…

【C++】拷贝复制:拷贝构造函数的使用

欢迎来到CILMY23的博客 本篇主题为&#xff1a;拷贝复制&#xff1a;拷贝构造函数的使用 博客主页&#xff1a;CILMY23-CSDN博客 个人专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 写在前头…

【趣味实践】KataGo+Sabaki搭建Ai围棋助手

前言 最近和同门在比试围棋&#xff0c;结果被爆虐&#xff0c;于是想借助Ai治治“嚣张”的他。 KataGo简介 继2016年AlphaGo出圈以来&#xff0c;已有不少Ai模型&#xff0c;其中部分如下图[1]所示。 在线围棋对弈网站OGS上&#xff0c;使用KataGo(https://online-go.com/)这…

什么是限流?常见的限流算法

目录 1. 什么是限流 2. 常见限流算法 3. 固定窗口算法 4. 滑动窗口算法 5. 漏桶算法 6. 令牌桶算法 7. 限流算法选择 1. 什么是限流 限流&#xff08;Rate Limiting&#xff09;是一种应用程序或系统资源管理的策略&#xff0c;用于控制对某个服务、接口或功能的访问速…

硬件知识积累 DP 接口简单介绍以及 DP信号飞线到显示屏的问题

1. DP 接口的介绍 定义与起源&#xff1a; DP接口是由PC及芯片制造商联盟开发&#xff0c;并由视频电子标准协会&#xff08;VESA&#xff09;标准化的数字式视频接口标准。它的设计初衷是为了取代传统的VGA、DVI和FPD-Link&#xff08;LVDS&#xff09;接口&#xff0c;以满足…

QT-QTCreator环境配置

准备工作&#xff1a; 下载QT: 链接&#xff1a;https://pan.baidu.com/s/1prJcsC4DGqhKiXvLuPQFVA?pwd60b3 提取码&#xff1a;60b3下载WindowsKits&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1QNiS3HpbH5M5kXx5AhkqnQ?pwde2h8 提取码&#xff1a;e2h8安装的…

Java数组深度剖析:掌握数据结构的基石

引言 在编程世界中&#xff0c;数仅仅是一种数据类型&#xff0c;它是理解内存分配、多维数据处理以及性能优组像是构建复杂数据结构的基本积木。它们简洁、高效&#xff0c;是管理元素集的首选方式。在Java中&#xff0c;数组不化的关键。 这篇文章致力于深入探讨Java数组的各…

android studio项目实战——备忘录(附源码)

成果展示&#xff1a; 1.前期准备 &#xff08;1&#xff09;在配置文件中添加权限及启动页面顺序 ①展开工程&#xff0c;打开app下方的AndroidManifest.xml,添加权限&#xff0c;如下&#xff1a; <uses-permission android:name"android.permission.CAMERA"…

【二】电力系统规约IEC 104详解

电力系统规约IEC 104详解 概述 很早就准备梳理出一下电力系统规约系列的文章&#xff0c;因为自己在实践过程中发现这方面太难找了&#xff0c;网上的资料也都比较陈旧。我接触和使用IEC系列规约也有一段时间了&#xff0c;本着总结和分享的想法&#xff0c;我想推出这系列的文…

在线的调试器pythontutor,支持C/C++

1. 背景介绍 对于C语言的学习最复杂的可能无疑就是指针的&#xff0c;指针因其灵活、晦涩难懂等特点而出名&#xff0c;本文并不介绍利用gdb的角度去分析它&#xff0c;而是通过一个在线网站而分析&#xff1b; 2.C代码调试 3. C代码调试 4在线网站 https://pythontutor.com/…

【项目纪实】某国有航空公司人力资源系统诊断咨询项目

公司的人力资源管理问题一直都比较严重&#xff0c;比如人员冗余、员工工作积极性差等问题&#xff0c;虽然经过多次的管理尝试&#xff0c;存在的问题仍然没有缓解。华恒智信人力资源咨询公司的老师特别专业&#xff0c;帮我们系统、全面的诊断了人力资源管理上存在的问题&…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.3--Cortex-A7寄存器介绍

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Numerical Analysis(byRichard.L..Burden)【pdf高清英文原版】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…