当前位置: 首页 > news >正文

Docker 项目如何使用 Dockerfile 构建镜像?

1、Docker 和 Dockerfile 的重要性

1.1、Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。

本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享

1.2、Dockerfile 的作用:解释 Dockerfile 是如何帮助自动化 Docker 镜像构建过程的,以及它在确保环境一致性和部署自动化中的关键角色。强调 Dockerfile 的重要性不仅仅在于技术层面,还在于它为团队协作和DevOps实践提供支持。

2、Docker 基础

2.1、Docker 架构简介:详细介绍 Docker 的关键组成部分,包括 Docker 引擎、镜像、容器和仓库,以及它们如何协同工作。

2.2、安装和设置 Docker 环境:提供在不同操作系统(如 Windows、macOS 和 Linux)上安装 Docker 的指南,并说明如何配置 Docker 环境以准备构建和运行容器。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

2.3、Docker 命令基础:介绍最常用的 Docker 命令,如拉取镜像、运行容器、查看容器状态等,为读者提供实操的基础。

3、Dockerfile 深入理解

3.1、Dockerfile 是什么:定义 Dockerfile 并解释其用途,即如何使用它来描述和自动化构建 Docker 镜像的过程。

3.2、Dockerfile 语法详解:深入讲解 Dockerfile 的语法,包括各种指令和它们的用途,如何正确编写 Dockerfile 以及如何避免常见错误。

3.3、常用指令介绍:详细介绍 Dockerfile 中的关键指令,如 FROM(指定基础镜像)、RUN(执行命令)、CMD(设置容器默认执行命令)、LABEL(添加元数据)等,以及它们的使用场景和最佳实践。

4、编写你的第一个 Dockerfile

4.1、选择基础镜像

基础镜像是构建你的 Docker 镜像的起点。它可以是任何已存在的镜像,包括轻量级的像 Alpine 或者更全面的像 Ubuntu。选择基础镜像时,需要考虑的是镜像的大小、安全性、兼容性和维护频率。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

例如,如果你打算构建一个运行 Java 应用程序的镜像,你可能会从一个带有预安装 JDK 的官方 Java 镜像开始。

示例代码

# 使用官方 Java 11 JDK 镜像作为基础镜像
FROM openjdk:11-jdk

4.2、编写 Dockerfile:步骤和最佳实践

接下来,我们将通过一些基本指令来编写 Dockerfile。

示例代码

# 使用官方 Java 11 JDK 镜像作为基础镜像
FROM openjdk:11-jdk# 设置环境变量,例如时区
ENV TZ=Asia/Shanghai# 设置工作目录,这是容器内部的文件路径
WORKDIR /app# 将本地项目文件复制到容器内的 /app 目录下
COPY . /app# 编译 Java 项目(假设是 Maven 项目)
RUN mvn clean package -DskipTests# 指定容器启动时运行的命令
CMD ["java", "-jar", "target/myapp.jar"]

逐行注释:

FROM openjdk:11-jdk:选择基础镜像。

ENV TZ=Asia/Shanghai:设置容器的环境变量,这里设置时区为上海时间。

WORKDIR /app:指定容器内的工作目录。后续的指令都会在这个目录下执行。

COPY . /app:将当前目录下的文件复制到容器的 /app 目录。

RUN mvn clean package -DskipTests:运行 Maven 命令来构建 Java 项目,这里跳过了测试。

CMD [“java”, “-jar”, “target/myapp.jar”] :指定容器启动时执行的命令,这里是运行编译后的 Java 应用。

4.3、构建过程详解

现在,让我们通过命令行来构建这个 Docker 镜像。

首先,确保你的 Docker 环境已经安装并运行。然后,在包含 Dockerfile 的目录下执行以下命令:

docker build -t my-java-app .

逐行解释:

docker build:这是 Docker 用来构建镜像的命令。

-t my-java-app:这个标志用于标记你的镜像,并给它一个名字,这里叫做 my-java-app

. :这指示 Docker 使用当前目录下的 Dockerfile。

构建过程中,Docker 会按照 Dockerfile 的指令逐步构建镜像。每个指令都会创建一个新的镜像层,并缓存以便重用。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

完成后,你可以通过运行 docker images 命令来查看新构建的镜像。

这样,你就完成了你的第一个 Dockerfile 的编写和构建过程。

5、高级 Dockerfile 技巧

5.1、多阶段构建:优化镜像大小和构建时间

多阶段构建允许你在一个 Dockerfile 中使用多个 FROM 指令,每个阶段都可以使用不同的基础镜像,并从前一个阶段中复制所需的文件,这样可以显著减少最终镜像的大小。

示例代码

# 第一阶段:使用 Maven 镜像作为基础来构建 Java 项目
FROM maven:3.6.3-jdk-11 AS build
WORKDIR /app
COPY . /app
RUN mvn clean package -DskipTests# 第二阶段:使用 Java 运行时镜像
FROM openjdk:11-jre
WORKDIR /app
# 从构建阶段复制编译后的 jar 文件到这个新镜像中
COPY --from=build /app/target/myapp.jar /app/
CMD ["java", "-jar", "myapp.jar"]

逐行注释:

FROM maven:3.6.3-jdk-11 AS build:第一阶段,使用 Maven 镜像来构建 Java 项目。

WORKDIR /appCOPY . /app:设置工作目录并复制项目文件。

RUN mvn clean package -DskipTests:执行 Maven 命令构建项目。

FROM openjdk:11-jre:第二阶段,使用 Java 运行时镜像。

COPY --from=build /app/target/myapp.jar /app/ :从第一阶段复制构建好的 jar 文件。

CMD [“java”, “-jar”, “myapp.jar”] :设置容器启动时运行的命令。

5.2、使用 ARG 和 ENV 管理变量

ARG 和 ENV 指令用于设置环境变量。ARG 在构建过程中有效,而 ENV 则是在容器运行时有效。

示例代码

# 使用 ARG 设置构建阶段的变量
ARG VERSION=1.0FROM openjdk:11-jre
# 使用 ENV 设置容器运行时的环境变量
ENV APP_VERSION=${VERSION}WORKDIR /app
COPY ./target/myapp-${APP_VERSION}.jar /app/myapp.jar
CMD ["java", "-jar", "myapp.jar"]

逐行注释:

ARG VERSION=1.0:定义一个名为 VERSION 的构建参数,并设置默认值为 1.0。

FROM openjdk:11-jre:选择基础镜像。

ENV APP_VERSION=${VERSION} :设置环境变量 APP_VERSION,其值来自 ARG 定义的 VERSION。

WORKDIR /app:指定工作目录。

COPY ./target/myapp-${APP_VERSION}.jar /app/myapp.jar:复制构建好的 jar 文件到镜像中,文件名包含版本号。

CMD [“java”, “-jar”, “myapp.jar”] :指定容器启动时的默认命令。

5.3、添加健康检查:HEALTHCHECK 指令

HEALTHCHECK 指令允许你告诉 Docker 如何测试一个容器来检查它是否仍在正常运行。这在自动化管理容器时非常有用。

示例代码

FROM openjdk:11-jre
WORKDIR /app
COPY ./target/myapp.jar /app/# 设置健康检查指令
HEALTHCHECK --interval=30s --timeout=30s --retries=3 CMD curl -f http://localhost:8080/health || exit 1CMD ["java", "-jar", "myapp.jar"]

逐行注释:

FROM openjdk:11-jre:选择基础镜像。

WORKDIR /appCOPY ./target/myapp.jar /app/ :设置工作目录并复制 jar 文件到镜像。

HEALTHCHECK --interval=30s --timeout=30s --retries=3 CMD curl -f http://localhost:8080/health || exit 1:定义健康检查指令,每30秒检查一次,超时时间也是30秒,重试3次。使用 curl 命令来检查应用的 /health 端点。

CMD [“java”, “-jar”, “myapp.jar”] :指定容器启动时运行的命令。

通过这些高级技巧,你的 Dockerfile 不仅会更高效,也会更适合生产环境的要求

6、Dockerfile 调试和优化

6.1、调试 Dockerfile:常见问题和解决方案

调试 Dockerfile 时可能遇到的一些常见问题包括构建错误、运行时错误和性能问题。以下是一些解决这些问题的策略。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

示例代码

# 示例 Dockerfile
FROM python:3.8# 安装依赖
RUN pip install flask# 拷贝应用代码
COPY . /app# 设置工作目录
WORKDIR /app# 设置暴露端口
EXPOSE 5000# 运行应用
CMD ["python", "app.py"]

逐行注释:

FROM python:3.8:选择基础镜像。

RUN pip install flask:安装 Flask,如果此处出错,检查网络连接或镜像源。

COPY . /app:将当前目录下的文件复制到镜像的 /app 目录。

WORKDIR /app:设置工作目录。

EXPOSE 5000:暴露端口,对应 Flask 应用的默认端口。

CMD [“python”, “app.py”] :设置容器启动时执行的命令。

6.2、性能优化:减少层和缓存利用

Dockerfile 中的每条指令都会创建一个新的层,合理减少层数可以优化镜像的大小和构建时间。

示例代码

FROM python:3.8# 合并 RUN 指令来减少层数
RUN apt-get update && apt-get install -y git \&& pip install flaskCOPY . /appWORKDIR /appEXPOSE 5000CMD ["python", "app.py"]

逐行注释:

RUN apt-get update && apt-get install -y git && pip install flask:合并命令,以减少层数并利用 Docker 的层缓存机制。

6.3、安全最佳实践

在编写 Dockerfile 时考虑安全性是非常重要的。

示例代码

FROM python:3.8# 以非 root 用户运行
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuserCOPY --chown=appuser:appuser . /appWORKDIR /appEXPOSE 5000CMD ["python", "app.py"]

逐行注释:

RUN groupadd -r appuser && useradd -r -g appuser appuser:创建一个新的

用户 appuser 和用户组 appuser,以提高安全性。

USER appuser:指定接下来的指令应该以 appuser 用户身份运行。

COPY --chown=appuser:appuser . /app:将当前目录下的文件复制到镜像的 /app 目录,并将文件的所有权更改为 appuser

WORKDIR /app:设置工作目录。

EXPOSE 5000:暴露端口 5000。

CMD [“python”, “app.py”] :设置容器启动时执行的命令。

通过遵循这些调试和优化策略,你可以提高 Dockerfile 的效率和安全性。调试时,注意观察错误信息以便快速定位问题。在优化方面,合理地合并指令和使用非 root 用户运行容器是关键

7、使用 Dockerfile 构建实际项目

为了更好地理解 Dockerfile 的应用,我们将通过一个具体的项目案例来展示如何使用 Dockerfile 构建、测试和部署一个应用。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

7.1、项目案例简介

假设我们有一个简单的 Node.js Express 应用,它提供一个基础的 web 服务。项目结构如下:

app.js:Express 应用的主文件。

package.json:定义项目依赖。

views/ :存放视图文件的目录。

public/ :存放静态文件的目录。

7.2、逐步构建项目的 Dockerfile

示例代码

# 使用 Node.js 官方镜像作为基础镜像
FROM node:14# 创建并设置应用的工作目录
WORKDIR /usr/src/app# 复制 package.json 和 package-lock.json
COPY package*.json ./# 安装项目依赖
RUN npm install# 复制应用源代码到工作目录
COPY . .# 暴露 3000 端口
EXPOSE 3000# 定义运行应用的命令
CMD ["node", "app.js"]

逐行注释:

  • FROM node:14:以 Node.js 14 的官方镜像为基础。
  • WORKDIR /usr/src/app:设置容器内的工作目录。
  • COPY package.json ./* :复制 package.jsonpackage-lock.json 到工作目录。
  • RUN npm install:安装项目依赖。
  • COPY . . :复制剩余的项目文件到工作目录。
  • EXPOSE 3000:暴露 3000 端口,Node.js 应用默认的监听端口。
  • CMD [“node”, “app.js”] :容器启动时运行的命令。

7.3、测试和部署

测试:

  1. 构建镜像:在 Dockerfile 所在的目录运行 docker build -t my-node-app .
  2. 运行容器:执行 docker run -p 3000:3000 my-node-app,将容器的 3000 端口映射到主机的 3000 端口。
  3. 访问应用:在浏览器中访问 http://localhost:3000 查看应用是否正常运行。

部署:

  1. 将构建好的镜像推送到 Docker Hub 或其他容器镜像仓库。
  2. 在生产环境的服务器上,从仓库拉取镜像并运行。

例如,推送到 Docker Hub:

docker tag my-node-app yourusername/my-node-app
docker push yourusername/my-node-app

在生产服务器上运行:

docker pull yourusername/my-node-app
docker run -p

3000:3000 yourusername/my-node-app

逐行注释:

docker tag my-node-app yourusername/my-node-app:给构建的镜像添加标签,以便推送到 Docker Hub。

docker push yourusername/my-node-app:将镜像推送到 Docker Hub。

docker pull yourusername/my-node-app:在生产服务器上从 Docker Hub 拉取镜像。

docker run -p 3000:3000 yourusername/my-node-app:在生产环境运行容器,并映射端口。

通过这样的流程,你可以将一个 Node.js 应用容器化,并进行测试和部署。使用 Dockerfile 的好处在于,你可以确保应用在开发、测试和生产环境中的一致性。这简化了部署过程并减少了与环境相关的问题。

8、Dockerfile 在 DevOps 中的应用

Dockerfile 在 DevOps 实践中扮演着重要角色,特别是在持续集成(CI)、持续部署(CD)和微服务架构中。

8.1、Dockerfile 与持续集成(CI)

在持续集成流程中,Dockerfile 能确保应用在各种环境中的一致性和可重复性。Dockerfile 用于构建 Docker 镜像,这些镜像可以在 CI 系统中被用来运行自动化测试和其他质量保证步骤。

示例:集成到 Jenkins

假设有一个 Jenkins pipeline,用于构建和测试 Node.js 应用。

pipeline {agent anystages {stage('Build') {steps {script {docker.build("my-node-app")}}}stage('Test') {steps {script {docker.image("my-node-app").inside {sh 'npm test'}}}}}
}

逐行注释:

pipeline { … } :定义 Jenkins pipeline。

agent any:在任何可用的 agent 上运行。

stage(‘Build’) { … } :定义构建阶段。

docker.build(“my-node-app”) :使用 Dockerfile 构建镜像。

stage(‘Test’) { … } :定义测试阶段。

docker.image(“my-node-app”).inside { … } :在构建的 Docker 容器内运行命令。

sh ‘npm test’ :运行 npm 测试。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

8.2、Dockerfile 在持续部署(CD)中的作用

在持续部署环境中,Dockerfile 提供了一种方便的方式来封装应用和其依赖,确保在不同环境中的一致运行。通过自动化部署 Docker 镜像,可以减少部署过程中的人为错误。

示例:使用 Docker 镜像进行部署

假设你使用 Kubernetes 作为部署环境,以下是一个简单的部署配置示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-node-app
spec:replicas: 3selector:matchLabels:app: my-node-apptemplate:metadata:labels:app: my-node-appspec:containers:- name: my-node-appimage: yourusername/my-node-appports:- containerPort: 3000

逐行注释:

apiVersion: apps/v1:指定 Kubernetes API 版本。

kind: Deployment:定义一个部署对象。

metadata: { name: my-node-app } :设置部署的名称。

spec: { replicas: 3 … } :定义三个副本。

containers: - name: my-node-app:定义使用的容器。

image: yourusername/my-node-app:指定从 Docker Hub 拉取的镜像。

containerPort: 3000:暴露容器的端口。

8.3、Docker

file 和微服务架构在微服务架构中,每个服务通常是独立部署和扩展的。Dockerfile 在这种环境中提供了一个标准化的方法来封装各个微服务,确保它们在不同环境下运行一致。

示例:构建微服务的 Dockerfile

假设你有一个 Python 编写的微服务,以下是它的 Dockerfile 示例:

# 使用 Python 官方镜像
FROM python:3.8-slim# 设置工作目录
WORKDIR /usr/src/app# 安装 Python 依赖
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt# 复制源代码
COPY . .# 暴露服务端口
EXPOSE 5000# 运行服务
CMD ["python", "./my_service.py"]

逐行注释:

FROM python:3.8-slim:选择基础镜像。

WORKDIR /usr/src/app:设置工作目录。

COPY requirements.txt ./ :复制依赖文件。

RUN pip install --no-cache-dir -r requirements.txt:安装依赖。

COPY . . :复制源代码到工作目录。

EXPOSE 5000:暴露 5000 端口。

CMD [“python”, “./my_service.py”] :容器启动时运行的命令。

每个微服务都可以有类似的 Dockerfile,确保它们可以在任何 Docker 环境中一致运行。这样,不同的服务可以被独立开发、测试、部署和扩展,从而充分发挥微服务架构的优势。

通过将 Docker 和 Dockerfile 集成到 DevOps 流程中,可以大大提升软件开发、测试、部署的效率和可靠性。

总结 Dockerfile 的最佳实践和未来趋势

1、Dockerfile 最佳实践

1.1、保持镜像尽可能小:选择合适的基础镜像,例如 Alpine Linux,因为它非常小巧。在构建过程中,只安装必要的包和依赖。

1.2、使用多阶段构建:多阶段构建可以帮助减小最终镜像的大小,通过在一个阶段构建应用,然后在另一个阶段只复制必要的文件。

1.3、避免安装不必要的软件包:只安装运行应用所必需的软件包,减少安全漏洞的风险。

1.4、使用 .dockerignore 文件:类似 .gitignore,可以避免不必要的文件被复制到镜像中。

1.5、利用构建缓存:合理安排 Dockerfile 指令顺序,使得频繁变动的层放在后面,以利用 Docker 的构建缓存。

1.6、安全性:尽可能使用非 root 用户运行应用,减少安全风险。

1.7、明确标记:使用 LABEL 指令为镜像添加元数据,比如维护者信息、版本号等。

2、Dockerfile 未来趋势

2.1、与云原生技术的整合:随着云原生技术的发展,Docker 和 Kubernetes 将更加紧密地协同工作,Dockerfile 在构建云原生应用中将发挥更大的作用。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

2.2、安全性关注增加:随着安全意识的提高,未来 Dockerfile 的编写将更加注重安全性,比如通过更安全的基础镜像和更严格的安全扫描。

2.3、自动化和智能化:可能会出现更多工具来自动化生成和优化 Dockerfile,甚至在某些情况下,AI 可能参与 Dockerfile 的生成和优化过程。

2.4、更紧密的 DevOps 集成:Dockerfile 的设计和应用将更加贴近 DevOps 流程,特别是在持续集成和持续部署方面,它将成为自动化管道的核心组件。

2.5、可复用性和模块化:随着容器化技术的成熟,Dockerfile 的可复用性和模块化将越来越受到重视。我们可能会看到更多针对特定应用或服务的预制 Dockerfile 模板。

2.6、性能优化:Dockerfile 的未来版本可能会集成更多性能优化的特性,比如更高效的层压缩和缓存机制,以减少构建和部署时间。

项目文档&视频:

开源:项目文档 & 视频 Github-Doc

通过遵循这些最佳实践并关注未来的趋势,你可以更有效地利用 Dockerfile 来构建、测试和部署你的应用。Dockerfile 不仅是一个工具,它还代表了一种思维方式,即如何更好地在不同环境中一致地部署和管理应用。随着技术的不断进步,Dockerfile 和容器技术将继续演化,为软件开发和部署带来更多的便利和创新。

本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享

相关文章:

Docker 项目如何使用 Dockerfile 构建镜像?

1、Docker 和 Dockerfile 的重要性 1.1、Docker 简介:讲述 Docker 的起源、它是如何革新现代软件开发的,以及它为开发者和运维团队带来的好处。重点强调 Docker 的轻量级特性和它在提高应用部署、扩展和隔离方面的优势。 本文已收录于,我的…...

实践学习PaddleScience飞桨科学工具包

实践学习PaddleScience飞桨科学工具包 动手实践,在实践中学习!本项目可以在AIStudio平台一键运行!地址:https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的…...

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。…...

达梦数据库主备集群

1:服务器硬件需求 按实际业务需求,选择合适的服务器,准备 3 台服务器,一台主库服务器,一台备库服务器,一台监视器服务器,服务器参数建议如下: 硬件要求物理内存>16 GB交换区Swa…...

Spark Doris Connector 可以支持通过 Spark 读取 Doris 数据类型不兼容报错解决

1、版本介绍: doris版本: 1.2.8Spark Connector for Apache Doris 版本: spark-doris-connector-3.3_2.12-1.3.0.jar:1.3.0-SNAPSHOTspark版本:spark-3.3.1 2、Spark Doris Connector Spark Doris Connector - Apache Doris 目…...

深入理解 go chan

go 里面,在实际程序运行的过程中,往往会有很多协程在执行,通过启动多个协程的方式,我们可以更高效地利用系统资源。 而不同协程之间往往需要进行通信,不同于以往多线程程序的那种通信方式,在 go 里面是通过…...

java+vue基于Spring Boot的渔船出海及海货统计系统

该渔船出海及海货统计系统采用B/S架构、前后端分离进行设计,并采用java语言以及springboot框架进行开发。该系统主要设计并完成了管理过程中的用户注册登录、个人信息修改、用户信息、渔船信息、渔船航班、海货价格、渔船海货、非法举报、渔船黑名单等功能。该系统操…...

Linux第25步_在虚拟机中备份“ST官方的TF-A源码”

TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"S…...

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …...

C++(1) —— 基础语法入门

目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...

构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包

本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...

Vue-插槽(Slots)

1. 介绍 在Vue.js中,插槽是一种强大的功能,它允许你创建可重用的模板,并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式,可以在父组件中定义一些“插槽”,然后在子组件中使用这些插槽,插…...

新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?

作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...

安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现

安防视频监控EasyCVR系统具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...

spring cloud之集成sentinel

写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1:准备 1.1:理论 对于一个系统来说,最重要的就是高可用,那么如何实现高可用呢?你可能会说,集群部署不就可以了,但事实并…...

让车辆做到“耳听八方”,毫米波雷达芯片与系统设计

摘要: 毫米波雷达,是指工作在毫米波波段(一般为30~300GHz频域,波长1~10mm)探测的雷达。毫米波雷达体积小、质量轻、空间分辨率高,穿透“雾烟灰”的能力强,还具备全天候全天时工作的优势。在智能网联汽车体系中,毫米波雷达是系统感知层不可或缺的重要硬件,能让智能驾…...

Python如何实现数据驱动的接口自动化测试

大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法,token,mobile,email三个参数 token为必填项mobil…...

高级分布式系统-第15讲 分布式机器学习--联邦学习

高级分布式系统汇总:高级分布式系统目录汇总-CSDN博客 联邦学习 两种常见的架构:客户-服务器架构和对等网络架构 联邦学习在传统的分布式机器学习基础上的变化。 传统的分布式机器学习:在数据中心或计算集群中使用并行训练,因为…...

小程序基础学习(事件处理)

原理&#xff1a;组件内部设置点击事件&#xff0c;然后冒泡到页面捕获点击事件 在组件内部设置点击事件 处理点击事件&#xff0c;并告诉页面 页面捕获点击事件 页面处理点击事件 组件代码 <!--components/my-info/my-info.wxml--> <view class"title"…...

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…...

【linux学习笔记】网络

目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 通过网络传输文件ftp 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是pin…...

JUC-线程中断机制和LockSupport

线程中断机制 概念 java提供了一种用于停止线程的协商机制-中断。称为中断标识协商机制。 常用API public void interrupt() 仅仅让线程的中断标志位设置为true。不进行其他操作。public boolean isInterrupted() 获取中断标志位的状态。public static boolean interrupted…...

哈希表与哈希算法(Python系列30)

在讲哈希表数据结构和哈希算法之前&#xff0c;我想先刨析一下数组和python中的列表 首先来讲一下数组&#xff0c;我想在这提出一个疑问&#xff1a; 为什么数组通过索引查询数据的时间复杂度为O(1)&#xff0c;也就是不管数组有多大&#xff0c;算法的执行时间都是不变的。…...

『 C++ 』AVL树详解 ( 万字 )

&#x1f988;STL容器类型 在STL的容器中,分为几种容器: 序列式容器&#xff08;Sequence Containers&#xff09;: 这些容器以线性顺序存储元素&#xff0c;保留了元素的插入顺序。 支持随机访问&#xff0c;因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…...

Python下载安装pip方法与步骤_pip国内镜像

前提&#xff1a;下载安装好 python 打开命令提示符winR->cmd&#xff08;不需要进入 python&#xff0c;直接在终端输入指令执行即可&#xff0c;也可以再 pycharm 终端执行命令&#xff09;加入要安装ipython&#xff0c;需要执行以下命令&#xff1a; pip install **<…...

自动化测试框架pytest系列之基础概念介绍(一)

如果你要打算学习自动化测试 &#xff0c;无论是web自动化、app自动化还是接口自动化 &#xff0c;在学习的道路上&#xff0c;你几乎会遇到pytest这个测试框架&#xff0c;因为自动化编写没有测试框架&#xff0c;根本玩不了 。 如果你已经是一位自动化测试人员 &#xff0c;…...

编码技巧:如何在Golang中高效解析和生成XML

编码技巧&#xff1a;如何在Golang中高效解析和生成XML 引言Golang中的XML基础解析XML文件生成XML文件错误处理和调试高级技巧和最佳实践总结 引言 在当今数据驱动的编程世界中&#xff0c;有效地处理各种数据格式是每个开发人员必备的技能之一。其中&#xff0c;XML&#xff…...

24校招,帆书测试开发工程师一面

前言 樊高读书是帆书的前身&#xff0c;我之前还看过他们的书&#xff0c;缘分闭环了 时间&#xff1a;25min 平台&#xff1a;飞书视频面试 过程 自我介绍为啥从后端转测试&#xff1f;通过实习经历&#xff0c;对测试有什么了解&#xff1f;讲一下游戏测试经历负责什么业…...

Java 方法以及在计算机内部的调用问题

修饰符 返回值类型 方法名( 形参列表 ){ 方法体代码(需要执行的功能代码) return 返回值; } 方法在内种没有先后顺序&#xff0c;但是不能把一个方法定义在另一个方法中。 方法的返回值类型写void&#xff08;无返回申明&#xff09;时&#xff0c;方法内不能使用return返回数…...

【算法与数据结构】343、LeetCode整数拆分

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;博主做这道题的时候一直在思考&#xff0c;如何找到 k k k个正整数&#xff0c; k k k究竟为多少合适。…...

it服务商/seo自学网官方

1、下载空白包 2、用自己应用的签名文件&#xff08;.keystore或.jks&#xff09;进行签名&#xff0c;步骤如下&#xff08;应用宝为例&#xff09; &#xff08;1&#xff09;进入到签名文件的路径下&#xff0c; &#xff08;2&#xff09;签名&#xff1a;jarsigner -verbo…...

石家庄建设网站公司/武汉百度推广优化

zendWeb应用程序通常遵循同步通信模型。 但是&#xff0c;非交互式且长时间运行的任务&#xff08;例如报告生成&#xff09;更适合异步执行。 减轻任务的负担以在以后甚至在另一台服务器上运行的一种方法是使用Job Queue模块&#xff0c;它是Zend Server 5的一部分&#xff08…...

做企业网站怎么备案/网站排名工具

http://wiki.jikexueyuan.com/project/spring/beans-auto-wiring/spring-autowiring-byname.html 转载于:https://www.cnblogs.com/zquan/p/10753573.html...

做外贸常用的网站有哪些/谷歌优化排名怎么做

SAP CO模块 KSV5 费用分摊分配解析 2018年07月18日 13:22:40 SAP小菜鸟鸟 阅读数&#xff1a;2073 CO成本控制是SAP财务的一大难点&#xff0c;有些地方可能会比较绕&#xff0c;但是捋顺思路&#xff0c;其实也还行。 (文中所有数据来源皆为作者杜撰&#xff0c;请勿对号入…...

可以做vx数独的网站/sem推广代运营

windbg 调试子进程 学习过程中遇到了一个从前未调试过的情景&#xff1a;我正在调试的进程通过CreateProcessW创建了一个子进程&#xff0c;我需要去了解子进程中发生的行为。 那么怎么去调试呢&#xff1f;OD 就有点麻烦了&#xff0c;要patch cc然后 用JIT模式的OD去调试。所…...

wordpress安装创建数据库文件/小程序开发工具

大家好呀&#xff0c;打算写一个 Go 语言组件源码分析系列&#xff0c;一是为了能学习下 Go 语言&#xff0c;看下别人是怎么写 Go 的&#xff0c;二是也掌握一个组件。 本次选择了 Sentinel-Go&#xff0c;一是对 Java 版本的 Sentinel 算是有一些了解&#xff0c;也在生产上…...