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

第一部分——Docker篇 第二章 Docker安装

关于系统的改造探索

开篇:系统改造的调研报告

第一部分——Docker篇

第一章 Docker容器
第二章 Docker安装
第三章 构建自定义镜像
第四章 搭建镜像仓库
第五章 容器编排
第六章 容器监控


文章目录

  • 关于系统的改造探索
      • 第一部分——Docker篇
  • 前言
  • 一、在线环境
  • 二、Docker Desktop
          • 1、检查系统要求
          • 2、安装Docker Desktop
          • 3、解决Docker Engine stopped
  • 三、 Docker Machine
  • 三、Linux离线安装
  • 四、Ansible批量安装
  • 补充——root权限被回收
  • 总结


前言

    随着业务的发展,传统的架构已经不符合项目的要求了。双活、集群也渐渐提上了日程。。。


一、在线环境

    受限于本地机器,如果只是单纯的学习使用,不妨试试 Play-With-Docker (PWD)是一个在线沙盒环境,由 Docker公司支持和推广。不过这个一个会话只能使用4个小时,没有魔法的话,速度很慢

在这里插入图片描述

相关快捷键:

复制:Ctrl + Insert,
粘贴:Shift + Insert、Ctrl + shift + V


二、Docker Desktop

    Docker Desktop 是适用于 Mac、LinuxWindows 环境的一键安装应用程序,可让您构建、共享和运行容器化应用程序和微服务。它提供了一个简单的 GUI(图形用户界面),让您可以直接从机器管理 容器应用程序镜像,这个也是方便学习,本地调试用的,下边简单说下 Windows 的安装,这里以 Windows11 家庭版 为例:

1、检查系统要求

在此之前,先检查自己的系统是否符合要求:

在这里插入图片描述

WSL版本 可通过命令行窗口查看,打开 PowerShell ,输入:

wsl --version

在这里插入图片描述

笔者这里不符合要求,所以得去下载对应的升级包。这里大概描述一下(水点字数。嘿嘿~~),详情参考 Windows官网

  1. 启用适用于 LinuxWindows 子系统

以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  1. 检测操作系统版本

在这里插入图片描述

  1. 启用虚拟机功能

PowerShell 窗口输入以下命令:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 安装 Linux 内核更新包
  • 在线安装(推荐

PowerShell 窗口输入以下命令:

wsl.exe --install 
wsl.exe --update
  • 离线安装
    现下载最新版本的 Linux 内核更新包,如果需要了解详细信息,可以去 WSL2-Linux-Kernel上查看。

直接安装可能出现下边这种情况:

在这里插入图片描述

可按照如下操作进行解决:

在这里插入图片描述

  1. WSL 2 设置为默认版本

PowerShell 窗口输入以下命令:

wsl --set-default-version 2

再次输入 wsl --version 查看版本,已经成功升级为 WSL 2

在这里插入图片描述

2、安装Docker Desktop

准备好前置环境后,再去 Docker官网 下载安装包,这就是一个.exe文件,直接无脑下一步即可

在这里插入图片描述

在这里插入图片描述

根据提示,还需要打开 Hyper-V

在这里插入图片描述

在这里插入图片描述

由于 Windows版本家庭版 ,不适用 Hyper-V,具体原因在 这里 查看。用 管理员 执行以下脚本解决:

pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL

现在 Docker Desktop 应该可以正常打开了。但是提示 Docker Engine stopped

在这里插入图片描述

请添加图片描述

3、解决Docker Engine stopped
  • 设置 Docker Desktop Service 自启动
    1. 这个服务在任务管理器里边可能看不到,按 Win + R 打开运行对话框
    2. 输入 services.msc, 然后按回车或点击“确定”
      在这里插入图片描述
  • 打开 CPU虚拟化

打开任务管理器,检查是否已经开启虚拟化,如果未开启,参考 这里

在这里插入图片描述

  • 检查 hypervisorlaunchtype 是否为 Auto
    1. 用管理员打开 Windows PowerShell
    2. 输入 bcdedit | findstr hypervisorlaunchtype , 查看 hypervisorlaunchtype 的状态。如果不是 Auto ,则输入 bcdedit /set hypervisorlaunchtype auto 并重启电脑
      在这里插入图片描述

三、 Docker Machine

    上述安装方式仅供学习使用,现在来看下如何在 Linux 上安装。Linux 上安装 Docker 安装分为在线、离线。在线安装单节点比较简单,这里就不赘述了,可以参考官方安装文档。这里主要看下使用 Docker Machine 进行批量安装

  1. 安装 Git
    Windows 环境下 Docker Machine 需要Git Bash 才能使用(其他环境可以无视),现在官网下载并安装下 GitGit 安装直接无脑下一步即可

在这里插入图片描述

  1. 安装 Docker Machine

点击鼠标右键,打开 Git Bash

在这里插入图片描述

输入以下内容,这里使用的 Docker Machine 的版本为 v0.16.2,大家根据自己的需求实际选择:

 base=https://github.com/docker/machine/releases/download/v0.16.2 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&chmod +x "$HOME/bin/docker-machine.exe"

等待执行完毕后,执行 docker-machine.exe -v 查看版本

在这里插入图片描述

  1. 配置 SSH
    在使用 Docker Machine 之前,要先配置 SSH。在 Git Bash 黑窗口下,执行如下命令:
#遇到提示一路回车即可
ssh-keygen
#传输给远程机子
ssh-copy-id -i ~/.ssh/*.pub root@192.168.233.139

连接远程机子不需要输入密码,则配置成功:

在这里插入图片描述

  1. 安装 Docker

在执行下列操作之前,需要保证目标机子可以联网,执行如下命令:

#连接远程主机
ssh  root@192.168.233.139
cd /etc/yum.repos.d
rm -f *.repo
#修改源为阿里的
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repoyum makecache#卸载runc相关内容,否则会冲突
dnf remove runc -y
#永久关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#退出
exit#C:/Users/zs/.ssh/id_rsa 改成自己秘钥的位置,正常都在C:/Users/《当前用户名》/.ssh/id_rsa 
docker-machine -D create   --driver generic   --generic-ip-address=192.168.233.139 --generic-ssh-key=C:/Users/hqd/.ssh/id_rsa --generic-ssh-user=root  --engine-install-url=https://releases.rancher.com/install-docker/20.10.5.sh  node1

等待安装完成后,输入 docker-machine ls 验证

在这里插入图片描述

这里资源有限,就不安装多台了,其他机子也是如法炮制就行了。Docker Machine 除了安装 Docker 环境之后,也有一定的管理 Docker 集群的能力,可以进行远程操作,下边以运行 Nginx 为例:

#切换到node1节点上
eval $(docker-machine env node1)
#运行nginx
docker run -itd --name nginx -p 8080:80 nginx
#切回本地
eval $(docker-machine env -u)

执行完成后验证:

在这里插入图片描述


注:现在 Docker 主推 Docker Desktop,Docker Machine 已经被弃用了,不过对于 20 之前的版本,还是可以使用的


三、Linux离线安装

    上述安装步骤都基于有网的情况下,云上机子一般都无法联网,所以这里重点聊下离线安装

  1. 下载tgz包
    先去官网下载tgz包,这里选择的是 20.10.5 版本(根据自己实际需求选择

在这里插入图片描述

  1. 解压文件
 tar -zxvf docker-20.10.5.tgz

在这里插入图片描述

  1. 移动到对应目录
cp docker/* /usr/bin/

在这里插入图片描述

  1. 配置阿里镜像加速
    由于Docker是外国人的东西,所以仓库默认连的是外网,需要给它提提速。国内加速方式也挺多的,如:百度、阿里、交大等。这里就以阿里云的镜像加速器为例。如下:

在这里插入图片描述

步骤写的很清楚,跟着操作就是了,这里使用离线安装,还没有配置系统服务,后面两步先省略。如下:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["加速地址"]
}
EOF

注:截止今天,Docker Hub 已经无法访问了,国内镜像加速也陆续关闭,可试试下边的地址:

{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://dockerproxy.com"]
}

  1. 启动并验证
    现在只需要启动 Docker 即可,命令如下:
nohup dockerd &

在这里插入图片描述

      Docker 已经启动完成,接着启动个 Nginx 验证一下。命令如下:

docker run -itd --name nginx -p 8080:80 nginx

在这里插入图片描述

通过ip:8080访问,如下:

在这里插入图片描述

在这里插入图片描述

  1. 注册系统服务
    接着还需要把 Docker 注册为系统服务,方便 Linux 管理和启停
#写入service文件
tee /etc/systemd/system/docker.service <<- 'EOF'
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
Restart=on-failure[Install]
WantedBy=multi-user.target
EOF#设置开机自启
systemctl enable docker#启动docker
systemctl start docker

常见问题解答 (FAQ):

问 : 启动过程中遇到卡死的情况
答: 不妨看看防火墙有没有关

问: 启动过程中遇到:Job for docker.service failed because start of the service was attempted too often
答: systemctl reset-failed docker.service 尝试一下

问 : 遇到:Job for docker.service failed because the control process exited with error code.
See “systemctl status docker.service” and “journalctl -xeu docker.service” for details
答: 看下服务配置,如下:


vim /etc/systemd/system/docker.service#修改文件内容:
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd#重新启动docker服务
systemctl daemon-reload
service dockerd  restart

下边是原因,有兴趣的可以看下:
docker.sock 是 Docker 守护进程的通信接口,而 containerd.sock 是 containerd 的通信接口。两者在功能和使用场景上有所不同。docker.sock是一个完整的容器平台,包括了容器运行时、镜像管理、网络和存储等多个方面的功能,而 containerd.sock 则更加专注于容器的生命周期管理。因此,在选择使用哪个套接字时,取决于你的具体需求和应用场景

问 : XXXX
答: 如果还是不行,那只能重启了

在这里插入图片描述


四、Ansible批量安装

    在集群情况,不可能一台台的离线安装过去,所以,需要借助一些工具进行批量部署。这里借助自动化部署工具——Ansible

     Ansible 最好在 Linux 环境下执行,Windows 一路火花带闪电。关于 Ansible 的相关概念这里就不细说了,这里主要了解 剧本、清单 即可。剧本是指目标主机要执行的操作,清单即要操作的机子 。下边来一起实操一下就明白了

  1. 安装 Ansible
    老样子,第一步需要先安装 Ansible,默认情况下,直接 执行 pip install ansible 安装可能会提示 bash: pip: command not found… ,执行如下步骤:
#根据自己Python版本进行修改
curl -O  https://bootstrap.pypa.io/pip/2.7/get-pip.py
#安装pip
python get-pip.py
#安装Ansible,根据python版本选择
pip install ansible==2.9.10#验证
ansible --version

在这里插入图片描述

  1. 配置 SSH
    Ansible 在操作之前也需要先配置下 SSH
#生成key,遇到提示,直接回车即可
ssh-keygen
#传输给远程机子
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.233.139
  1. 准备资源

这些是 Docker 相关的资源包,在部署之前需要提前准备

在这里插入图片描述

docker-20.10.5.tgz 可以去 官网 下载,docker-compose 可以去 这里 下载,docker 命令补全在 这里

daemon.json 配置文件,如下:

{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://dockerproxy.com"],"insecure-registries": ["192.168.233.136:8080"],"exec-opts": ["native.cgroupdriver=systemd"]
}

docker.service 服务配置文件,如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
Restart=on-failure[Install]
WantedBy=multi-user.target
  1. 配置连接信息
    准备好资源后,接下来就是配置 Ansible 相关的内容,首先配置 Ansible 连接目标主机的用户、端口等信息,添加 ansible.cfg 文件。内容如下:
[defaults]
hostfile = hosts
remote_user = root
remote_port = 22
host_key_checking = False
  1. 配置 主机清单
    接着配置需要操作的主机,添加 hosts 文件,配置如下:
[docker_hosts]
192.168.233.139
  1. 编写剧本
    最后就是最重要的部分——剧本剧本 指定了所有的操作,添加 docker-install.yml 文件如下:
---
- name: 安装dockerhosts: docker_hostsvars_prompt:- name: "install_docker"prompt: "Do you want to install Docker? (yes/no)"private: nobecome: yestasks:- name: 安装dockerblock: - name: 上传docker tar包synchronize:src: docker-20.10.5.tgzdest: /tmp/docker-20.10.5.tgz- name: 解压docker tar包ansible.builtin.unarchive:src: /tmp/docker-20.10.5.tgzdest: /tmpremote_src: yes- name: 上传docker-composesynchronize:src: docker-composedest: /tmp/docker/- name: 设置 docker 执行权限file:path: /tmp/docker/  # 这里替换成你的脚本路径recurse: yesmode: "u+x,g+x,o+x"- name: 移动docker到系统目录shell: mv -f /tmp/docker/* /usr/bin/- name: 上传 daemon.json 配置文件synchronize:src: daemon.jsondest: /etc/docker/- name: 上传 Docker 服务配置文件synchronize:src: docker.servicedest: /etc/systemd/system/- name: 关闭防火墙service:name: firewalldstate: stoppedwhen: ansible_service_mgr == 'systemd'- name: 永久禁用防火墙service:name: firewalldenabled: nowhen: ansible_service_mgr == 'systemd'- name: 临时开启宽容模式shell: setenforce 0- name: 永久开启宽容模式replace:path: /etc/selinux/configregexp: '^SELINUX=.*'replace: 'SELINUX=permissive'- name: 设置 Docker 服务开机自动systemd:name: dockerenabled: yes- name: 启动 Docker 服务service:name: dockerstate: startedwhen: install_docker == "yes"- name: 添加docker提示脚本block:   - name: 上传 Docker 提示脚本synchronize:src: dockerdest: /etc/bash_completion.d- name: 使提示脚本生效lineinfile:path: ~/.bashrcline: "source /etc/bash_completion.d/docker"create: yesstate: present
  1. 部署
    最后只要执行部署命令即可,如下:
ansible-playbook -i hosts docker-install.yml

在这里插入图片描述

执行完成后,目标机子已经安装好 Docker

在这里插入图片描述


补充——root权限被回收

    环境已经差不多了,root权限 也要被收回了,之后只能使用普通用户进行操作。这就涉及到 Docker权限 问题,由于之前没有指定用户,从 容器 内部挂载出来的目录都是 root权限,普通用户是没有权限进行操作的,而且 容器 权限太高,有可能使主机被攻击。这又成了一个不得不解决的问题。先演示一下问题,还是用之前的YAML为例:

#删除原来nginx的日志路径
rm -rf /usr/local/docker/nginx/logs/
#赋予用户权限
chmod 777 /usr/bin/docker-compose
chmod 777 /var/run/docker.sock
#切换用户
su hqd
#启动
docker-compose -f docker-demo.yml up -d

在这里插入图片描述

可以看到,就算是用hqd用户启动,容器 内映射到宿主机的路径也是 root用户,这样 hqd用户 没权限进行任何操作

    幸运的是,Docker 官方也意识到了这点,并提供了解决方案——用户命名空间用户命名空间 简单来说:就是用户映射,容器 内部依旧是root用户操作,而 容器 内的 root,实际上是宿主机的普通用户。像是地方长官在地方是老大,但是到了京城,最大的还得是皇帝

    接着看下如何指定用户命名空间

  1. 映射从属用户和组 ID
    先查看下需要指定用户的id和组id,这里我指定的用户是hqd
id hqd

在这里插入图片描述

这里用户id和组id都是1000,先记下,后边要用到

配置 /etc/subuid/etc/subgid

#1000就是上边查到的用户id
cat >> /etc/subuid <<-'EOF'
hqd:1000:1
hqd:100000:65536
EOF#1000就是上边查到的组id
cat >> /etc/subgid <<-'EOF'
hqd:1000:1
hqd:100000:65536
EOF

这里配置需要注意,由于这里的 subuidsubgid 是空的,所以可以直接写入,如果原本已经存在值需要往下递推,下边是个例子:

a:100000:65536#165536 = 100000 + 65536
b:165536:65536#231072 = 165536 + 65536
c:231072:65536#296608 = 231072 + 65536
hqd:1000:1
hqd:296608:65536

如果是 CentOS7,则需要下边配置:

#CentOS需要下边配置
echo "user.max_user_namespaces=15000" >> /etc/sysctl.confgrubby --args="namespace.unpriv_enable=1 user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"reboot

否则会出现下边错误:

在这里插入图片描述

  1. 启用 userns-remap

修改 /etc/docker/daemon.json 文件,如下:

{"registry-mirrors": ["加速地址"],//这里配置是让docker信任该地址,否则会提示https安全问题"insecure-registries":["harbor-ip:8080","nexus-ip:8082","registry-ip:5000"]"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"],//这里配置用户名:组名"userns-remap": "hqd:hqd"
}

开始测试:

systemctl daemon-reload
systemctl restart docker
#删除原有nginx日志
rm -rf /usr/local/docker/nginx/logs
#赋予docker相关命令权限
chmod 777 /usr/bin/docker*
#赋予docker.sock权限
chmod 777 /var/run/docker.sock
#切换成hqd用户
su hqd
#启动
docker-compose -f docker-demo.yml up -d

在这里插入图片描述

可以看到,logs 文件夹已经变成了 hqd 用户所有了

用户命名空间已知限制,以下标准Docker功能与在启用了用户命名空间的情况下运行Docker守护程序不兼容:

  • 与主机(–pid=host或–network=host)共享PID或NET名称空间
  • 外部(卷或存储)驱动程序,这些驱动程序不知道或无法使用守护程序用户映射
  • –privileged在docker run未指定的情况下 使用mode标志–userns=host

    用户名称空间是一项高级功能,需要与其他功能配合。例如,如果从主机装载了卷,则必须预先安排文件所有权,需要对卷内容的读取或写入访问权限
    尽管用用户命名空间的容器进程中的root用户具有该容器内​​超级用户的许多预期特权,但Linux内核基于内部知识(这是一个用用户命名空间的过程)施加了限制。一个值得注意的限制是无法使用该mknod命令。由root用户运行时,在容器内创建设备的权限被拒绝

k8s 不能添加上述操作,不过到时候又另外的解决办法,这里权且列出来,了解一下


总结

这里大致介绍了一些已知的 Docker 部署方式,如果还有其他更方便方式,欢迎大家进行补充

在这里插入图片描述

相关文章:

第一部分——Docker篇 第二章 Docker安装

关于系统的改造探索 开篇&#xff1a;系统改造的调研报告 第一部分——Docker篇 第一章 Docker容器 第二章 Docker安装 第三章 构建自定义镜像 第四章 搭建镜像仓库 第五章 容器编排 第六章 容器监控 文章目录 关于系统的改造探索第一部分——Docker篇 前言一、在线环境二、…...

Transformer - 多头自注意力机制复现

一、数学原理 1. 多头注意力机制 多头注意力机制允许模型在不同的表示子空间中关注输入序列的不同部分。它通过并行计算多个注意力头来实现这一点&#xff0c;每个头学习序列的不同部分。 2. 注意力分数计算 3. 掩码机制 掩码机制用于防止模型访问某些位置的信息。例如&…...

SpringCloud-快速通关(一)

本文是基于【雷丰阳老师&#xff1a;尚硅谷2025最新SpringCloud - 快速通关】进行实践操作&#xff0c;并对雷神的笔记做一个更详细的补充&#xff0c;供大家学习参考&#xff0c;一起加油&#xff01; 视频地址&#xff1a;SpringCloud快速通关_教程简介_哔哩哔哩_bilibili …...

Ansible Playbook详解:自动化配置管理的核心

1. 引言 Ansible Playbook是Ansible自动化系统的核心,它使用YAML格式描述一系列要在远程系统上执行的任务。通过Playbook,我们可以将复杂的IT操作转化为可重复、可版本控制的代码。本文将深入探讨Playbook的结构、语法和高级特性,帮助读者掌握编写高效、可维护的Playbook的…...

【实践总结】如何编写“多角色适配”的高质量技术文档?

一份文档想要“一稿多用”?先别急着开写!先读完这篇总结,你将学会如何拆解目标、设计结构、提升可读性,让文档不再顾此失彼。 🔍 背景:一文多用,常常适得其反 在实际的软件项目中,我们往往希望通过一份设计文档,同时完成以下多个目标: ✅ 描述系统结构,便于团队成…...

Ansible 入门教程:从零开始掌握自动化运维

1. 引言 在当今快速发展的IT环境中,自动化运维已成为提高效率、减少人为错误的关键。Ansible作为一个简单yet强大的自动化工具,正受到越来越多DevOps工程师的青睐。本文将带领读者从零开始,逐步掌握Ansible的核心概念和基本用法,为自动化运维之路打下坚实基础。 2. Ansible简…...

WSL2迁移教程:如何备份和转移Ubuntu子系统到新位置

WSL2迁移教程&#xff1a;如何备份和转移Ubuntu子系统到新位置 文章目录 WSL2迁移教程&#xff1a;如何备份和转移Ubuntu子系统到新位置前言环境准备迁移步骤详解1. 查看当前WSL发行版状态2. 关闭所有WSL实例3. 导出WSL发行版4. 注销原有WSL发行版5. 导入WSL发行版到新位置6. 验…...

【备赛】eeprom

简介 EEPROM即电可擦可编程只读存储器&#xff0c;属于非易失存储芯片。 它能电擦除、多次编程&#xff0c;支持字节级操作。 掉电后数据不丢失。 蓝桥杯嵌入式的eeprom使用AT24C02&#xff0c;使用IIC通信协议。 驱动的函数官方已经写好&#xff0c;我们只需要移植并使用就…...

Pytorch torch.utils.data.dataloader.default_collate 介绍

torch.utils.data.dataloader.default_collate 是 PyTorch 中 DataLoader 默认的 collate_fn 函数&#xff0c;用于将一个批次的样本数据合并成张量&#xff08;Tensor&#xff09;或其他结构化数据格式。以下是关于 default_collate 的详细介绍&#xff1a; 1. 功能 default…...

Github最新AI工具汇总2025年4月份第2周

根据GitHub官方动态及开发者生态最新进展&#xff0c;以下是2025年4月第二周&#xff08;截至4月7日&#xff09;值得关注的AI工具与技术更新汇总&#xff1a; 1. GitHub Copilot Agent Mode全量发布 核心功能&#xff1a;在VS Code中启用Agent模式后&#xff0c;Copilot可自主…...

2013年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2013年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

LabVIEW 开发如何降本增效

在 LabVIEW 开发领域&#xff0c;如何在确保项目质量的同时降低开发成本&#xff0c;是众多企业和开发者共同关注的焦点。这不仅关乎资源的高效利用&#xff0c;更影响项目的投资回报率和市场竞争力。下面&#xff0c;我们将从多个维度深入剖析降本策略&#xff0c;并结合具体案…...

云存储服务器的作用都有哪些?

云存储服务器是一种用来存储和管理企业数据信息的服务器&#xff0c;可以为企业与组织提供一个可靠、安全和可扩展的存储平台&#xff0c;能够帮助个人和企业将数据信息存储在云端&#xff0c;以此来实现数据信息的备份、共享和访问功能。 云存储服务器支持多个用户共同访问和共…...

可编辑33页PPT | AI智能智慧工厂厂区完全整体解决方案

荐言摘要&#xff1a;AI智能智慧工厂厂区完全整体解决方案是一种集成了先进的人工智能技术、工业自动化系统和创新管理理念的综合性方案&#xff0c;旨在提升生产效率、降低成本、实现灵活生产&#xff0c;并推动工厂的智能化发展。 随着技术的不断进步&#xff0c;工厂架构经…...

vmware虚拟机上Ubuntu或者其他系统无法联网的解决方法

一、检查虚拟机是否开启了网络服务 打开方式&#xff1a;控制面板->-管理工具--->服务 查找 VMware DHCP Service 和VMware NAT Service &#xff0c;确保这两个服务已经启动。如下图&#xff0c;没有启动就点击启动。 二、设置网络类型 我们一般使用前两种多一些&…...

python中pyside6多个py文件生成exe

网上见到的教程大多数都是pyinstaller安装单个py文件,针对多个py文件的打包,鲜有人提及;有也是部分全而多的解释,让人目不暇接,本次记录自己设置一个声波捕捉界面的打包过程。 1.pycharm中调用pyinstaller打包 参考链接:https://blog.csdn.net/weixin_45793544/articl…...

P1006 [NOIP 2008 提高组] 传纸条 题解

题目传送门 前言 每次准备摸鱼时都在这道题的界面。 今天有空做做&#xff0c;顺便写一波题解&#xff0c;毕竟估值蹭蹭往下跳。 双倍经验&#xff1a;P1004 [NOIP 2000 提高组] 方格取数&#xff0c;P1006 [NOIP 2008 提高组] 传纸条。 题意简述 现有一个 m m m 行 n …...

linux下编译Websocketpp,适用x86和armv8

编译boost库 下载源文件&#xff1a;Version 1.79.0 编译&#xff1a; sudo ./bootstrap.sh sudo ./b2 install 安装websocketpp git clone https://github.com/zaphoyd/websocketpp.git cd websocketpp #进入目录 mkdir build cd build cmake .. make sudo make ins…...

skynet.dispatch 使用详解

目录 skynet.dispatch 函数详解1. 函数定义与参数2. 消息处理流程3. 使用示例示例 1&#xff1a;处理 Lua 协议消息示例 2&#xff1a;处理自定义协议消息 4. 关键机制(1) 协程与阻塞操作(2) 消息响应 5. 与 skynet.register_protocol 的协作6. 注意事项7. 典型应用场景 总结 s…...

CondaError: Run ‘conda init‘ before ‘conda activate‘

CondaError: Run conda init before conda activate&#xff0c;表明 Conda 环境未正确初始化&#xff0c;导致无法激活目标环境。以下是具体解决方案&#xff1a; 1. 初始化 Conda Conda 需要先初始化才能使用 activate 命令。根据Linux系统&#xff0c;运行以下命令初始化 B…...

从代码学习深度学习 - 序列到序列学习数据预处理 PyTorch 版

文章目录 前言一、数据读取二、文本预处理三、词元化四、构建词表五、截断和填充六、转换为张量七、数据迭代器总结前言 在深度学习领域,序列到序列(Seq2Seq)模型是一种非常重要的架构,广泛应用于机器翻译、文本摘要和对话生成等任务。在实现 Seq2Seq 模型时,数据的预处理…...

SQL:Primary Key(主键)和Foreign Key(外键)

目录 1. Key&#xff08;键&#xff09; 2. Index&#xff08;索引&#xff09; 3.Key和Index的区别 4. Primary Key&#xff08;主键&#xff09; 5. Foreign Key&#xff08;外键&#xff09; 6.主键和外键的关系 温馨提示&#xff1a; 闪电按钮不同的执行功能 首先&…...

ClickHouse接入prometheus监控

ClickHouse接入prometheus监控 在 ClickHouse 集群环境下&#xff08;假设你有 3 台服务器&#xff09;&#xff0c;使用自带的 Prometheus 端点来监控是完全可行的。集群部署意味着你需要为每台服务器配置 Prometheus 端点&#xff0c;并确保 Prometheus 能够从所有节点采集数…...

轻量级UDP流量重放工具的技术实现与场景应用(C/C++代码实现)

在网络协议测试、安全攻防演练、性能调优等领域&#xff0c;精确控制数据包传输行为是核心需求。udp_replay作为一款专注于UDP流量的开源工具&#xff0c;通过简洁的设计实现了对pcap文件中UDP数据流的灵活重放。本文将从技术实现原理、核心功能亮点及典型应用场景三个维度展开…...

时序数据库 TDengine × Excel:一份数据,两种效率

在日常工作中&#xff0c;很多人都离不开 Excel。不论是设备运维工程师、数据分析师&#xff0c;还是业务人员&#xff0c;一份熟悉的电子表格往往就是他们的“第一张报表”。 现在&#xff0c;TDengine 也可以与 Excel 实现无缝连接&#xff0c;用户可以直接在 Excel 中查询时…...

video自动播放

文章目录 前言在iOS系统中&#xff0c;H5页面的自动播放功能受到了一些限制&#xff0c;为了提升用户体验和保护用户隐私&#xff0c;Safari浏览器对于自动播放的行为做了一些限制。 一、自动播放的限制二、解决方案 前言 在iOS系统中&#xff0c;H5页面的自动播放功能受到了一…...

如何利用AI智能生成PPT,提升工作效率与创意表现

如何利用AI智能生成PPT&#xff0c;提升工作效率与创意表现&#xff01;在这个信息爆炸的时代&#xff0c;制作一份既专业又富有创意的PPT&#xff0c;已经不再是一个简单的任务。尤其是对于每天都需要做报告、做展示的职场人士来说&#xff0c;PPT的质量直接影响着工作效率和个…...

Java8+Spring Boot + Vue + Langchain4j 实现阿里云百炼平台 AI 流式对话对接

1. 引言 在本文中&#xff0c;我们将介绍如何使用 Spring Boot、Vue.js 和 Langchain4j&#xff0c;实现与 阿里云百炼平台 的 AI 流式对话对接。通过结合这些技术&#xff0c;我们将创建一个能够实时互动的 AI 聊天应用。 这是一个基于 Spring Boot Vue.js Langchain4j 的智…...

【scikit-learn基础】--『数据加载』之外部数据集

这是scikit-learn数据加载系列的最后一篇&#xff0c;本篇介绍如何加载外部的数据集。 外部数据集不像之前介绍的几种类型的数据集那样&#xff0c;针对每种数据提供对应的接口&#xff0c;每个接口加载的数据都是固定的。 而外部数据集加载之后&#xff0c;数据的字段和类型是…...

Redis原理:keys命令

语法&#xff1a; keys pattern 返回所有符合pattern的key 支持 glob-style patterns: h?llo matches hello, hallo and hxlloh*llo matches hllo and heeeelloh[ae]llo matches hello and hallo, but not hilloh[^e]llo matches hallo, hbllo, ... but not helloh[a-b]llo ma…...

4.7学习总结 可变参数+集合工具类Collections+不可变集合

可变参数&#xff1a; 示例&#xff1a; public class test {public static void main(String[] args) {int sumgetSum(1,2,3,4,5,6,7,8,9,10);System.out.println(sum);}public static int getSum(int...arr){int sum0;for(int i:arr){sumi;}return sum;} } 细节&#xff1a…...

高级java每日一道面试题-2025年3月24日-微服务篇[Nacos篇]-使用Nacos如何实现配置管理?

如果有遗漏,评论区告诉我进行补充 面试官: 使用Nacos如何实现配置管理&#xff1f; 我回答: 在Java高级面试中讨论如何使用Nacos实现配置管理的综合回答 在Java高级面试中&#xff0c;关于如何使用Nacos实现配置管理&#xff0c;可以从以下几个方面进行全面、深入的阐述&am…...

Exce格式化批处理工具详解:高效处理,让数据更干净!

Exce格式化批处理工具详解&#xff1a;高效处理&#xff0c;让数据更干净&#xff01; 1. 概述 在数据分析、报表整理、数据库管理等工作中&#xff0c;数据清洗是不可或缺的一步。原始Excel数据常常存在格式不统一、空值、重复数据等问题&#xff0c;影响数据的准确性和可用…...

CExercise_06_1指针和数组_1查找数组的最大值和最小值

题目&#xff1a; 查找数组的最大值和最小值&#xff0c;但要将最大值作为返回值返回&#xff0c;最小值则依靠传入的指针完成赋值。 要求不能使用"[]"运算符。 函数的声明如下&#xff1a; int max_min(int *arr, int len, int *pmin); 关键点 1) * 运算符用于解引用…...

redis中的hash

Redis中的hash是什么 Hash: 哈希&#xff0c;也叫散列&#xff0c;是一种通过哈希函数将键映射到表中位置的数据结构&#xff0c;哈希函数是关键&#xff0c;它把键转换成索引。 Redis Hash&#xff08;散列表&#xff09;是一种 field-value pairs&#xff08;键值对&#x…...

【学习笔记】李沐斯坦福21秋季:实用机器学习中文版

这里写自定义目录标题 数据处理数据获取数据标注数据清洗特征工程 数据处理 数据获取 爬虫 实际工作中大部分都是从数据库里取数 数据标注 只有一小部分有标签 大部分无标签的话 半监督学习&#xff1a;没标注数据和有标注数据共同使用 做法1:半监督学习 基于有标签的小部分…...

UE5学习笔记 FPS游戏制作43 UI材质

文章目录 实现目标制作UI材质使用UI材质 实现目标 把图片变为灰色 制作UI材质 右键新建一个材质 左侧细节栏&#xff0c;材质域改为用户界面&#xff0c;混合模式改为半透明 此时输出节点应该有两个属性 在内容浏览器里找到要用的图片&#xff0c;然后向上拖动到材质标题…...

QT控件 修改QtTreePropertyBrowser自定义属性编辑器源码,添加第一列标题勾选,按钮,右键菜单事件等功能

头阵子遇到一个需要修改QtTreePropertyBrowser控件的需求&#xff0c;QT开发做这么久了&#xff0c;这个控件倒是第一次用&#xff0c;费了点时间研究&#xff0c;在这里做个简单的总结。 QtTreePropertyBrowser控件 是 Qt 解决方案 (Qt Solutions) 中的一个组件&#xff0c;用…...

MFC工具栏CToolBar从专家到小白

CToolBar m_wndTool; //创建控件 m_wndTool.CreateEx(this, TBSTYLE_FLAT|TBSTYLE_NOPREFIX, WS_CHILD | WS_VISIBLE | CBRS_FLYBY | CBRS_TOP | CBRS_SIZE_DYNAMIC); //加载工具栏资源 m_wndTool.LoadToolBar(IDR_TOOL_LOAD) //在.rc中定义&#xff1a;IDR_TOOL_LOAD BITMAP …...

Golang 项目平滑重启

引言 平滑重启&#xff08;Graceful Restart&#xff09;技术作为一种常用的解决方案&#xff0c;通过允许新进程接管而不中断现有的请求&#xff0c;确保了系统的稳定运行和业务连续性。同时目前公司的服务重启绝大部分也都适用的 go 的平滑重启技术。 本部分将对平滑重启的…...

Vue2 插槽 Slot

提示&#xff1a;插槽的目的是让我买原来的设备具备更多的扩展性。 文章目录 前言在组件中定义插槽&#xff08;子组件视角&#xff09;1. 默认插槽2. 具名插槽&#xff08;带名称的插槽&#xff09;3. 作用域插槽&#xff08;带数据的插槽&#xff09; 使用插槽&#xff08;父…...

关于sqlsugar实体多层List映射的问题

如上图所示&#xff0c;当一个主表&#xff08;crm_fina_pay_req&#xff09;的子表list<文件附件关系表>&#xff08; List<crm_fina_payreq_evidofpay_relation> &#xff09;中&#xff0c;还包含有sysfile&#xff08;SysFile SysFiles&#xff09;类型的文件信…...

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

1前言 项目需要使用MCU实现网络功能&#xff0c;后续确定方案stm32f407 外接lan8720a实现硬件平台搭建&#xff0c;针对lan8720a也是用的比较多的phy&#xff0c;网上比较多的开发板&#xff0c;硬件上都是选用了这个phy&#xff0c;项目周期比较短&#xff0c;选用了这个常用…...

LangChain4j(4):预设角色(系统消息SystemMessage)

1 预设角色(系统消息SystemMessage) 基础大模型是没有目的性的&#xff0c; 你聊什么给什么&#xff0c;但是如果我们开发的事一个智能票务助手&#xff0c; 我需要他以一个票务助手的角色跟我对话&#xff0c; 并且在我跟他说”退票”的时候&#xff0c; 让大模型一定要告诉我…...

自然语言处理利器NLTK:从入门到核心功能解析

文章目录 一、NLP领域的基石工具包二、NLTK核心模块全景解析1 数据获取与预处理2 语言特征发现3 语义与推理 三、设计哲学与架构优势1 四维设计原则2 性能优化策略 四、典型应用场景1 学术研究2 工业实践 五、生态系统与未来演进 一、NLP领域的基石工具包 自然语言工具包&…...

常见接口协议介绍

1. I2C&#xff08;Inter-Integrated Circuit&#xff09; 定义&#xff1a;两线制串行总线&#xff08;SDA数据线 SCL时钟线&#xff09;&#xff0c;支持主从模式多设备通信。特点&#xff1a; 地址机制&#xff1a;每个设备有唯一地址&#xff0c;主设备通过地址选择从设备…...

宝塔面板使用CDN 部署后获取真实客户端 IP教程

在宝塔面板环境中配置 CDN 加速服务后&#xff0c;服务器日志默认记录的是 CDN 节点 IP&#xff0c;这给网站流量分析带来不便。本文将为您提供多种解决方案&#xff0c;帮助您在 CDN 生效的同时获取真实访客 IP。 一、Nginx 配置调整方案 日志格式优化 在宝塔面板中打开 Ngi…...

生鲜果蔬便利店实体零售门店商城小程序

——线上线下融合赋能社区零售新生态 随着新零售模式的深化和消费者需求的升级&#xff0c;生鲜果蔬便利店亟需通过数字化工具实现经营效率与用户体验的双重提升。结合线下实体门店与线上商城的一体化小程序&#xff0c;成为行业转型的核心工具。以下从功能模块、运营策略及行…...

C++(初阶)(十)——vector模拟实现

vector vector构造尾插&#xff08;删&#xff09;和扩容inert&#xff08;插入&#xff09;迭代器失效erase&#xff08;删除&#xff09;resize&#xff08;调整空间&#xff09;深浅拷贝迭代器拷贝和赋值&#xff08;v2(v1)和v1 v3&#xff09;多个数据插入迭代器区间初始化…...

利用解析差异SSRF + sqlite注入 + waf逻辑漏洞 -- xyctf 2025 fate WP

本文章附带TP(Thinking Process)! #!/usr/bin/env python3 # 导入所需的库 import flask # Flask web框架 import sqlite3 # SQLite数据库操作 import requests # HTTP请求库 import string # 字符串处理 import json # JSON处理app flask.Flask(__name__) # 创建Flask应…...