Docker-Compose详解与部署示例

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许你使用YAML文件配置应用程序的服务、网络和卷,并通过一个简单的命令集启动和管理整个应用程序的容器。通过使用Docker Compose,可以轻松地将多个Docker容器协同工作,构建和管理复杂的应用程序环境。

在容器化应用的过程中,一个 Dockerfile 模板文件可以定义一个单独的应用容器。然而,如果需要定义多个容器并协同工作,就需要使用服务编排。服务编排有多种技术方案,下面将介绍 Docker 官方产品 Docker Compose。

Docker Compose 概述

        Docker Compose 是 Docker 官方的开源项目,用于快速编排 Docker 容器集群。它允许用户在一个模板(使用 YAML 格式)中定义一组相关联的应用容器,这被称为一个项目(project)。例如,一个项目可以包括 Web 服务容器和后端数据库服务容器等。

三层结构

Docker Compose 将管理的容器分为三层:工程(project)、服务(service)以及容器(container)。

  • 工程(project): 由运行目录下的所有文件组成,包括 docker-compose.yml、extends 文件或环境变量文件。工程名默认为当前目录名。

  • 服务(service): 一个工程可以包含多个服务,每个服务定义了容器运行的镜像、参数和依赖关系。

  • 容器(container): 一个服务可以包含多个容器实例。

配置文件

        Docker Compose 的工程配置文件默认为 docker-compose.yml,也可以通过环境变量 COMPOSE_FILE-f 参数来自定义配置文件。该文件定义了多个有依赖关系的服务及每个服务运行的容器。

使用场景

        在实际工作中,经常会遇到需要多个容器相互配合来完成某项任务的情况。比如,要实现一个 Web 项目,除了 Web 服务容器,还需要后端的数据库服务容器和可能的负载均衡容器。Compose 允许用户通过一个单独的 docker-compose.yml 模板文件来定义这组相关联的应用容器为一个项目。

实现原理

        Docker Compose 项目由 Python 编写,利用 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 进行编排管理。

总体而言,Docker Compose 简化了多容器应用的管理和协同工作,使得容器编排变得更加便捷。

Docker Compose 环境安装

        Docker Compose 是 Docker 的独立产品,因此在安装 Docker Compose 之前,需要先安装 Docker。

# 1. 下载 Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 2. 授予执行权限
chmod +x /usr/local/bin/docker-compose# 3. 查看安装版本
docker-compose --version

YAML文件格式

  • YAML(YAML Ain't Markup Language 或 YAML 是一种人类友好的数据序列化标准。

  • YAML 文件是一种以人类可读的方式表示数据的格式,通常被用于配置文件和数据交换格式。它的语法简洁,使用空格来表示层次结构,避免了像 XML 和 JSON 这样的标记语言中使用的繁琐的符号。YAML 主要强调数据的可读性,使得编辑和理解文件变得更加容易。

  • YAML 文件可以包含键值对、数组、标量等数据形式。在容器编排工具中,比如 Docker Compose 中的配置文件就经常采用 YAML 格式。在 YAML 文件中,缩进和空格的使用很重要,它们用来表示数据的层次结构关系。

  • 与 XML 相比,YAML 语法更简单。YAML 数据结构通过缩进表示,连续的项目通过减号表示,键值对用冒号分隔,数组用中括号 [] 括起来,哈希用花括号 {} 括起来。

以下是一个简单的 YAML 文件示例:

name: John Doe
age: 30
city: New York
hobbies:- Reading- Traveling

在这个例子中,我们定义了一个人物的信息,包括姓名、年龄、城市和爱好。这种人类可读性高的格式使得 YAML 在配置文件和数据交换方面被广泛应用。

编写注意事项:

  • 大小写敏感: YAML 是大小写敏感的。

  • 缩进表示层级关系: 使用缩进表示数据的层次结构。

  • 不支持制表符: 只能使用空格进行缩进,不支持制表符(tab 键)。

  • 缩进的空格数目不重要: 只要相同层级左对齐即可,通常开头缩进2个空格。

  • 注释: 使用 # 号表示注释。

  • 符号字符后缩进1个空格: 冒号 : 、逗号 , 、横杠 - 等符号后通常缩进1个空格。

  • 引号的使用: 单引号''引起来的字符串会被处理为普通字符串,双引号""内的特殊字符会被解析为其本身的意思。

name: "Hi,\lihua"

数据结构:

  • 键值对: 键值对的字典。YAML 使用冒号 : 分隔键和值,形成键值对
animal: pets
  • 列表: 一组按次序排列的列表。使用连字符 - 表示列表中的每个项
- Cat
- Dog
- Bird

对应 JSON:["Cat", "Dog", "Bird"]

  • 布尔值:
debug: true
debug: false
  • 哈希映射: 使用花括号 {} 表示哈希映射,即键值对的字典。
person:name: Johnage: 30
  • 数组: 使用中括号 [] 表示数组。
fruits: [apple, orange, banana]

示例:

YAML 格式:

languages:- Java- Golang- Python
websites:cpu: 2memory: 1024Mswap: 2048Mdisk: 60G

对应的 JSON 格式:

{"languages": ["Java","Golang","Python"    ],"websites": {"cpu": "2","memory": "1024M","swap": "2048M","disk": "60G"}
}

简单结构示例

person:name: Aliceage: 25address:city: Wonderlandcountry: Fantasylandhobbies:- Reading- Traveling- Coding

在这个示例中,person 包含了姓名、年龄、地址和爱好的信息。address 是一个哈希映射,而 hobbies 是一个列表。

复杂结构示例:

school: universitydepartments:- name: computer sciencecourses:- course_name: algorithmsprofessor: Dr. Smith- course_name: databasesprofessor: Dr. Johnson- name: literaturecourses:- course_name: poetryprofessor: Dr. Williams- course_name: novelsprofessor: Dr. Davislocation:campus: westcity: Example Citycountry: Example Country

        这个示例展示了一个包含学校信息、部门、课程和位置的复杂 YAML 结构。通过缩进和冒号的使用,清晰地表示了数据的层级关系。school 包含了 departmentslocation 两个子项,而 departments 下有两个子项,每个子项包含了部门名称和该部门的课程信息。最后,location 包含了校区、城市和国家的信息。这种结构使得数据的组织和理解变得直观和简洁。

Docker Compose配置常用字段

        在 Docker Compose 配置文件中,常用的字段用于定义服务的各种属性,如构建、镜像、命令、网络、端口映射等。以下是一些常见字段及其描述:

  • build:

  • 描述: 指定 Dockerfile 文件名。

  • 补充: 若要指定 Dockerfile 文件,需要在 build 标签的子级标签中使用 dockerfile 指定。

  • dockerfile:

  • 描述: 构建镜像时使用的 Dockerfile 文件路径。

  • context:

  • 描述: 构建镜像的上下文路径,可以是 Dockerfile 的路径,也可以是指向 git 仓库的 URL 地址。

  • image:

  • 描述: 指定服务使用的镜像。

  • command:

  • 描述: 覆盖容器启动后默认执行的命令。

  • container_name:

  • 描述: 指定容器名称,唯一性,不能与其他容器名称重复。

  • deploy:

  • 描述: 指定部署和运行服务的相关配置,仅在 Swarm 模式使用。

  • environment:

  • 描述: 添加环境变量。

  • networks:

  • 描述: 加入网络,引用顶级 networks 下的条目。

  • network_mode:

  • 描述: 设置容器的网络模式,如 hostbridge 等。

  • ports:

  • 描述: 暴露容器端口,与 -p 选项相同。

  • volumes:

  • 描述: 挂载宿主机目录或命名卷到容器,命名卷需在顶级 volumes 定义卷名称。

  • volumes_from:

  • 描述: 从另一个服务或容器挂载卷,可选参数 :ro:rw,仅版本 '2' 支持。

  • hostname:

  • 描述: 容器主机名。

  • sysctls:

  • 描述: 在容器内设置内核参数。

  • links:

  • 描述: 连接到另一个容器,使用 - 服务名称[:服务别名]。

  • privileged:

  • 描述: 赋予容器 root 权限,慎用,不安全,值为 truefalse

  • restart:

  • 描述: 设置容器的重启策略,如 noalwayson-failure 等。

    no:默认策略,在容器退出时不重启容器。 on-failure:在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:3:在容器非正常退出时重启容器,最多重启3次。 always:在容器退出时总是重启容器。 unless-stopped:在容器退出时总是重启容器,但不考虑在 Docker 守护进程启动时就已经停止的容器。

  • depends_on:

  • 描述: 定义容器之间的依赖关系,确保指定的服务在启动之前已经启动。在使用 Compose 时,解决容器启动顺序和依赖关系的问题。

示例:

php:depends_on:- apache- mysql

通过合理配置这些字段,可以有效管理和定义 Docker Compose 服务的各种属性,实现容器编排和部署的灵活性。

Docker Compose 常用命令

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。以下是一些常用命令的整理解析补充:

  • build:

  • 描述:重新构建服务,通常在对应的 Dockerfile 发生变化时使用,以确保使用最新的配置和代码。

  • ps:

  • 描述:列出当前正在运行的容器,显示容器的状态、ID、名称等信息。

  • up:

  • 描述:创建和启动容器。该命令根据 docker-compose.yml 文件中的配置启动服务。

  • exec:

  • 描述:在容器内执行命令。可以通过这个命令进入正在运行的容器并执行特定的命令,用于调试和管理容器内部。

  • scale:

  • 描述:指定一个服务容器的启动数量。允许动态地调整服务容器的规模,适用于需要水平扩展的场景。

  • top:

  • 描述:显示容器内的进程。可以查看容器内部正在运行的进程,有助于监控和排查问题。

  • logs:

  • 描述:查看容器的输出日志。用于检查容器的运行日志,帮助定位和解决问题。

  • down:

  • 描述:停止并删除容器、网络、数据卷和镜像。用于清理整个应用程序的相关资源。

  • stop/start/restart:

  • 描述:停止/启动/重启服务。分别用于停止、启动和重启指定的服务。

这些命令使得 Docker Compose 更加灵活和方便,适用于开发、测试和部署多容器应用程序。

Docker-Compose文件结构

Docker Compose 文件结构通常包含以下元素:

  • version:

  • 描述:指定 Docker Compose 文件的版本。该版本决定了可以使用的 Docker Compose 的特性和语法。例如,version: '3' 表示使用 Docker Compose 版本 3 的语法。

  • services:

  • 描述:定义了各个服务及其配置。每个服务可以包括镜像、容器名称、端口映射、环境变量等信息。

services:nginx:image: nginx:latestports:- "80:80"mysql:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: example
  • networks:

  • 描述:定义了服务之间的网络连接。可以指定自定义的网络名称、驱动程序和其他网络相关配置。

networks:custom_network:driver: bridge
  • volumes:

  • 描述:定义了服务使用的卷(volumes)。卷用于在容器之间共享和存储数据。

volumes:data_volume:
  • configs:

  • 描述:用于定义服务的配置。可以包括配置文件、密钥等敏感信息。

configs:config_file:file: ./config.ini
  • environment:

  • 描述:设置全局环境变量,可以在所有服务中使用。

environment:GLOBAL_VAR: value
  • secrets:

  • 描述:定义服务使用的密钥或敏感信息。

secrets:secret_key:file: ./secret.txt
  • volumes, networks, configs, secrets (外部定义):

  • 描述:允许引用外部定义的卷、网络、配置和密钥。

services:nginx:volumes:- data_volume:/app/datanetworks:- custom_network

这些元素可以组合使用,根据应用程序的需要进行配置。Docker Compose 文件的结构允许开发人员定义和管理多容器应用程序的整体配置。

yum -y install treetree /opt/compose_nginx/ -L 2
/opt/compose_nginx/
├── docker-compose.yml
├── mysql
│   ├── Dockerfile
│   ├── my.cnf
│   └── mysql-boost-5.7.20.tar.gz
├── nginx
│   ├── Dockerfile
│   └── nginx-1.12.0.tar.gz
├── php
│   ├── Dockerfile
│   └── php-7.1.10.tar.bz2
└── wwwroot├── index.html├── wordpress└── wordpress-4.9.4-zh_CN.tar.gz

解释:

  • docker-compose.yml:

  • 描述: 创建模板脚本,用于定义和配置多容器 Docker 应用程序。

  • mysql:

  • 描述: 包含 MySQL 服务的定义。

  • Dockerfile:

    • 描述: MySQL 容器的构建脚本,包含了构建 MySQL 镜像所需的指令。
  • my.cnf:

    • 描述: MySQL 配置文件,可能包含了自定义的 MySQL 配置。
  • mysql-boost-5.7.20.tar.gz:

    • 描述: MySQL 源码包,可能是用于构建 MySQL 镜像的源码文件。
  • nginx:

  • 描述: 包含 Nginx 服务的定义。

  • Dockerfile:

    • 描述: Nginx 容器的构建脚本,包含了构建 Nginx 镜像所需的指令。
  • nginx-1.12.0.tar.gz:

    • 描述: Nginx 源码包,可能是用于构建 Nginx 镜像的源码文件。
  • php:

  • 描述: 包含 PHP 服务的定义。

  • Dockerfile:

    • 描述: PHP 容器的构建脚本,包含了构建 PHP 镜像所需的指令。
  • php-7.1.10.tar.bz2:

    • 描述: PHP 源码包,可能是用于构建 PHP 镜像的源码文件。
  • wwwroot:

  • 描述: 存放站点网页的目录。

  • index.html:

    • 描述: 实际的站点网页文件。
  • wordpress:

    • 描述: WordPress 目录,可能包含 WordPress 应用程序的文件。
  • wordpress-4.9.4-zh_CN.tar.gz:

    • 描述: WordPress 源码包,可能是用于构建 WordPress 镜像的源码文件。

这个结构展示了一个包含多个服务的 Docker-Compose 应用程序,可以通过运行 docker-compose up 启动整个应用。每个服务都有自己的构建脚本和相关文件,使得整个应用的维护和扩展更加方便。

示例:搭建基于Nginx的Docker容器

准备依赖文件:

mkdir -p /opt/compose_nginx/nginx /opt/compose_nginx/wwwroot
cd /opt/compose_nginx/nginx
cp nginx-1.12.0.tar.gz ./
  • 创建目录:/opt/compose_nginx/nginx/opt/compose_nginx/wwwroot

  • 进入目录:/opt/compose_nginx/nginx

  • 复制nginx-1.12.0.tar.gz到当前目录

编写脚本 run.sh:

vim run.sh#!/bin/bash
/usr/local/nginx/sbin/nginx
  • 创建文件:vim run.sh

编写Dockerfile:

vim DockerfileFROM centos:7
MAINTAINER this is nginx image <hmj>
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin 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
EXPOSE 80
EXPOSE 443
#启动方法一:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#添加宿主机中run.sh到容器中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]
#启动方法二:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

解析:

  • 基于基础镜像:
FROM centos:7

使用CentOS 7作为基础镜像。

  • 用户信息:
MAINTAINER this is nginx image <hmj>

提供镜像的作者/维护者信息。

  • 添加环境包:
RUN yum -y update
RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make

更新系统并安装Nginx编译所需的一些依赖包。

  • 创建非登录用户 nginx:
RUN useradd -M -s /sbin/nologin nginx

创建一个名为nginx的非登录用户,该用户将被用于运行Nginx服务。

  • 上传Nginx软件压缩包,并解压:
ADD nginx-1.12.0.tar.gz /usr/local/src/

将Nginx软件压缩包复制到容器中的指定目录,并在该目录下解压。

  • 指定工作目录:
WORKDIR /usr/local/src/nginx-1.12.0

设置工作目录为解压后的Nginx源代码目录。

  • 配置、编译并安装Nginx:
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install

使用指定的配置参数,编译并安装Nginx。

  • 设置环境变量 PATH:
ENV PATH /usr/local/nginx/sbin:$PATH

将Nginx的sbin目录添加到系统的PATH环境变量中。

  • 指定http和https端口:
EXPOSE 80
EXPOSE 443

暴露容器的80和443端口,以便外部可以访问Nginx服务。

  • 方法一 - 关闭Nginx后台运行:
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

将"daemon off;"添加到Nginx配置文件,以关闭Nginx在后台运行。

  • 添加run.sh脚本到容器中,并设置权限:
ADD run.sh /run.sh
RUN chmod 755 /run.sh

将本地的run.sh脚本添加到容器中,并为该脚本设置可执行权限。

  • 方法二 - 使用ENTRYPOINT启动Nginx:
ENTRYPOINT [ "/usr/local/nginx/sbin/nginx", "-g", "daemon off;" ]

使用ENTRYPOINT指令指定Nginx作为容器的启动命令,同时传递"-g daemon off;"参数,以确保Nginx以非守护进程方式运行。

  • CMD指令 - 容器启动时执行的默认命令:
CMD ["/run.sh"]

设置容器启动时默认执行的命令为/run.sh脚本。这在使用方法一时启动Nginx。

创建测试网页:

echo "<h1>this is test web</h1>" > /opt/compose_nginx/wwwroot/index.html
  • /opt/compose_nginx/wwwroot 目录下创建 index.html 文件,内容为 <h1>this is test web</h1>

编写docker-compose.yml:

  • 创建文件:vim /opt/compose_nginx/docker-compose.yml
vim /opt/compose_nginx/docker-compose.ymlversion: '3'
services:nginx:container_name: web1hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 1216:80- 1217:443networks:lnmp:ipv4_address: 172.18.0.10volumes:- ./wwwroot:/usr/local/nginx/html
networks:lnmp:driver: bridgeipam:config:- subnet: 172.18.0.0/16

解析:

这是一个Docker Compose的配置文件,用于定义一个包含Nginx服务的Docker应用。以下是对每个部分的解析:

  • 版本和服务定义:
version: '3'
services:

使用Docker Compose版本3,并定义了一个services部分,其中包含Nginx服务。

  • Nginx服务配置:
nginx:container_name: web1hostname: nginxbuild:context: ./nginxdockerfile: Dockerfileports:- 1216:80- 1217:443networks:lnmp:ipv4_address: 172.18.0.10volumes:- ./wwwroot:/usr/local/nginx/html
  • container_name: 指定容器的名称为web1。

  • hostname: 设置容器的主机名为nginx。

  • build: 指定构建镜像时的上下文和Dockerfile路径。

  • ports: 将主机的1216端口映射到容器的80端口,将主机的1217端口映射到容器的443端口。

  • networks: 将该服务连接到一个自定义网络lnmp,并指定了IPv4地址为172.18.0.10。

  • volumes: 将主机的./wwwroot目录挂载到容器的/usr/local/nginx/html目录。

  • 自定义网络配置:

networks:lnmp:driver: bridgeipam:config:- subnet: 172.18.0.0/16

定义一个名为lnmp的自定义网络,使用bridge驱动,并指定了IP地址池为172.18.0.0/16。

  • 通过这个配置,你可以使用docker-compose up -d命令启动应用,Docker Compose会自动构建Nginx镜像并启动一个包含Nginx服务的容器。此配置还设置了端口映射和网络设置,使得Nginx服务可以通过主机的1216和1217端口访问,并且该服务与其他容器连接到lnmp网络。

 

启动Docker容器:

cd /opt/compose_nginx/
docker-compose -f docker-compose.yml up -d
  • 进入 /opt/compose_nginx/ 目录

  • 执行命令:docker-compose -f docker-compose.yml up -d

  • Docker Compose参数解释:

  • -f, --file FILE: 使用特定的Compose模板文件,默认为docker-compose.yml

  • -p, --project-name NAME: 指定项目名称,默认使用目录名称

  • -d: 在后台运行

  • 查看Docker容器状态:

  • 执行命令:docker ps -a

  • 查看Docker Compose服务状态:

  • 执行命令:docker-compose ps(必须在docker-compose.yml所在目录执行此命令)

  • 通过浏览器访问:

  • 访问 http://192.168.41.31:1216

  • 这个配置创建了一个Nginx容器,通过Docker Compose进行管理,同时提供了一个简单的测试网页

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

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

相关文章

Arduino| 开发板介绍、编程入门(引脚信号的输入输出)

Arduino开发板介绍、编程入门 开发板介绍编程入门setup和loop函数引脚信号输入输出数字信号模拟信号 开发板介绍 下面是一张Ardunio Uno R3的引脚图&#xff0c;包含14个数字引脚、6个模拟输入、电源插孔、USB连接和ICSP插头等。 14个数字引脚&#xff1a; Serial&#xff…

React项目搭建流程

第一步 利用脚手架创建ts类型的react项目&#xff1a; 执行如下的命令&#xff1a;create-react-app myDemo --template typescript &#xff1b; 第二步 清理项目目录结构&#xff1a; src/ index.tsx, app.txs, react-app-env.d.ts public/index.ht…

oss挂载ECS

非EMR集群接入OSS-HDFS服务的快速入门_对象存储(OSS)-阿里云帮助中心使用JindoFuse实现以标准的文件系统接口读写OSS-HDFS数据_对象存储(OSS)-阿里云帮助中心 下载最新版本的JindoSDK JAR包。下载地址&#xff0c;请参见GitHubhttps://github.com/aliyun/alibabacloud-jindodat…

基于树莓派5(Raspberry Pi 5)的高性能工业平板电脑升级版!

​ 上海晶珩继推出首个搭载 Raspberry Pi 5 的平板电脑ED-HMI3010系列后&#xff0c;又推出了具备高性能和多功能特性的 Raspberry Pi 5 的平板电脑ED-HMI3020系列。ED-HMI3020支持选择7英寸和10.1英寸两种尺寸的触摸屏&#xff0c;可选配 M.2 NVMe SSD 存储扩展&#xff0c;提…

Ubuntu配置基本环境以及docker安装基本中间件

提示&#xff1a;ip地址请改为自己的本地ip 为了安全性&#xff0c;建议都给一些中间件设置密码&#xff08;本文也会教大家如何设置密码&#xff09; 安装vim sudo apt install vim此处如果安装失败&#xff0c;apt要换源。 安装docker docker版本为24.0.2 首先&#xff…

CSS实现元素水平垂直居中几种方案

方案一&#xff1a;利用 display: inline-block; vertical-align: middle; <div class"box"> <div></div> <span></span> </div> .box { width: 500px; height: 500px; background-color: red; text-align: center; } .box div …

修改vscode内置Vue VSCode Snippets(代码片段)

打开插件文件夹 文件夹名是 "作者名.vscode-插件名-版本号"组成的. C:\Users\Administrator\.vscode\extensions\sdras.vue-vscode-snippets-3.1.1\snippets 打开vue.json "prefix": "vbase" 就是代码块的关键词,输入vbase就会提示代码块 …

UML2.0 14种图简单介绍

UML 2.0包括14种图&#xff0c;分别列举如下&#xff1a; &#xff08;1&#xff09;类图&#xff08;class diagram&#xff09;。类图描述一组类、接口、协作和它们之间的关系。在OO系统的建模中&#xff0c;最常见的图就是类图。类图给出了系统的静态设计视图&#xff0c;活…

调试ad5245的总结

调试ad5245的总结 这个ad5245是通过IIC与FPGA进行通信的&#xff0c;首先要理解IIC协议。 经验总结&#xff1a; 1、SCL和SDA端的要有上拉电阻&#xff0c;且上拉电阻能正常工作&#xff1b; 2、要往SDA数据线上写三个字节才能调节ad5245的电阻值&#xff0c;第三个字节就是…

「云渲染科普」3dmax室内装修效果图怎么高效制作

3dmax室内装修效果图拥有丰富的家具、光影、材质纹理等&#xff0c;在渲染过程过程中如果室内的场景过大&#xff0c;个人电脑通常需要渲染几个小时或者好几天&#xff0c;这对于比较急的项目来说&#xff0c;往往会影响项目的进度。下面一起来看看3dmax室内装修效果图的&#…

linux如何按月统计日志中的接口访问数量

背景 有时候需要帮运营去统计一些数据,不论是活动产生的数据还是日常的数据。因为并没有功能来支撑&#xff0c;所以只能从日志中进行统计。 今天是需要通过在日志中按月统计用户登录的次数&#xff1a; 我们的日志格式大概如下: [2023-04-21 17:45:22.500] [1681985022047] …

使用 gitee+sphinx+readthedocs 搭建个人博客

给大家安利如何快速搭建个人博客网站&#xff01; 前言 这是我本地运行的一个使用sphinx构建的博客服务&#xff0c;这些文章&#xff0c;都是用markdown写的。 一直有个想法&#xff0c;就是把自己写的这些文件&#xff0c;搞成一个博客网站&#xff0c;放到网上&#xff0c…

【C++】__declspec含义

目录 一、__declspec(dllexport)如果这篇文章对你有所帮助&#xff0c;渴望获得你的一个点赞&#xff01; 一、__declspec(dllexport) __declspec(dllexport) 是 Microsoft Visual C 编译器提供的一个扩展&#xff0c;用于指示一个函数或变量在 DLL&#xff08;动态链接库&…

学习SSM框架第四天

学习目标&#xff1a; 基于XML三层架构开发小实验 学习时间&#xff1a; 学习SSM框架第四天 周三下午 开始实验前需要理解的几个知识点&#xff1a; 0.&#x1f356;生成对象方法 a.使用静态工程类 b.实例工厂类 c.空构造方法&#xff08;IOC&#xff09;所有属性的set方…

边缘计算的挑战和机遇:数据的安全性和隐私性问题

边缘计算的挑战和机遇&#xff1a;数据的安全性和隐私性问题 随着边缘计算技术的迅猛发展&#xff0c;数据的安全性和隐私性问题变得愈发重要。在分布式计算环境中&#xff0c;如何确保边缘计算中的数据安全性和隐私性成为亟待解决的问题。本文将深入讨论在边缘计算中设计有效…

Redis命令 - Sets命令组常用命令

Set集合&#xff0c;无序&#xff0c;一堆不重复值的组合。利用redis提供的set数据结构&#xff0c;可以存储一些集合性的数据。 使用场景&#xff1a;例如&#xff0c;实现如共同关注、共同喜好、二度好友等 1、SADD key member [member …] 向集合中添加一个或者多个成员 …

mybatisMysql分页查询,以及SQL_CALC_FOUND_ROWS与count(*) 性能对比

温故而知新&#xff0c;这里记录一下 一、引言 分页查询每个人程序猿几乎都使用过&#xff0c;但是有部分同学不懂什么是物理分页和逻辑分页。 物理分页&#xff1a; 相当于执行了limit分页语句&#xff0c;返回部分数据。物理分页只返回部分数据占用内存小&#xff0c;能够获取…

如何在simulink中怎么获取足端轨迹代码解释?

在使用Java代码框架统计用户获取足端轨迹时&#xff0c;我们可以使用Simulink的外部接口功能和Java的网络编程来实现。 首先&#xff0c;我们需要在Simulink中配置外部接口以便与Java进行通信。可以使用Simulink中的TCP/IP或UDP模块来实现网络通信。假设我们选择TCP/IP模块。 …

#AIGC##VDB# 【一篇入门VDB】矢量数据库-从技术介绍到选型方向

文章概览&#xff1a; 这篇文章深入探讨了矢量数据库的基本概念、工作原理以及在人工智能领域的广泛应用。 首先&#xff0c;文章解释了矢量的数学和物理学概念&#xff0c;然后引入了矢量在数据科学和机器学习中的应用。随后&#xff0c;详细介绍了什么是矢量数据库&#xff0…

文件包含漏洞原理以及修复方法

漏洞名称&#xff1a;文件include漏洞、文件包含 漏洞描述&#xff1a;文件包含是指程序代码在处理包含文件的时候没有严格控制。导致用户可以构造参数包含远程代码在服务器上执行&#xff0c;并得到网站配置或者敏感文件&#xff0c;进而获取到服务器权限&#xff0c;造成网站…