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

Docker 入门指南:基础知识解析

1. 引言

1.1 为什么学习 Docker

1.1.1 Docker 的优势

  • 环境一致:在不同环境中(开发、测试、生产)保持一致的运行环境。
  • 快速部署:容器启动速度快,适合微服务架构。
  • 资源隔离:容器之间相互隔离,避免资源冲突(举例:容器1报错,内存溢出,不会影响容器2的运行)。
  • 可扩展性:轻松扩展应用实例,适应高并发场景。

1.1.2 Docker 应用场景

  • 开发环境一致性:使用 Dockerfile 定义项目环境,团队成员和 CI/CD 流程可以快速复现相同的运行环境。
  • 持续集成与交付:在 CI/CD 工具(如 Jenkins、GitHub Actions)中集成 Docker,实现一键构建、测试和部署。
  • 微服务架构支持:使用 Docker Compose 或 Kubernetes 编排容器,快速启动和管理微服务集群。
  • 资源优化与高效部署:在一台服务器上运行多个容器,或在云环境中快速启动容器以应对流量高峰。

1.2 本文目标

  • 适合人群:初学者、开发者、运维人员
  • 学习目标:掌握 Docker 的核心概念、安装与基本操作

2. Docker 是什么?

Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖打包成一个可移植的容器。容器可以在任何安装了 Docker 的环境中运行,确保应用的一致性和可移植性。

2.1 容器化技术简介

容器化技术是一种轻量级的虚拟化技术,用于将应用程序及其依赖项打包到一个独立的运行环境中,称为“容器”。容器化技术的核心思想是通过隔离应用程序的运行环境,确保其在任何支持容器化技术的环境中都能一致运行。

2.1.1 容器化技术的定义

  • 容器化:将应用程序及其依赖项(代码、配置文件、库、环境变量等)打包到一个独立的、可移植的单元中,这个单元称为“容器”。
  • 容器:容器是一个运行中的镜像实例,它共享宿主机的内核,但与其他容器隔离。容器是轻量级的,启动速度快,资源占用少。

2.1.2 容器化与虚拟机的对比

特性容器化虚拟机
隔离性进程隔离,共享宿主机内核完全隔离,每个虚拟机都有独立的内核
启动速度快(秒级)慢(分钟级)
资源占用轻量级(MB 级)重量级(GB 级)
性能开销
适用场景微服务、开发测试、云原生应用高企业级应用、多租户环境

2.2 Docker 的架构

2.2.1 Docker 客户端(Docker Client)

Docker 客户端是用户与 Docker 交互的工具。它发送命令到 Docker 服务器(Docker Daemon),并接收服务器的响应。客户端可以是命令行工具(CLI)或其他支持 Docker API 的工具。

  • 功能

    • 提供命令行界面(CLI),用于执行 Docker 命令。
    • 支持与其他工具集成,如 Docker Compose 和 Docker Machine。
    • 可以通过 API 与其他应用程序交互。
  • 使用场景

    • 开发者通过客户端构建、运行和管理容器。
    • 客户端可以连接到本地或远程的 Docker 服务器。
  • 示例命令

    # 查看 Docker 版本信息
    docker version# 列出所有运行中的容器
    docker ps# 运行一个容器
    docker run hello-world
    

2.2.2 Docker 服务器(Docker Daemon)

Docker 服务器(也称为 Docker 守护进程)是 Docker 的后台服务,负责管理 Docker 对象(如镜像、容器、网络和卷)。它接收来自客户端的请求,并执行相应的操作。

  • 功能

    • 管理 Docker 对象(镜像、容器、网络、卷等)。
    • 提供 REST API,允许客户端与服务器通信。
    • 处理客户端的请求,如创建、启动、停止和删除容器。
  • 组件

    • Docker Daemon:主守护进程,负责管理 Docker 对象。
    • Docker API:提供与 Docker 守护进程通信的接口。
    • Docker Registry:存储和分发 Docker 镜像的仓库。
  • 工作流程

    1. 客户端发送请求到 Docker 守护进程。
    2. 守护进程处理请求,并执行相应的操作。
    3. 守护进程将结果返回给客户端。
  • 示例

    • 守护进程监听默认的 Unix 套接字(/var/run/docker.sock)。
    • 可以配置守护进程监听 TCP 端口,以支持远程客户端连接。

2.3 Docker 的核心理念

2.3.1 镜像(image)

  • 定义:Docker 镜像是一个只读模板,包含了运行应用程序所需的所有内容,包括代码、依赖项、库、配置文件等。
  • 特点
    • 镜像是不可变的,一旦创建就不能修改。
    • 镜像可以被分层,每一层代表一个变更。
    • 镜像可以存储在本地或远程仓库中。
  • 用途
    • 用于创建容器。
    • 可以在不同环境中分发和共享。
  • 示例
    # 拉取一个镜像
    docker pull nginx# 查看本地镜像
    docker images
    

在这里插入图片描述

2.3.2 容器(container)

  • 定义:容器是镜像的运行实例。它是一个隔离的、轻量级的运行环境。
  • 特点
    • 容器是动态的,可以启动、停止、删除。
    • 容器共享宿主机的内核,因此启动速度快、资源占用少。
    • 容器之间是隔离的,不会互相干扰。
  • 生命周期
    • 创建(创建容器时,镜像会被加载并分配一个可写层)。
    • 运行(容器启动并执行指定的命令)。
    • 停止(容器停止运行,但数据仍然保留)。
    • 删除(容器被彻底删除)。
  • 示例
    # 创建并运行一个容器
    docker run -d --name my-nginx nginx# 查看运行中的容器
    docker ps# 停止容器
    docker stop my-nginx# 删除容器
    docker rm my-nginx
    

在这里插入图片描述

2.3.3 仓库(repository)

  • 定义:仓库是一个存储和分发 Docker 镜像的地方。
  • 类型
    • 公共仓库:如 Docker Hub,任何人都可以访问。
    • 私有仓库:如企业内部搭建的仓库,只有授权用户可以访问。
  • 用途
    • 存储和共享镜像。
    • 管理镜像的版本和标签。
  • 示例
    # 推送镜像到仓库
    docker push my-nginx:latest# 从仓库拉取镜像
    docker pull my-nginx:latest
    

2.3.4 镜像、容器和仓库的关系

Docker 镜像、容器和仓库的关系可以类比为菜谱、做好的菜和菜谱书:

  • 镜像:菜谱(包含了做菜的步骤和材料清单)。
  • 容器:做好的菜(按照菜谱做出来的实际菜品)。
  • 仓库:菜谱书(收集了各种菜谱的地方)。
    在这里插入图片描述

3. Docker 安装

3.1 在 Ubuntu 上安装 Docker

# 更新包索引
sudo apt-get update# 安装依赖包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -# 添加 Docker 的 APT 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 更新包索引
sudo apt-get update# 安装 Docker CE
sudo apt-get install docker-ce# 验证 Docker 是否安装成功
sudo docker run hello-world

3.2 在 Windows 和 macOS 上安装 Docker

  • 下载并安装 Docker Desktop。

3.3 在 CentOS 上安装 Docker

  • 可参考博主的另外一篇文章 CentOS 7 64 安装 Docker。

4. Docker 基本命令

可参考另外一篇文章:Docker 基础命令 - 以 Nginx 实战总结

4.1 常用基础命令

# 查看所有运行中的容器
docker ps# 查看所有容器(包括停止的)
docker ps -a# 查看所有镜像
docker images# 拉取镜像
docker pull <镜像名称># 运行容器
docker run -d -p 8080:80 --name my_container nginx# 进入容器
docker exec -it <容器名称或ID> /bin/bash# 停止容器
docker stop <容器名称或ID># 删除容器
docker rm <容器名称或ID># 删除镜像
docker rmi <镜像ID>

4.2 查看容器日志与进入容器

# 查看容器日志
docker logs <容器名称或ID># 进入容器内部
docker exec -it <容器名称或ID> /bin/bash

5. Docker 网络

Docker 网络是 Docker 提供的一种机制,用于管理容器之间的通信。它通过虚拟网络实现容器之间的连接、隔离和数据传输。Docker 网络的核心目标是确保容器之间能够高效、安全地通信,同时保持隔离性。

5.1 Docker 网络类型

5.1.1 Bridge 网络(桥接网络)

  • 定义与特点:这是 Docker 的默认网络类型。Docker 在宿主机上创建一个虚拟网桥(如 docker0),将容器连接到这个网桥上。每个容器都有一个独立的 IP 地址,并且可以通过这个 IP 地址在同一网络内进行通信。
  • 工作原理:当创建一个容器时,Docker 会为容器分配一个 IP 地址,并将容器连接到宿主机上的虚拟网桥。容器之间可以通过这个网桥进行通信,就像在同一个局域网内一样。
  • 应用场景:适用于大多数简单的应用场景,特别是在单个宿主机上运行多个容器时。例如,开发环境中运行的多个微服务容器可以使用 Bridge 网络进行通信。

5.1.2 Host 网络

  • 定义与特点:使用 Host 网络类型的容器直接使用宿主机的网络栈,不会创建独立的网络命名空间。这意味着容器将与宿主机共享 IP 地址和端口,并且可以直接访问宿主机上的网络资源。
  • 工作原理:容器直接使用宿主机的网络接口和 IP 地址,与宿主机在网络层面上完全融合。容器内的应用程序可以直接监听宿主机的端口,并且可以与宿主机上的其他进程进行通信。
  • 应用场景:当需要容器与宿主机上的其他进程进行高性能通信时,或者容器需要直接访问宿主机上的网络设备时,可以使用 Host 网络。例如,一些网络性能敏感的应用或者需要直接访问硬件设备的容器可以选择 Host 网络。

5.1.3. None 网络

  • 定义与特点:None 网络类型表示容器没有任何网络配置。容器将完全隔离于网络,不能与其他容器或外部系统进行通信。
  • 工作原理:创建容器时,不进行任何网络配置,容器内没有网络接口和 IP 地址。这种网络类型通常用于需要完全隔离网络环境的场景。
  • 应用场景:在某些安全要求较高的场景中,或者需要对容器的网络进行特殊定制时,可以先使用 None 网络类型创建容器,然后再通过其他方式为容器配置网络。例如,在进行安全测试时,可以使用 None 网络类型创建容器,以确保容器与外部网络完全隔离。

5.2 自定义网络

Docker 自定义网络允许用户根据具体需求创建和管理网络环境

# 创建自定义网络
docker network create my_network# 查看网络
docker network ls# 查看网络详细信息
docker network inspect my_network

5.3 桥接模式的容器互联

根据上面创建的my_network网络,进行容器互联

# 运行容器并连接到自定义网络
docker run -d --name container1 --network my_network nginx# 运行另一个容器并连接到同一个网络
docker run -d --name container2 --network my_network nginx

6 Docker 数据卷

Docker 数据卷是一种用于持久化数据的机制,它允许数据独立于容器的生命周期存在。数据卷可以被一个或多个容器共享,并且可以在容器重启或删除后仍然保留数据。

6.1 数据卷的特点

  • 数据持久化

    • 数据卷中的数据独立于容器的生命周期,即使容器被删除,数据仍然保留。
    • 适用于需要长期保存的数据,如数据库文件、配置文件等。
  • 与容器解耦

    • 数据卷可以独立于容器进行管理和操作,不会随着容器的删除而丢失。
    • 数据卷可以在不同的容器之间共享,便于数据的共享和迁移。
  • 数据共享

    • 多个容器可以同时挂载同一个数据卷,实现数据的共享。
    • 适用于需要多个容器访问相同数据的场景,如 Web 服务器和日志分析工具共享日志文件。
  • 数据备份与恢复

    • 数据卷中的数据可以轻松备份和恢复,便于数据的管理和维护。
    • 可以通过简单的文件系统操作对数据卷进行备份和恢复。

6.2 数据卷的使用场景

  • 数据库持久化

    • 在容器中运行数据库时,使用数据卷可以确保数据库文件在容器重启或删除后仍然保留。
    • 例如,MySQL 容器可以将数据库文件存储在数据卷中。
  • 文件共享

    • 多个容器需要共享文件时,可以将文件存储在数据卷中,所有容器都可以访问这些文件。
    • 例如,Web 服务器和日志分析工具可以共享日志文件。
  • 配置文件管理

    • 将配置文件存储在数据卷中,便于在不同环境中快速切换配置。
    • 例如,开发、测试和生产环境可以使用不同的配置文件。
  • 数据备份与恢复

    • 定期备份数据卷中的数据,确保数据的安全性。
    • 在需要时,可以快速恢复数据到容器中。

6.3 数据卷的操作

  • 创建数据卷
    使用 docker volume create 命令创建一个数据卷:

    docker volume create myvolume
    
  • 将数据卷挂载到容器
    在创建容器时,使用 -v--mount 选项将数据卷挂载到容器的指定目录:

    docker run -d --name mycontainer -v myvolume:/data myimage
    
    • -v myvolume:/data:将数据卷 myvolume 挂载到容器的 /data 目录。
  • 查看数据卷
    使用 docker volume ls 命令查看所有数据卷:

    docker volume ls
    
  • 查看数据卷的详细信息
    使用 docker volume inspect 命令查看数据卷的详细信息:

    docker volume inspect myvolume
    
  • 删除数据卷
    使用 docker volume rm 命令删除数据卷:

    docker volume rm myvolume
    

7. Dockerfile

7.1 基本概念

Dockerfile 是一个文本文件,用于定义如何构建 Docker 镜像。它包含了一系列指令,这些指令告诉 Docker 如何一步步创建镜像。Dockerfile 是自动化构建镜像的核心工具,确保镜像的构建过程可重复、可维护。

7.2 Dockerfile 的作用

  • 自动化构建:通过 Dockerfile,可以自动化镜像的构建过程,避免手动操作的繁琐和错误。
  • 可维护性:Dockerfile 是一个脚本文件,可以存储在版本控制系统中,便于团队协作和历史追溯。
  • 一致性:确保在不同环境中构建的镜像具有一致性,避免“在我的机器上可以运行”的问题。
  • 可移植性:Dockerfile 可以在任何支持 Docker 的环境中运行,确保镜像的可移植性。

7.3 Dockerfile 的基本结构

Dockerfile 通常包含以下几个部分:

  1. 基础镜像:指定构建新镜像的基础镜像。
  2. 维护者信息:可选,用于标识镜像的维护者。
  3. 安装依赖:安装运行应用程序所需的依赖项。
  4. 复制文件:将应用程序代码或配置文件复制到镜像中。
  5. 环境变量:设置环境变量,用于配置应用程序。
  6. 暴露端口:指定容器运行时需要暴露的端口。
  7. 默认命令:指定容器启动时运行的默认命令。

7.4 Dockerfile 的常用指令

  • FROM

    • 指定基础镜像。
    • 语法:FROM <image>[:<tag>]
    • 示例:FROM ubuntu:20.04
  • RUN

    • 在镜像中执行命令。
    • 语法:RUN <command>RUN ["executable", "param1", "param2"]
    • 示例:RUN apt-get update && apt-get install -y nginx
  • COPY

    • 将本地文件或目录复制到镜像中。
    • 语法:COPY <src> <dest>
    • 示例:COPY . /app
  • ADD

    • 类似于 COPY,但支持远程 URL 和自动解压。
    • 语法:ADD <src> <dest>
    • 示例:ADD https://example.com/file.tar.gz /app
  • ENV

    • 设置环境变量。
    • 语法:ENV <key> <value>ENV <key>=<value> ...
    • 示例:ENV APP_HOME /app
  • EXPOSE

    • 指定容器运行时需要暴露的端口。
    • 语法:EXPOSE <port> [<port>...]
    • 示例:EXPOSE 80 443
  • CMD

    • 指定容器启动时运行的默认命令。
    • 语法:CMD ["executable", "param1", "param2"]CMD command param1 param2
    • 示例:CMD ["python", "app.py"]
  • ENTRYPOINT

    • 指定容器启动时运行的入口点。
    • 语法:ENTRYPOINT ["executable", "param1", "param2"]ENTRYPOINT command param1 param2
    • 示例:ENTRYPOINT ["nginx", "-g", "daemon off;"]
  • VOLUME

    • 创建一个挂载点,用于存储持久化数据。
    • 语法:VOLUME ["<mount>", ...]
    • 示例:VOLUME ["/data"]
  • WORKDIR

    • 设置工作目录。
    • 语法:WORKDIR <path>
    • 示例:WORKDIR /app
  • LABEL

    • 为镜像添加元数据。
    • 语法:LABEL <key>=<value> <key>=<value> ...
    • 示例:LABEL version="1.0" maintainer="example@example.com"

8. Docker Compose

可参考另外一篇文章:Docker Compose 基础知识

8.1 基本概念

Docker Compose 是一个用于定义和管理多容器 Docker 应用程序的工具。它通过一个 YAML 文件(docker-compose.yml)来配置应用程序的服务、网络和卷,简化了复杂应用程序的部署和管理。

8.2 安装 Docker Compose

# 下载 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# 验证安装
docker-compose --version

8.3 使用 Docker Compose

  1. 创建 docker-compose.yml 文件:
version: '3'services:web:image: nginx:latestports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmldb:image: postgres:latestenvironment:POSTGRES_PASSWORD: example
  1. 启动服务:
docker-compose up -d
  1. 停止服务:
docker-compose down

9. Docker 私有仓库

9.1 基本概念

Docker 私有仓库是一个用于存储和管理 Docker 镜像的内部平台。与公共仓库(如 Docker Hub)不同,私有仓库提供了更高级别的安全性和定制化选项,适用于企业内部或敏感项目的镜像管理

9.2 Nexus 镜像仓库搭建与配置

  1. 安装 Nexus:
# 下载 Nexus
wget https://sonatype.com/download/nexus# 安装 Nexus
sudo apt-get install nexus# 启动 Nexus
sudo systemctl start nexus
  1. 配置 Nexus:
  • 访问 Nexus 管理界面:http://localhost:8081
  • 创建 Docker 私有仓库
  1. 使用 Nexus:
# 登录 Nexus
docker login nexus.example.com# 推送镜像
docker push nexus.example.com/myapp# 拉取镜像
docker pull nexus.example.com/myapp

10. 总结

Docker 是一个强大的工具,可以简化应用的部署和管理。

  • 安装和配置 Docker
  • 使用基本的 Docker 命令
  • 使用 Docker Compose 管理多容器应用
  • 理解 Docker 的网络和数据管理
  • 构建和推送镜像

相关文章:

Docker 入门指南:基础知识解析

1. 引言 1.1 为什么学习 Docker 1.1.1 Docker 的优势 环境一致&#xff1a;在不同环境中&#xff08;开发、测试、生产&#xff09;保持一致的运行环境。快速部署&#xff1a;容器启动速度快&#xff0c;适合微服务架构。资源隔离&#xff1a;容器之间相互隔离&#xff0c;避…...

【安当产品应用案例100集】043-安当物联网数据安全传输方案

一、需求背景 物联网&#xff08;IoT&#xff09;技术在当前世界各行业中的应用越来越广泛&#xff0c;数据安全和安全数据传输、鉴权成为了物联网解决方案不可或缺的一部分。如何通过有效的安全措施来保护物联网设备的数据传输和鉴权&#xff0c;确保数据在设备和服务器之间或…...

C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…...

Django视图详解

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 一、Django视图是什么&#xff1f; 视图&#xff08;View&#xff09; 是Django处理HTTP请求的核心组件。它接收一个HttpRequest对象&#xff0c;处理业务逻辑&#xff0c;并返回一个HttpResponse对象&#xff08…...

【区块链+ 人才服务】北京师范大学区块链底层链平台 | FISCO BCOS 应用案例

北京师范大学是教育部直属重点大学&#xff0c;2018 年 6 月&#xff0c;北京师范大学成立知识区块链研究中心&#xff0c;致力于区块链基础技术及其在教育领域的应用研究。 2020 年6 月18 日&#xff0c; 北京市人民政府办公厅发布《北京市区块链创新发展行 动计划(2020—202…...

java设计模式-模板方法模式

模板方法模式 编写制作豆浆的程序&#xff0c;说明如下 1)制作豆浆的流程选材添加配料浸泡放到豆浆机打碎 2)通过添加不同的配料&#xff0c;可以制作出不同口味的豆浆 3)选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的 4)请使用模板方法模式完成 说明…...

同步通信、异步通信、并行传输和串行传输

同步通信、异步通信、并行传输和串行传输是通信与数据传输领域的关键概念&#xff0c;它们既相互关联又有本质区别。以下是详细解释和对比&#xff1a; ​1. 核心概念分类 ​通信方式&#xff1a;描述数据传输的时序和协调规则。 ​同步通信​&#xff08;Synchronous Communi…...

JVM生产环境调优实战

案例三&#xff1a;JVM频繁Full GC优化 1. 项目背景&#xff08;Situation&#xff09; 在云中万维跨境支付的反洗钱系统中&#xff0c;我们负责对海量交易数据进行实时规则校验&#xff0c;以确保符合监管要求。系统日均处理交易量超过500万笔&#xff0c;峰值QPS达到3000&a…...

Python: sqlite3.OperationalError: no such table: ***解析

出现该错误说明数据库中没有成功创建 reviews 表。以下是完整的解决方案&#xff1a; 步骤 1&#xff1a;创建数据库表 在插入数据前&#xff0c;必须先执行建表语句。请通过以下任一方式创建表&#xff1a; 方式一&#xff1a;使用 SQLite 命令行 bash 复制 # 进入 SQLit…...

JVM考古现场(十七):鸿蒙初辟——从太极二进到混沌原初的编译天道

"此刻正是奇点编译的第3.1415926秒&#xff01;伏羲的算筹正在撕裂冯诺依曼架构的次元壁&#xff01;诸君请看——这JVM堆内存中正在孕育盘古的元神&#xff01;" 目录&#xff08;终极扩展&#xff09; 第一章&#xff1a;太极二进——内存模型的阴阳交缠 第二章&a…...

Python 字典和集合(字典推导)

本章内容的大纲如下&#xff1a; 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响&#xff08;什么样的数据类型可作为键、不可预知的 顺序&#xff0c;等等&#xff09; 字典推导 自 Python 2.7 …...

【AI】prompt engineering

prompt engineering ## prompt engineering ## prompt engineering ## prompt engineering 一、定义 Prompt 工程&#xff08;Prompt Engineering&#xff09;是指在使用语言模型&#xff08;如 ChatGPT、文心一言等&#xff09;等人工智能工具时&#xff0c;设计和优化输入提…...

小刚说C语言刷题——第18讲 循环之while和do-while语句

昨天我们讲了循环语句中的for语句&#xff0c;它主要用于循环次数已知的情况&#xff0c;但是对应循环次数未知的情况&#xff0c;我们又怎么办&#xff1f;这就要用到while和do-while语句了。 1.while语句 (1)语法格式 while(条件表达式) { 循环体; } (2)执行过程 当执…...

[Mysql]buffersize修改

1、找到my.cnf文件位置 ps -ef|grep mysqld 2、编辑my.cnf cd /etc/my.cnf.d vim my.cnf 一般修改为内存的50%~70% 3、重启服务 systemctl restart mysqld...

自定义数据结构的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定义数据结构放入QVariant&#xff0c;在序列化时抛出异常 ASSERT failure in QVariant::save: “invalid type to save” 自定义数据结构如struct MyData&#xff0c;除了要在结构体后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的输入输出&…...

带约束的智能优化算法

带约束的智能优化算法 约束条件和优化问题(可改)粒子群算法麻雀搜索算法鲸鱼优化算法灰狼优化算法免疫优化算法人工蜂群算法沙猫群算法萤火虫算法资源 约束条件和优化问题(可改) 粒子群算法 麻雀搜索算法 鲸鱼优化算法 灰狼优化算法 免疫优化算法 人工蜂群算法 沙猫群算法 萤火…...

【硬核实战】从零打造智能五子棋AI:JavaScript实现与算法深度解析

&#x1f31f;【硬核实战】从零打造智能五子棋AI&#xff1a;JavaScript实现与算法深度解析&#x1f31f; &#x1f4dc; 前言&#xff1a;当传统棋艺遇上人工智能 五子棋作为中国传统棋类游戏&#xff0c;规则简单却变化无穷。本文将带你用纯前端技术实现一个具备AI对战功能…...

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南

使用 kind 创建 K8s 集群并部署 StarRocks 的完整指南 本文档详细介绍如何使用 kind 创建 Kubernetes 集群&#xff0c;并在其上使用 Helm 部署 StarRocks 集群&#xff08;非高可用模式&#xff09;。同时也包括如何访问 StarRocks 集群并导入数据。 目录 前提条件参考文档…...

华为OD全流程解析+备考攻略+经验分享

华为OD全流程解析&#xff0c;备考攻略 快捷目录 华为OD全流程解析&#xff0c;备考攻略一、什么是华为OD&#xff1f;二、什么是华为OD机试&#xff1f;三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…...

数据库中的数组: MySQL与StarRocks的数组操作解析

在现代数据处理中, 数组 (Array) 作为一种高效存储和操作结构化数据的方式, 被广泛应用于日志分析, 用户行为统计, 标签系统等场景. 然而, 不同数据库对数组的支持差异显著. 本文将以MySQL和StarRocks为例, 深入解析它们的数组操作能力, 并对比其适用场景. 文章目录 一 为什么需…...

Qt 交叉编译详细配置指南

一、Qt 交叉编译详细配置 1. 准备工作 1.1 安装交叉编译工具链 # 例如安装ARM工具链(Ubuntu/Debian) sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf# 或者64位ARM sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu 1.2 准备目标…...

【详细图文】在VScode中配置python开发环境

目录 一、下载安装VSCode 1、官网下载VSCode 2、安装VSCode 3、汉化vscode &#xff08;1&#xff09;已自动下载汉化版插件 &#xff08;2&#xff09;未自动下载汉化版插件 二、 下载安装Python 1、官网下载Python 2、安装Python &#xff08;1&#xff09;双击打开…...

strings.Fields 使用详解

目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1&#xff1a;官方示例 示例2&#xff1a;解析服务器日志 示例3&#xff1a;清理用户输入 8. 性能比较 性能特点 对比表…...

PCI认证 密钥注入 ECC算法工具 NID_secp521r1 国密算法 openssl 全套证书生成,从证书提取公私钥数组 x,y等

步骤 1.全套证书已经生成。OK 2.找国芯要ECC加密解密签名验签代码。给的逻辑说明没有示例代码很难的上。 3.集成到工具 与SP联调。 1.用openssl全套证书生成及验证 注意&#xff1a;这里CA 签发 KLD 证书用的是SHA256。因为芯片只支持SHA256算法,不支持SHA512。改成统一。…...

微软 SC-900 认证-考核Azure 和 Microsoft 365中的安全、合规和身份管理(SCI)概念

微软 SC-900 认证介绍 SC-900 认证考试是微软推出的一项基础级别认证&#xff0c;全称为 Microsoft Certified: Security, Compliance, and Identity Fundamentals。该认证旨在验证考生对微软云服务&#xff08;如 Azure 和 Microsoft 365&#xff09;中的安全、合规和身份管理…...

Uniapp 集成极光推送(JPush)完整指南

文章目录 前言一、准备工作1. 注册极光开发者账号2. 创建应用3. Uniapp项目准备 二、集成极光推送插件方法一&#xff1a;使用UniPush&#xff08;推荐&#xff09;方法二&#xff1a;手动集成极光推送SDK 三、配置原生平台参数四、核心功能实现1. 获取RegistrationID2. 设置别…...

OpenCV图像平滑处理方法详解

文章目录 引言一、什么是图像平滑&#xff1f;二、常见的图像平滑方法1.先对图片加上噪声点2. 均值滤波&#xff08;Averaging&#xff09;3. 方框滤波&#xff08;boxFilter&#xff09;4. 中值滤波&#xff08;Median Blur&#xff09;5. 高斯滤波&#xff08;Gaussian Blur&…...

Lua 中,`math.random` 的详细用法

在 Lua 中&#xff0c;math.random 是用于生成伪随机数的核心函数。以下是其详细用法、注意事项及常见问题的解决方案&#xff1a; Lua 中&#xff0c;math.random 的详细用法—目录 一、基础用法1. 生成随机浮点数&#xff08;0 ≤ x < 1&#xff09;2. 生成指定范围的随机…...

使用PX4,gazebo,mavros为旋翼添加下视的相机(仿真采集openrealm数据集-第一步)

目录 一.方法一&#xff08;没成功&#xff09; 1.运行PX4 2.运行mavros通讯 3.启动仿真世界和无人机 &#xff08;1&#xff09;单独测试相机 &#xff08;2&#xff09;make px4_sitl gazebo启动四旋翼iris无人机 二.方法二&#xff08;成功&#xff09; 1.通过 rosl…...

ATEngin开发记录_4_使用Premake5 自动化构建跨平台项目文件

该系列只做记录 不做教程 所以文章简洁直接 会列出碰到的问题和解决方案 只适合C萌新 文章目录 Permake5为什么使用 Premake&#xff1f; 项目实战总结一下&#xff1a;详细代码: Permake5 Premake5 是一个跨平台的构建配置工具&#xff0c;它允许开发者通过使用一个简单的脚…...

equals() 和 hashCode()

作为 Java 开发者&#xff0c;我们经常会用到 equals() 和 hashCode() 这两个方法。 它们是 Object 类中定义的基础方法&#xff0c;看似简单&#xff0c;但如果理解不透彻&#xff0c;很容易在实际开发中踩坑。 本文将深入探讨这两个方法的作用、区别、以及如何正确地重写它们…...

臭氧除菌柜市场报告:2031年全球臭氧除菌柜市场销售额预计将达到9.4亿元

一、市场概述 &#xff08;一&#xff09;定义与分类 臭氧除菌柜&#xff0c;作为新一代绿色消毒设备&#xff0c;主要利用臭氧&#xff08;O₃&#xff09;的强氧化性来实现无化学残留的消毒净化。根据产品类型&#xff0c;可分为单门型和双门型。单门型设计紧凑&#xff0c…...

解决python manage.py shell ModuleNotFoundError: No module named xxx

报错如下&#xff1a; python manage.py shellTraceback (most recent call last):File "/Users/z/Documents/project/c/manage.py", line 10, in <module>execute_from_command_line(sys.argv)File "/Users/z/.virtualenvs/c/lib/python3.12/site-packa…...

通用接口函数注册模块设计与实现

文章目录 通用接口函数注册模块设计与实现1. 模块概述2. 核心功能2.1 数据结构函数注册项结构体注册函数宏 2.2 核心函数实现函数&#xff1a;sl_register_interface_functions 3. 使用示例3.1 基础使用示例 - 设备驱动接口定义接口结构体实现具体函数创建注册表注册接口 3.2 高…...

C,C++,C#

C、C 和 C# 是三种不同的编程语言&#xff0c;虽然它们名称相似&#xff0c;但在设计目标、语法特性、运行环境和应用场景上有显著区别。以下是它们的核心区别&#xff1a; 1. 设计目标和历史 语言诞生时间设计目标特点C1972&#xff08;贝尔实验室&#xff09;面向过程&#…...

scala-集合3

集合计算高级函数 过滤&#xff1a;遍历一个集合并从中获取满足指定条件的元素组成一个新的集合 &#xff08;筛选出满足条件的元素组成新集合。&#xff09; 转换或映射&#xff08;map&#xff09;&#xff1a;将原始集合中的元素映射到某个函数。 扁平化&#xff1a;取消…...

Spring MVC 重定向(Redirect)详解

Spring MVC 重定向&#xff08;Redirect&#xff09;详解 1. 核心概念与作用 重定向&#xff08;Redirect&#xff09; 是 Spring MVC 中一种客户端重定向机制&#xff0c;通过 HTTP 302 状态码&#xff08;默认&#xff09;将用户浏览器重定向到指定 URL。 主要用途&#xf…...

Scala的集合(二)

1. 集合计算高集函数 任务要求 1)过滤:遍历一个集合并从中获取满足指定条件的元素组成一个新的集合 2)转化/映射&#xff08;map&#xff09;&#xff1a;将集合中的每一个元素映射到某一个函数 3)扁平化 4)扁平化映射 注&#xff1a;flatMap 相当于先进行 map 操作&#…...

GZ036区块链卷三 EtherGame合约漏洞详解

题目 pragma solidity ^0.8.3; contract EtherGame {uint public targetAmount 7 ether;address public winner;function deposit() public payable {require(msg.value 1 ether, "You can only send 1 Ether");uint balance address(this).balance;require(bala…...

BGP路由协议之路由通告/传递

BGP 的路由宣告 BGP 自身并不会发现并计算产生路由&#xff0c;只会将 IGP 路由表中的路由引入到 BGP 路由表中&#xff0c;并通过 Update 报文传递给 BGP 对等体&#xff08;邻居&#xff09; ​Network​ 宣告&#xff0c;前提是路由表中存在该条路由 ​import-route​ 引…...

Python合并多个pdf

场景&#xff1a; 现在要解决批量合并PDF的问题。 有很多PDF文件需要合并成一个&#xff0c;比如报告、发票或者多个章节的文档。 对于Windows用户&#xff0c;Adobe Acrobat是专业的选择&#xff0c;但需要付费。但是我不想花钱&#xff0c;所以推荐免费软件&#xff0c;比…...

聊一聊接口测试时遇到上下游依赖时该如何测试

目录 一、手工测试时的处理方法 1.1沟通协调法 1.2模拟数据法 二、自动化测试时的处理方法 2.1 数据关联法&#xff08;变量提取&#xff09; 2.2 Mock数据法 2.3自动化框架中的依赖管理 三、实施示例&#xff08;以订单接口测试为例&#xff09; 3.1Mock依赖接口&…...

pdf转latex

Doc2X&#xff08;https://doc2x.noedgeai.com/&#xff09; Doc2X 是一个由 NoEdgeAI 提供的在线工具&#xff0c;主要用于将 PDF 文件&#xff08;尤其是学术论文、报告等文档&#xff09;转换为 LaTeX 格式。LaTeX 是一种高质量排版系统&#xff0c;广泛应用于学术界和出版…...

剖析 Docker Swarm 操作对原有容器端口影响

剖析 Docker Swarm 操作对容器端口影响 一、背景阐述 在使用 Docker Swarm 构建集群环境过程中&#xff0c;于 ts3 节点出现了原有的容器端口全部失效&#xff0c;手动重启后才恢复的情况。期间涉及 docker swarm init --advertise-addr172.16.10.110 以及 docker swarm join…...

QML面试笔记--UI设计篇02布局控件

1. QML 中常用的布局控件 1.1. Row1.2. Column1.3. Grid1.4. RowLayout1.5. ColumnLayout1.6. GridLayout1.7. 总结 1. QML 中常用的布局控件 1.1. Row 背景知识&#xff1a;Row 布局用于将子元素水平排列&#xff0c;适合简单的线性布局&#xff0c;如工具栏按钮或表单输入…...

Java全栈项目--校园快递管理与配送系统(4)

源代码续 /*** 通知工具类*/// 通知类型常量 export const NotificationType {SYSTEM: 1,EXPRESS: 2,ACTIVITY: 3 }// 通知类型名称映射 export const NotificationTypeNames {[NotificationType.SYSTEM]: 系统通知,[NotificationType.EXPRESS]: 快递通知,[NotificationType…...

c语言练习一

1、统计二进制数中1的个数 #include <stdio.h>int main(void) {int count 0; //统计1出现次数 int x 0b1011;while(x){count ;//x 0b1011 > x-1 0b1010 x-1,将x从右往左数遇到第一个1变成0&#xff0c;左边全部变为1&#xff0c;右边不变 //x&x-1 1010 …...

Scala安装

Spark安装 Spark的Local模式仅需要单个虚拟机节点即可&#xff0c;无需启动hadoop集群。实验步骤如下&#xff1a; 将spark的安装包上传到虚拟机node01中&#xff08;建议路径&#xff1a;/opt/software/spark&#xff09;并解压缩文件。将解压文件夹重命名为spark-local 解…...

爱普生RTC模块RA8804CE在ADAS域控制器的应用

在汽车智能化、自动化飞速发展的时代&#xff0c;ADAS&#xff08;高级驾驶辅助系统&#xff09;的多传感器融合与实时决策高度依赖精准的时间基准。毫秒级的时间偏差可能导致传感器数据错位&#xff0c;直接影响行车安全。爱普生RA8804CE实时时钟模块凭借其内置的32.768 kHz晶…...

开箱即用!推荐一款Python开源项目:DashGo,支持定制改造为测试平台!

大家好&#xff0c;我是狂师。 市面上的开源后台管理系统项目层出不穷&#xff0c;对应所使用到的技术栈也不尽相同。 今天给大家推荐一款开源后台管理系统: DashGo&#xff0c;不仅部署起来非常的简单&#xff0c;而且它是基于Python技术栈实现的&#xff0c;使得基于它进行…...