Docker 高级管理笔记

前言:Docker 高级管理概述

随着 Docker 技术的广泛应用,容器化已成为现代软件开发与部署的核心方式。本笔记聚焦 Docker 高级管理中的两大关键技术 —— 容器通信与数据持久化,深入解析 Docker 网络模式、端口映射、容器互联机制及数据卷管理等核心内容,为构建高效、安全的容器化应用提供全面指南。

Docker 高级管理的核心目标是解决容器化应用在大规模部署时面临的通信效率、数据安全及服务可靠性问题。容器通信技术确保不同容器间、容器与外部网络间的高效通信,而数据持久化机制则保障关键数据在容器生命周期内的安全性与可恢复性。

第一节:容器通信技术

一、Docker 容器网络模式详解

Docker 提供了丰富的网络模式,每种模式针对不同的应用场景设计,理解这些模式是实现高效容器通信的基础。

1. Bridge 模式:默认网络解决方案

Bridge 模式是 Docker 的默认网络模式,当 Docker 安装完成后,会自动创建一个名为 docker0 的虚拟网桥。新创建的容器通过虚拟以太网设备对(veth pair)连接到该网桥上,Docker 守护进程从预定义子网中为每个容器分配唯一 IP 地址,容器间通过 docker0 网桥通信,访问外部网络时通过宿主机 NAT 转换实现。

配置示例

# 创建自定义 bridge 网络
docker network create -d bridge my-net
# 查看网络列表
docker network ls
# 运行容器并连接到自定义网络
docker run -itd --rm --name busybox1 --network my-net busybox sh -c 'while true;do echo hello;done'
# 验证容器互联
docker run -it --rm --name busybox2 --network my-net busybox sh -c 'ping busybox1'

Bridge 模式的优势在于配置简单、隔离性好,适用于大多数单主机容器部署场景。但在跨主机通信时需要配合其他技术。

2. Host 模式:高性能网络共享

Host 模式下,容器直接使用宿主机的网络栈,与宿主机共享 IP 地址和端口资源。容器没有独立的网络命名空间,网络性能极高,但隔离性较差,可能出现端口冲突。

适用场景

对网络性能要求极高的应用

容器服务需要直接使用宿主机端口的场景

配置示例

docker run -tid --net=host --name docker_host1 busybox
# 验证网络共享
docker exec -it docker_host1 sh ifconfig
3. Container 模式:容器间网络共享

Container 模式允许新容器共享已有容器的网络命名空间,两个容器使用相同的 IP 地址和端口配置,适用于紧密耦合的容器组合,如应用与日志收集器。

配置示例

# 创建源容器
docker run -tid --name host1 busybox
# 创建共享网络的容器
docker run -itd --net=container:host1 --name host2 busybox
# 验证网络配置一致性
docker exec -it host1 ifconfig
docker exec -it host2 ifconfig
4. None 模式:高度安全的网络隔离

None 模式下,容器仅有回环接口,无外部网络连接,适用于对网络安全性要求极高或需手动配置网络的场景。

配置示例

docker run -itd --net=none --name none1 busybox sh
# 验证网络配置
docker exec -it none01 sh ifconfig
5. Overlay 模式:跨主机容器通信

Overlay 模式基于 VXLAN 技术,用于 Docker Swarm 集群,创建跨主机的虚拟覆盖网络,实现不同宿主机上容器间的直接通信。

配置示例

# 在 Swarm 集群中创建 Overlay 网络
docker network create -d overlay my_overlay_network
# 部署服务到 Overlay 网络
docker service create --name my_service --network my_overlay_network nginx
6. Macvlan 模式:高性能网络直通

Macvlan 模式为容器分配唯一 MAC 地址,使其像独立物理设备一样直接连接宿主机物理网络接口,绕过网桥,提高网络性能。

配置示例

# 创建 Macvlan 网络
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=ethe my_macvlan_network
# 运行容器使用 Macvlan 网络
docker run -d --name my_macvlan_container --network my_macvlan_network nginx
7. 自定义网络模式:灵活配置网络参数

用户可通过 docker network create 结合子网、网关、IP 范围等参数创建符合特定需求的网络。

配置示例

# 创建自定义网络
docker network create --subnet=172.21.0.0/16 --gateway=172.21.0.1 my_custom_network
# 运行容器加入自定义网络
docker run -d --name my_container --network my_custom_network nginx

二、端口映射:容器与外部的通信桥梁

端口映射是 Docker 实现容器与宿主机、外部网络通信的关键机制,通过 -p 或 --publish 选项实现。

1. 端口映射类型
  • -P(大写):自动随机映射容器所有对外端口到宿主机可用端口,适用于临时环境,避免手动配置端口冲突。

    docker run --rm -d -P nginx
    # 查看映射端口
    docker ps -a
    
  • -p(小写):指定宿主机端口到容器端口的映射,支持多种格式:

    • 宿主机端口:容器端口:固定端口映射
    • :容器端口:宿主机随机端口映射
    # 固定端口映射
    docker run --rm -d -p 8080:80 nginx
    # 宿主机随机端口映射
    docker run --rm -d -p 80 nginx
    
2. 端口映射原理

Docker 通过 iptables 的 DNAT 规则实现端口转发,可通过 iptables -t nat -vnL 查看具体规则。当外部请求到达宿主机映射端口时,请求会被转发到容器内部指定端口。

三、容器互联:打破容器网络隔离

容器互联允许不同容器识别并通信,早期通过 --link 选项实现,但已逐渐被自定义网络替代。

1. --link 选项(已弃用)

实现步骤

# 创建源容器
docker run -dit --name web01 centos:7
# 创建互联容器
docker run -dit --name web02 --link web01:myweb01 centos:7
# 测试互联
docker exec -it web02/bin/bash ping myweb01
2. 自定义网络实现容器互联

推荐使用自定义网络实现容器互联,容器加入同一网络后可直接通过容器名通信。

实现步骤

# 创建自定义网络
docker network create my_net
# 创建不在网络中的容器
docker run -dit -name web03 centos:7
# 创建加入网络的容器
docker run -dit --name pc01 --net=my_net centos:7
docker run -dit -name pc02 --net=my_net centos:7
# 测试通信
docker exec -it pc01 /bin/bash ping pc02  # 通
docker exec -it pc01 /bin/bash ping web03  # 不通

第二节:数据持久化技术

一、Docker 数据卷管理

数据卷是 Docker 实现数据持久化的核心机制,绕过容器文件系统,实现宿主机与容器间的数据共享。

1. 数据卷的核心作用
  • 数据持久化:容器删除后数据不丢失
  • 数据共享:多个容器可挂载同一数据卷
  • 数据备份与恢复:基于宿主机存储便于备份
  • 分离数据与应用:镜像更轻量,提升可移植性
2. 数据卷类型与创建方法
(1)匿名数据卷

在创建容器时直接通过 -v 选项指定容器内目录创建,Docker 自动在宿主机 var/lib/docker/volumes 下分配存储。

docker run -dit -v /data1 -v /data2 --name web04 centos:7
# 验证数据持久化
docker exec -it web04 /bin/bash touch /data1/test.txt
docker rm -f web04
# 数据仍存在于宿主机
(2)具名数据卷

具名数据卷便于管理和共享,先创建后挂载。

# 创建具名数据卷
docker volume create my_volume
# 挂载具名数据卷
docker run -d -v my_volume:/data --name my_container nginx
(3)共享容器数据卷

通过 --volumes-from 选项实现容器间数据卷共享。

# 从已有容器挂载数据卷
docker run -dit --volumes-from web04 --name web5 centos:7 /bin/bash
(4)挂载主机目录作为数据卷

将宿主机指定目录直接挂载到容器内,实现高效数据交互。

# 案例1:挂载目录到 Web 容器
docker run -dit -p 8080:80 -v /data1:/usr/local/apache2/htdocs --name web06 httpd
# 创建测试文件
echo "ni hao" > /data1/index.html
# 访问服务
curl 192.168.10.101:8080
# 案例2:多目录挂载与配置文件挂载
# 创建宿主机目录
mkdir -p /www/{conf,html}
# 准备配置文件与代码
cp nginx.conf /www/conf
cp -r html_code /www/html
# 创建容器并挂载
docker run -d -p 9090:80 \
-v /www/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /www/html:/www/html \
-v /www/nginx/log:/var/log/nginx \
--name web07 nginx /bin/bash -c "nginx"

二、数据管理最佳实践

1. 数据卷类型选择策略
  • 匿名数据卷:适合临时存储中间数据,如编译文件
  • 具名数据卷:适用于持久化存储,如数据库数据
  • 挂载主机目录:适合与主机共享配置文件或数据
2. 数据卷使用注意事项
  • 挂载主机目录必须使用绝对路径
  • 定期清理无用数据卷:docker volume prune
  • 关键数据(如数据库)必须使用数据卷存储
  • 多容器共享数据卷时注意并发访问问题
3. 容器数据持久化策略

容器文件系统数据在容器删除时丢失,因此:

  • 数据库数据:挂载 /var/lib/mysql 到数据卷
  • 日志文件:挂载 /var/log 到数据卷
  • 配置文件:挂载宿主机配置到容器内

本章总结

本笔记系统梳理了 Docker 高级管理中的容器通信与数据持久化技术:

在容器通信方面,Docker 提供了七种网络模式:

  • Bridge 模式:单主机默认网络,容器间通过网桥通信
  • Host 模式:共享宿主机网络栈,高性能但隔离性差
  • Container 模式:容器间共享网络命名空间
  • None 模式:高度安全的网络隔离
  • Overlay 模式:跨主机容器通信,适用于 Swarm 集群
  • Macvlan 模式:高性能网络直通,模拟物理设备
  • 自定义网络:灵活配置网络参数满足特定需求

端口映射与容器互联是实现容器通信的关键手段,推荐使用自定义网络替代已弃用的 --link 选项,提升通信效率与可维护性。

Docker 高级管理进阶:实战案例与最佳实践

第三节:容器通信高级实战

一、跨主机容器通信方案

在实际生产环境中,容器往往分布在多个主机上,实现跨主机通信是关键需求。以下介绍几种主流解决方案。

1. Overlay 网络与 Docker Swarm 集成

Overlay 网络是 Docker Swarm 集群的核心网络技术,通过 VXLAN 实现跨主机容器通信,支持服务发现和负载均衡。

部署步骤

# 初始化 Swarm 集群
docker swarm init --advertise-addr 192.168.1.100
# 添加工作节点
docker swarm join --token <token> 192.168.1.100:2377
# 创建 Overlay 网络
docker network create -d overlay my_swarm_network
# 部署服务到 Overlay 网络
docker service create --name web_service --network my_swarm_network --replicas 3 nginx
# 查看服务网络
docker service inspect web_service
2. 使用 Macvlan 实现直接路由

Macvlan 模式为容器分配独立 MAC 地址,使其直接接入物理网络,适合对网络性能要求极高的场景。

配置示例

# 创建 Macvlan 网络(假设宿主机物理网卡为 ens33)
docker network create -d macvlan \
--subnet=192.168.1.0/24 \
--gateway=192.168.1.1 \
-o parent=ens33 \
my_direct_network
# 运行容器获取独立 IP
docker run -d --name app_container --network my_direct_network \
--ip 192.168.1.100 nginx
3. 自定义网络与 VPN 结合

对于混合云或多数据中心环境,可结合自定义网络与 VPN 技术实现跨地域容器通信。

方案架构

在各数据中心部署 Docker 集群

通过 IPsec VPN 或 WireGuard 建立数据中心间加密通道

创建跨数据中心的 Overlay 网络或自定义网络

容器通过 VPN 通道实现跨地域通信

二、微服务架构下的容器通信优化

1. 服务发现与注册中心

在微服务架构中,服务发现是容器通信的基础,常用方案包括:

  • Docker Swarm 内置服务发现:通过服务名直接访问,Swarm 自动负载均衡

    # 部署服务
    docker service create --name mysql --network my_net -p 3306:3306 mysql
    # 其他服务通过服务名访问
    docker service create --name app --network my_net app_image
    
  • 第三方服务发现工具:如 Consul、Etcd、Zookeeper

    # 运行 Consul 服务
    docker run -d --name consul -p 8500:8500 consul
    # 服务注册示例(使用 Consul API)
    curl -X PUT -d '{"id": "web-service", "name": "web", "address": "172.18.0.2", "port": 80}' http://localhost:8500/v1/agent/service/register
    
2. 容器通信性能优化
  • 使用 host 网络模式:消除网络地址转换开销,适用于性能敏感服务

  • 优化 iptables 规则:减少 DNAT 规则数量,提高转发效率

  • 启用 IPVS 负载均衡:相比 iptables,IPVS 提供更高性能的负载均衡

    # 启用 IPVS
    modprobe ip_vs
    # 查看 IPVS 模块
    lsmod | grep ip_vs
    
  • 调整网络参数:优化内核网络参数,如增大 TCP 缓冲区

    # 添加内核参数
    echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
    echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
    # 生效参数
    sysctl -p
    

三、容器通信安全实践

1. 网络隔离策略
  • 分层网络设计:按业务功能划分不同网络,如前端网络、后端网络、数据库网络

    # 创建前端网络
    docker network create -d bridge frontend_net
    # 创建后端网络
    docker network create -d bridge backend_net
    # 创建数据库网络
    docker network create -d bridge db_net
    
  • 使用 internal 网络:限制容器访问外部网络,提高安全性

    docker network create --internal secure_net
    
2. 防火墙与访问控制
  • Docker 内置网络策略:通过自定义网络和 iptables 规则实现访问控制

  • 第三方网络安全工具:如 Calico、Weave Net 提供更精细的网络策略

    # 安装 Calico
    docker run -d --name=calico-node --net=host \
    -v /etc/kubernetes:/etc/kubernetes \
    -v /lib/modules:/lib/modules \
    calico/node
    
  • TLS 加密通信:为容器间通信添加 TLS 证书,确保数据传输安全

    # 生成证书
    openssl genrsa -out ca.key 2048
    openssl req -x509 -new -nodes -key ca.key -subj "/CN=Docker CA" -days 3650 -out ca.crt
    # 服务端证书
    openssl genrsa -out server.key 2048
    openssl req -new -key server.key -subj "/CN=web-service" -out server.csr
    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365
    # 客户端证书
    openssl genrsa -out client.key 2048
    openssl req -new -key client.key -subj "/CN=client" -out client.csr
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
    

第四节:数据持久化高级应用

一、数据卷备份与恢复策略

1. 数据卷备份方法
  • 手动备份:使用 docker volume inspect 获取数据卷路径,直接复制宿主机文件

    # 查看数据卷路径
    docker volume inspect my_volume
    # 备份数据卷
    tar -czvf my_volume_backup.tar.gz /var/lib/docker/volumes/my_volume/_data
    
  • 自动化备份脚本:定时备份关键数据卷

    # backup_script.sh
    #!/bin/bash
    DATE=$(date +%Y%m%d)
    VOLUME_PATH="/var/lib/docker/volumes/my_volume/_data"
    BACKUP_DIR="/backup/docker"
    mkdir -p $BACKUP_DIR
    tar -czvf $BACKUP_DIR/my_volume_$DATE.tar.gz $VOLUME_PATH
    # 添加到 cron 定时任务
    0 2 * * * /bin/bash /scripts/backup_script.sh
    
2. 数据卷恢复流程
# 停止相关容器
docker stop $(docker ps -a -q --filter "name=my_app")
# 移除旧数据卷
docker volume rm my_volume
# 创建新数据卷
docker volume create my_volume
# 恢复数据
tar -xzvf my_volume_backup.tar.gz -C /var/lib/docker/volumes/my_volume/_data
# 启动容器
docker start my_app

二、数据库容器数据持久化最佳实践

1. MySQL 容器数据持久化
# 创建具名数据卷
docker volume create mysql_data
# 运行 MySQL 容器并挂载数据卷
docker run -d --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-v mysql_data:/var/lib/mysql \
mysql:latest
# 验证数据持久化
docker exec mysql sh -c "echo 'CREATE DATABASE test;' | mysql -u root -p$MYSQL_ROOT_PASSWORD"
# 删除容器后重新创建
docker rm -f mysql
docker run -d --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
-v mysql_data:/var/lib/mysql \
mysql:latest
# 验证数据存在
docker exec mysql sh -c "mysql -u root -p$MYSQL_ROOT_PASSWORD -e 'SHOW DATABASES;'"
2. PostgreSQL 容器数据管理
# 创建数据卷
docker volume create postgres_data
# 运行 PostgreSQL 容器
docker run -d --name postgres -p 5432:5432 \
-e POSTGRES_PASSWORD=password \
-v postgres_data:/var/lib/postgresql/data \
postgres:latest
# 导入数据
docker exec postgres psql -U postgres -c "CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50));"
# 备份数据库
docker exec postgres pg_dumpall -U postgres > /backup/postgres_dump.sql

三、数据卷与 CI/CD 集成

1. 持续集成中的数据管理

在 CI 流程中,常需临时存储构建数据,可使用匿名数据卷:

# Jenkins Pipeline 示例
pipeline {agent { docker 'maven:3.8-openjdk-11' }stages {stage('Build') {steps {sh 'mvn clean package'# 使用匿名数据卷存储构建结果sh 'mkdir -p /app/target'sh 'cp target/*.jar /app/target/app.jar'}# 挂载数据卷到宿主机post {success {archiveArtifacts artifacts: 'target/app.jar', fingerprint: truesh 'docker run -v $(pwd)/target:/app/target maven:3.8-openjdk-11 cp /app/target/app.jar /app/target/app_$(date +%Y%m%d).jar'}}}}
}
2. 持续部署中的数据迁移

在 CD 流程中,需处理容器升级时的数据迁移:

# 滚动升级时保留数据
docker service update --detach --image my_app:v2 --replicas 5 \
--update-parallelism 1 --update-delay 30s \
--mount source=app_data,target=/data my_service

四、数据持久化性能优化

1. 数据卷存储驱动优化

Docker 支持多种存储驱动,根据宿主机系统选择最优驱动:

AUFS:适用于 Ubuntu,多层镜像支持好

Overlay2:推荐用于 Linux,性能优于 AUFS

Btrfs:支持快照和写时复制

ZFS:适用于需要数据冗余的场景

# 查看当前存储驱动
docker info | grep Storage
# 修改存储驱动(需重启 Docker)
vi /etc/docker/daemon.json
{"storage-driver": "overlay2"
}
systemctl restart docker
2. 磁盘 I/O 优化
  • 使用 SSD 存储数据卷:显著提升 I/O 性能

  • 调整 I/O 调度算法:针对 SSD 使用 noop 算法,HDD 使用 deadline 算法

    # 查看当前调度算法
    cat /sys/block/sda/queue/scheduler
    # 修改调度算法
    echo noop > /sys/block/sda/queue/scheduler
    
  • 启用缓存机制:利用 Linux 页缓存提升读取性能

    # 调整脏页写入参数
    echo "vm.dirty_ratio = 30" >> /etc/sysctl.conf
    echo "vm.dirty_background_ratio = 10" >> /etc/sysctl.conf
    sysctl -p
    

第五节:Docker 高级管理工具与生态

一、容器网络管理工具

1. Calico:高性能网络与安全

Calico 是一个开源的容器网络接口(CNI)插件,提供高性能网络和网络安全功能,支持 BGP 路由和网络策略。

# 在 Kubernetes 中安装 Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 创建网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-web-to-db
spec:podSelector:matchLabels:app: dbpolicyTypes:- Ingressingress:- from:- podSelector:matchLabels:app: webports:- protocol: TCPport: 3306
2. Weave Net:简单易用的跨主机网络

Weave Net 提供简单的跨主机容器网络,自动加密通信,支持服务发现。

# 安装 Weave Net
docker run --rm -it --name weave \
--volume /var/run/docker.sock:/var/run/docker.sock \
weaveworks/weave:latest launch
# 在 Swarm 中使用 Weave
docker network create -d weave my_weave_network

二、数据管理与备份工具

1. Portainer:可视化 Docker 管理

Portainer 提供直观的 Web 界面,简化 Docker 数据卷管理。

# 运行 Portainer
docker run -d -p 9000:9000 \
--name portainer \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer
2. Velero:Kubernetes 数据备份与恢复

Velero(原 Heptio Ark)用于 Kubernetes 集群的备份与恢复,支持数据卷快照。

# 安装 Velero
velero install --provider aws \
--bucket my-backup-bucket \
--secret-file cloud-credentials \
--use-volume-snapshots=true
# 备份集群
velero backup create my-backup --include-namespaces my-app
# 恢复备份
velero restore create --from-backup my-backup

三、监控与性能分析工具

1. Prometheus + Grafana:容器监控
# 运行 Prometheus
docker run -d --name prometheus -p 9090:9090 \
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
# 运行 Grafana
docker run -d --name grafana -p 3000:3000 \
-v /var/lib/grafana:/var/lib/grafana \
grafana/grafana
2. Docker Scout:容器性能分析
# 安装 Docker Scout
docker scout install
# 分析容器性能
docker scout analyze my_container

实战案例:电商平台容器化部署

一、案例架构设计

某电商平台采用微服务架构,容器化部署方案包括:

前端服务:Nginx 集群,使用 host 网络模式提升性能

后端服务:Spring Boot 微服务,运行在自定义 bridge 网络

数据库:MySQL 主从集群,使用具名数据卷持久化

缓存:Redis 集群,数据卷挂载主机 SSD

消息队列:RabbitMQ,数据卷备份策略

二、网络配置实践

# 创建前端网络
docker network create -d host frontend_net
# 创建后端服务网络
docker network create -d bridge --subnet=172.20.0.0/16 backend_net
# 创建数据库网络
docker network create -d bridge --subnet=172.21.0.0/16 db_net
# 前端容器(host 网络)
docker run -d --name frontend --network frontend_net -v /data/nginx/html:/usr/share/nginx/html nginx
# 后端服务容器
docker run -d --name user-service --network backend_net -p 8081:8081 user-service:v1
# 数据库容器
docker run -d --name mysql-master --network db_net -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:8.0

三、数据持久化方案

# 创建数据库备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d%H%M)
VOLUME_PATH="/var/lib/docker/volumes/mysql_data/_data"
BACKUP_DIR="/backup/mysql"
mkdir -p $BACKUP_DIR
# 物理备份
tar -czvf $BACKUP_DIR/mysql_physical_$DATE.tar.gz $VOLUME_PATH
# 逻辑备份
docker exec mysql-master mysqldump -u root -p$MYSQL_ROOT_PASSWORD --all-databases > $BACKUP_DIR/mysql_logical_$DATE.sql
# 同步到远程存储
rsync -avz $BACKUP_DIR user@remote:/backup/docker/mysql

总结与展望

Docker 高级管理技术是容器化应用在生产环境中稳定运行的关键,通过深入理解容器通信机制和数据持久化策略,

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

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

相关文章

Spring Boot 项目初始化

一、什么是 CommandLineRunner CommandLineRunner 是 Spring Boot 提供的一个 函数式接口&#xff0c;声明如下&#xff1a; 该接口只有一个 run(String... args) 方法&#xff0c;会在 Spring Boot 容器启动完成后被自动调用。 你可以将它理解为一种“钩子函数”&#xff0c;…

C# winform教程(二)----ComboBox

一、作用 一个可以输入也可以下拉的列表框。 二、属性 一般我们都是使用下拉列表&#xff0c;不使用在线编辑&#xff08;本人没用过&#xff09; 属性 名称内容含义items组合框中项可以定义下拉列表的值DropDownStyle外观和功能是否可以填写&#xff0c;一般选择dropdownli…

FFmpeg裁剪视频在Android上的实现

添加依赖&#xff1a; implementation com.arthenica:mobile-ffmpeg-full:4.4.LTS 代码实现&#xff1a; fun cropMiddleThird(inputPath: String, outputPath: String) {val cmd arrayOf("-y", // 覆盖输出文件"-i", inputPath,"-filter:v&quo…

openEuler 22.03 sp1 更新openssh 10.0p2 —— 筑梦之路

华为欧拉openEuler制作openssh 9.1/9.2/9.3 p1 rpm——筑梦之路_欧拉构建openssh-CSDN博客 上面是需要修改的sshd_config配置&#xff0c;将这3行注释掉。 附上22.03 sp1的yum源文件 # cat openEuler.repo #generic-repos is licensed under the Mulan PSL v2. #You can use t…

AGI(4)大模型的推理综述

本文源自基于基础模型的推理综述《A Survey of Reasoning with Foundation Models》&#xff0c;因为原文有点难于理解&#xff0c;在这个论文的基础上增加了自己的解释和理解&#xff0c;重新整理成此文。大家可以通过查看原文阅读原始论文。 1、推理的概念 推理是解决复杂问题…

Rust 中的宏与函数

在 Rust 编程中&#xff0c;宏&#xff08;Macro&#xff09;和函数&#xff08;Function&#xff09;是两种非常重要的编程工具。虽然它们都可以用来组织代码和实现复用&#xff0c;但它们在定义方式、作用原理、性能、灵活性以及适用场景等方面存在诸多不同。本文将详细介绍 …

c++中左值与右值

在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表达式的基本属性,它们决定了表达式能否被赋值、取地址等操作。 1. 核心定义 左值(lvalue) 特点:表示一个具名的、持久的对象,可位于赋值语句左侧。示例: int x = 42; // x是左值 x = 100; // 合法:左值可…

DeepSeek14-open-webui 常用概念区分

I、“Tools & Functions” 与 Pipelines&#xff08;工作流系统&#xff09;区别 以下是“Tool & Functions”与“Pipelines”的区别、适用场景及作用的详细分析&#xff0c;内容基于参考文档提取与总结&#xff1a; 一、本质区别 维度Tool & FunctionsPipeline…

PaddleOCR + Flask 构建 Web OCR 服务实战

1、前言 随着图像识别技术的发展,OCR(光学字符识别)已经成为很多应用场景中的基础能力。PaddleOCR 是百度开源的一个高性能 OCR 工具库,支持中英文、多语言、轻量级部署等特性。 而 Flask 是一个轻量级的 Python Web 框架,非常适合快速构建 RESTful API 或小型 Web 应用…

C++结构体初始化与成员函数实现语法详解

C结构体初始化与成员函数实现语法详解 一、结构体静态成员初始化语法 在C中&#xff0c;静态成员变量需要在类外部进行定义和初始化。提供的代码展示了如何为MAIN_PROPULSION_CAN类的静态成员变量进行初始化&#xff1a; MAIN_PROPULSION_CAN::VoltageThresholds MAIN_PROPU…

买了新内存条插上bios识别,进入系统不可用,b450主板,内存插槽A1A2 可以点亮,B1B2不可以,A2B2不可以,B1B2还是不可以

提示&#xff1a;买了新内存条插上bios识别&#xff0c;进入系统不可用&#xff0c;b450主板&#xff0c;内存插槽A1A2 可以点亮&#xff0c;B1B2不可以&#xff0c;A2B2不可以 文章目录 前言——环境一、第一种情况&#xff0c;开机不能点亮二、第二种情况, 总内存&#xff0c…

7.4.1_2B树的插入删除

B树插入&#xff1a; 假如是m阶B树&#xff0c;插入关键字时都要满足每个节点上的关键字个数最少为m/2向上取整-1关键字&#xff0c;最多有m-1个关键字&#xff0c;且每次插入的新元素一定是放在最底层的终端节点(因为如果不是放在终端节点&#xff0c;会导致该节点上可能有叶子…

Linux系统基本操作指令

Linux系统基本操作指令 文章目录 Linux系统基本操作指令一、介绍二、基础设置2.1 设置ubuntu与window的共享目录2.2 ubuntu系统简单介绍 三、Linux命令及工具介绍3.1 目录管理命令(功能&#xff0c;格式&#xff0c;参数&#xff0c;系统参数)3.2 文件操作命令 四、网络命令4.1…

系统思考VS心智模式

在这张图片中&#xff0c;我们看到的是两杯相同价格的咖啡&#xff0c;它们的价格显示方式不同。一杯咖啡的原价和现价都写得很大&#xff0c;而另一杯的价格则以较小的字体呈现。这种微妙的设计差异揭示了一个有趣的心理现象——心智模式。 人们在面对同样的价格时&#xff0…

all()函数和any()函数

参考文献 在if上使用.all和.any # 中心点未改变&#xff0c;说明达到稳态&#xff0c;结束递归if (self.points new_center).all():sum self.__sumdis(result)return result, self.points, sum

Maven:依赖管理就像乐高拼装的艺术

目录 &#x1f3d7;️ 第一章&#xff1a;Maven是高级乐高玩家&#x1f50d; 依赖管理的基本单元 &#x1f9e9; 第二章&#xff1a;多模块项目——乐高巨舰组装术&#x1f31f; 为什么要拆分模块&#xff1f;&#x1f6e0;️ 父子POM配置示范 ⚔️ 第三章&#xff1a;依赖冲突…

空间数据挖掘 期末复习

前言&#xff1a;此篇复习笔记结合了课程ppt和deepseek回答进行总结&#xff0c;如有谬误恳请指正。 期末考例题 &#xff08;名词解释*10、简答*6、论述*6&#xff09; 一、名词解释 数据挖掘 过拟合&#xff08;Overfitting&#xff09; Apriori算法 决策树&#xff08;…

跳跳杆、弹跳杆、Poto stick:百年弹跳玩具的健康与使用分享(大模型改写)

跳跳杆&#xff1a;百年弹跳神器的健康争议与安全指南 &#xff08;用DeepSeek改写前一篇文章&#xff0c;可惜没有接广告&#xff0c;否则植入一些链接多好&#xff09; &#x1f50d; 一、健康功效&#xff1a;惊喜与风险并存 争议性健康主张 坊间流传跳跳杆可能具备&…

WHAT - React Native 开发 App 从 0 到上线全流程周期

文章目录 一、React Native App 开发流程总览二、各阶段详细说明需求分析 & 产品规划技术选型 & 方案确定项目初始化A. 使用 Expo&#xff08;推荐新手&#xff09;B. 使用 React Native CLI&#xff08;自由度更高&#xff09; UI 开发 功能开发&#xff08;主开发阶…

Windows11 无法发现局域网内设备解决方法

临时解决 发生问题绝大多数Windows11 24H2版本&#xff0c;该版本目前来看没有永久解决方案 初步问题可以定位在FDResPub服务问题&#xff0c;重启该服务可以短暂恢复&#xff0c;临时解决方案就是重启该服务&#xff0c;然后把网络设备右键创建快捷方式 做成批处理文件 创建…