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

Linux云计算SRE-第十五周

1.总结Dockerfile的指令和Docker的网络模式

一、Dockerfile 核心指令详解
1、基础构建指令

指令

功能描述

关键特性

FROM

指定基础镜像(必须为首条指令)

- 支持多阶段构建:FROM node AS builder
scratch 表示空镜像

RUN

在镜像构建时执行命令

- Shell格式:RUN apt-get update
- Exec格式:RUN ["/bin/bash", "-c", "echo hello"]
- 避免多层:合并命令减少镜像层数

CMD

容器启动时执行的默认命令(可被覆盖)

- 仅最后一个生效
- 与 ENTRYPOINT 组合时作为参数

ENTRYPOINT

容器启动时固定执行的命令(需用 --entrypoint 覆盖)

- 与 CMD 组合:ENTRYPOINT ["java", "-jar"] + CMD ["app.jar"] → java -jar app.jar
- Shell格式会忽略 CMD 参数 

 示例:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y curl
CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT ["curl", "-s", "http://ip.cn"]
2、文件与环境配置 
指令功能描述关键区别
COPY复制本地文件到镜像(推荐)- 不支持自动解压
- 目标路径需以 / 结尾
ADD复制文件并支持自动解压(谨慎使用)- 自动解压 tar/gzip 等压缩文件
- 从 URL 下载文件
ENV设置环境变量(构建和运行时均有效)- 支持多变量:ENV A=1 B=2
ARG定义构建时变量(仅在构建阶段有效)- 可通过 --build-arg 覆盖

  示例:

COPY ./app /usr/src/app
ADD http://example.com/app.tar.gz /data/
ENV NODE_ENV=production
ARG VERSION=1.0
3、元数据与优化指令 
指令功能描述使用场景
LABEL添加镜像元数据(替代 MAINTAINER- 多键值对:LABEL author="admin" version="1.0"
VOLUME声明匿名数据卷(实现数据持久化)- 避免容器重启数据丢失
- 需配合 -v 挂载使用
USER切换运行用户(提升安全性)- 需确保用户已存在
HEALTHCHECK定义容器健康检查- 支持间隔、超时和重试参数

   示例:

LABEL maintainer="admin@example.com"
VOLUME ["/var/lib/mysql"]
USER nobody
HEALTHCHECK --interval=30s CMD curl -f http://localhost
二、Docker 网络模式深度解析  

Docker提供了多种网络模式,以便在容器间建立网络通信和连接外部网络。以下是Docker的主要网络模式及其实例:

1、Bridge模式
概述:
Bridge模式是Docker的默认网络模式。
在Bridge模式下,Docker会创建一个名为docker0的虚拟网桥,并为每个容器分配一个IP地址。
容器之间以及容器与宿主机之间都可以通过IP地址进行通信。
实例:
创建一个名为httpd的容器,并将宿主机的80端口映射到容器的80端口:

docker run -d --name httpd -p 80:80 httpd

验证容器的网络配置:

docker exec -it httpd cat /etc/hosts

2、Host模式
概述:
在Host模式下,容器直接使用宿主机的网络,与宿主机共享网络接口。
容器的网络配置与宿主机相同,可以通过宿主机的IP地址直接访问容器。
特点:
容器与宿主机共享网络栈,因此具有相同的IP地址和端口空间。
适用于对网络性能要求较高、网络隔离性要求较低或需要访问主机上网络服务的场景。
实例:
将一个Node.js创建的简单Web服务器容器设置为Host模式:

docker run --net=host my_web_server

现在,可以通过在浏览器中访问http://localhost:3000来查看运行中的Web服务器(假设Web服务器在容器的3000端口上运行)。
3、Container模式
概述:
在Container模式下,新创建的容器会共享另一个已存在容器的网络命名空间。
新容器可以使用已存在容器的IP地址和端口配置,实现网络资源的共享。
实例:
假设已经有一个名为nginx1的容器在运行,可以启动另一个名为nginx2的容器,并使其共享nginx1的网络命名空间:

docker run --name nginx2 --net=container:nginx1 nginx:v1

4、None模式
概述:
在None模式下,容器没有自己的网络接口和IP地址。
这种模式通常用于需要自定义网络配置的容器,或者只需要与宿主机或其他容器进行本地通信的容器。
实例:
创建一个使用None网络模式的Ubuntu容器:

docker run -itd --net=none --name ubuntu-test1 ubuntu /bin/bash

5、自定义模式
概述:
自定义模式允许用户创建自己的网络,并指定子网、IP地址范围、网关等网络配置。
自定义网络可以提供更好的隔离和网络管理。
自定义网络实例:

# 创建自定义桥接网络
docker network create \--driver=bridge \--subnet=172.20.0.0/24 \--gateway=172.20.0.1 \app-net# 容器加入自定义网络(支持别名通信)
docker run -d --name web \--network=app-net \--network-alias=web01 \nginx:alpine

自定义模式优势:

  • 容器间可以通过别名通信(ping web01)

  • 支持网络策略(带宽限制、访问控制)

  • 跨主机通信(需配合overlay驱动)

2.搭建harbor私有仓库并且上传镜像到私有仓库

一、搭建harbor私有仓库
1、安装 docker
# 在ubuntu主机上,以root用户身份,安装docker所需要的依赖项
[root@ubuntu22 ~]# apt update && apt install -y apt-transport-https ca-certificates software-properties-common# 安装GPG证书
[root@ubuntu22 ~]# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 写入软件源信息
[root@ubuntu22 ~]# echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null# 更新APT包索引
[root@ubuntu22 ~]# apt update# 查看可用的Docker-CE版本
[root@ubuntu22 ~]# apt-cache madison docker-ce# 安装指定版本的Docker-CE和Docker-CE-CLI
[root@ubuntu22 ~]# apt -y install docker-ce=5:25.0.5-1~ubuntu.22.04~jammy docker-ce-cli=5:25.0.5-1~ubuntu.22.04~jammy containerd.io# 验证Docker是否安装成功
[root@ubuntu22 ~]# docker --version
[root@ubuntu22 ~]# systemctl status docker2、新版docker自带docker compose命令
[root@ubuntu22 ~]#docker compose  version
Docker Compose version v2.33.0
[root@ubuntu22 ~]#alias docker-compose="docker compose"3、下载Harbor安装包并解压缩
[root@ubuntu22 ~]# wegt https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
[root@ubuntu22 ~]# mkdir /apps
[root@ubuntu22 ~]# tar xvf harbor-offline-installer-v2.12.2.tgz -C /apps/
[root@ubuntu22 harbor]#ls
common.sh  harbor.v2.12.2.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare4、编辑 harbor 配置文件
[root@ubuntu22 ~]# mv /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml
[root@ubuntu22 ~]# vim /apps/harbor/harbor.yml
#只需要修改下面两行
hostname = 10.0.0.100          #修改此行,指向当前主机IP或FQDN,建议配置IP
harbor_admin_password = 123456 #修改此行指定harbor登录用户admin的密码,默认用户/密码
:admin/Harbor12345
data_volume: /data/harbor      #建议修改数据目录路径,使用大容量的高速磁盘,默认为/data
#如果不使用https,还需要将下面行注释掉
#https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
#可选项
ui_url_protocol = http #默认即可,如果修改为https,需要指定下面证书路径
ssl_cert = /data/cert/server.crt #默认即可,https时,需指定下面证书文件路径
ss_cert_key = /data/cert/server.key   #默认即可,https时,需指定下面私钥文件路径5、运行 harbor 安装脚本
#先安装python
[root@ubuntu22 ~]# apt -y install python3
#安装docker harbor 
[root@ubuntu22 ~]# /apps/harbor/install.sh
[root@ubuntu22 ~]# docker ps

 6、登录 harbor 主机网站
用浏览器访问: http://10.0.0.100/
用户名: admin 
密码: 即前面harbor.cfg中指定的密码123456

二、使用单主机Harbor
1、建立项目

 2、创建用户和项目授权
3、命令行登录 Harbor
[root@ubuntu22 harbor]# vim /etc/docker/daemon.json 
{"registry-mirrors": ["https://docker.1ms.run","https://kpczdzbv.mirror.aliyuncs.com"],"insecure-registries": ["10.0.0.100:80"] 
}
[root@ubuntu22 harbor]# systemctl daemon-reload
[root@ubuntu22 harbor]# systemctl restart docker
#非交互登录
[root@ubuntu22 harbor]# echo "M92-zhang" | docker login 10.0.0.100:80 -u zhangyao --password-stdin
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded#查看进程是否添加上面设置
[root@ubuntu22 harbor]# ps aux|grep dockerd
4、给本地镜像打标签并上传到 Harbor 
[root@ubuntu22 harbor]# docker tag docker.1ms.run/library/alpine 10.0.0.100:80/example/alpine:3.11
[root@ubuntu22 harbor]# docker push 10.0.0.100:80/example/alpine:3.11
The push refers to repository [10.0.0.100:80/example/alpine]
08000c18d16d: Pushed 
3.11: digest: sha256:ec1b05d1eac264d9204a57f4ad9d4dc35e9e756e9fedaea0674aefc7edb1d6a4 size: 527

访问harbor网站验证上传镜像成功: 

3.总结JumpServer的安装和使用

JumpServer是一款堡垒机产品,它是全球首款完全开源的堡垒机,使用GNU GPL v2.0开源协议,是符合4A(认证Authentication、授权Authorization、账号Account、审计Audit)的专业运维审计系统。以下是对JumpServer的安装和使用的总结:

一、JumpServer的安装

环境准备
硬件要求:建议配置为4Core/8GB RAM/300GHDD,但2个CPU、4G内存、至少50G硬盘也可满足基本需求(屏幕录制功能非常占磁盘空间)。
软件要求:
操作系统:如CentOS。
Python:需要Python 3.6或更高版本。
数据库:MySQL或MariaDB,版本需大于等于5.6。
Redis:用于cache和celery broke。
其他:如yum-utils、device-mapper-persistent-data、lvm2等依赖包。
安装步骤
安装Docker:通过yum安装Docker及其依赖,并配置开机启动。
下载JumpServer安装包:从JumpServer的官方GitHub仓库或国内镜像站点下载最新版本的安装包。
解压并配置:解压安装包,并根据需要修改配置文件,如数据库连接信息、加密密钥等。
启动JumpServer:使用Docker Compose或相关命令启动JumpServer服务。

在Rocky Linux 8.10和Ubuntu 22.04系统上基于Docker部署JumpServer的完整操作指南:
#三种方式安装jumpserver
# ubuntu上docker安装jumpserver
# 创建一个名为jumpserver-net的docker网络,后续容器会加入此网络来实现通信
[root@ubuntu ~]#docker network create jumpserver-net# 使用vim编辑器创建并编辑mysqld.cnf文件,用于配置MySQL
[root@ubuntu ~]#vim mysqld.cnf
[mysqld]
default_authentication_plugin=mysql_native_password# 从Docker Hub拉取MySQL 8.0.29-oracle版本的镜像
[root@ubuntu ~]#docker pull mysql:8.0.29-oracle
# 从Docker Hub拉取Redis 6.2.14版本的镜像
[root@ubuntu ~]#docker pull redis:6.2.14# 运行MySQL容器
# --name指定容器名为mysql
# -e设置环境变量,如MySQL的root密码、数据库名、用户及密码
# -d表示后台运行
# -v挂载本地的mysqld.cnf配置文件到容器内
# --restart always容器异常退出时自动重启
# --network指定容器加入的网络
[root@ubuntu ~]#docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=jumpserver -e MYSQL_USER=jumpserver -e MYSQL_PASSWORD=123456 -d -v./mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf --restart always --network jumpserver-net mysql:8.0.29-oracle# 运行Redis容器,-d后台运行,--name指定容器名,--restart always自动重启,--network加入指定网络
[root@ubuntu ~]#docker run -d --name redis --restart always --network jumpserver-net redis:6.2.14# 进入MySQL容器的交互式终端,登录MySQL数据库
[root@ubuntu ~]#docker exec -it mysql sh
mysql -uroot -p123456
mysql>exit# 进入Redis容器的交互式终端,设置Redis密码
[root@ubuntu ~]#docker exec -it redis sh
redis-cli
127.0.0.1:6379>CONFIG set requirepass  123456
127.0.0.1:6379>exit
# 验证Redis密码是否设置成功
redis-cli
127.0.0.1:6379>auth 123456
127.0.0.1:6379>exit# 生成一个50位的随机字符串,用作SECRET_KEY
[root@ubuntu ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c50
aRSvqx9Ln6Vi4tKRp6on7T7WS0XZlFPQCZzQmfL8xSYXsaQCHf
# 生成一个30位的随机字符串,用作BOOTSTRAP_TOKEN
[root@ubuntu ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c30
vsyLcLXhe85yXC0tD9EvROhAR6kHD7# 从Docker Hub拉取jumpserver/jms_all:v3.10.3版本的镜像
[root@ubuntu ~]# docker pull jumpserver/jms_all:v3.10.3# 运行jumpserver容器
# --name指定容器名
# -p映射容器端口到宿主机端口
# -e设置多个环境变量,关联MySQL、Redis等服务的配置
# --privileged=true赋予容器特权模式
# -v挂载多个目录,用于数据持久化
# --network加入指定网络
# --restart always异常退出自动重启
[root@ubuntu ~]# docker run --name jms_all -d \-p 80:80 \-p 2222:2222 \-p 30000-30100:30000-30100 \-e SECRET_KEY=aRSvqx9Ln6Vi4tKRp6on7T7WS0XZlFPQCZzQmfL8xSYXsaQCHf \-e BOOTSTRAP_TOKEN=vsyLcLXhe85yXC0tD9EvROhAR6kHD7 \-e CORE_HOST=http://jms_all:8080 \-e LOG_LEVEL=ERROR \-e DB_HOST=mysql \-e DB_PORT=3306 \-e DB_USER=jumpserver \-e DB_PASSWORD=123456 \-e DB_NAME=jumpserver \-e REDIS_HOST=redis \-e REDIS_PORT=6379 \-e REDIS_PASSWORD='123456' \--privileged=true \-v /opt/jumpserver/core/data:/opt/jumpserver/data \-v /opt/jumpserver/koko/data:/opt/koko/data \-v /opt/jumpserver/lion/data:/opt/lion/data \-v /opt/jumpserver/magnus/data:/opt/magnus/data \-v /opt/jumpserver/kael/data:/opt/kael/data \-v /opt/jumpserver/chen/data:/opt/chen/data \-v /opt/jumpserver/web/log:/var/log/nginx \--network jumpserver-net  \--restart always          \jumpserver/jms_all:v3.10.3# ubuntu0上在线安装jumpserver
# 使用curl下载并执行快速安装脚本,进行jumpserver的在线安装
[root@ubuntu0 ~]# curl -sSL  https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash# ubuntu1上dokcker compose安装jumpserver
# 创建一个名为jumpserver的目录
[root@ubuntu1 ~]# mkdir jumpserver
# 进入刚创建的jumpserver目录
[root@ubuntu1  jumpserver]# cd  jumpserver# 使用vim编辑器打开当前目录下的docker-compose.yaml文件,准备编辑用于编排容器服务的配置内容
[root@ubuntu1  jumpserver]# vim docker-compose.yaml
# 声明使用的Docker Compose文件版本为3.8,不同版本语法和特性略有差异
version: '3.8'services:mysql:image: mysql:8.0container_name: jms_mysqlrestart: alwaysenvironment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-123456}MYSQL_DATABASE: ${DB_NAME:-jumpserver}healthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]interval: 10stimeout: 5sretries: 3start_period: 30svolumes:- ${VOLUME_DIR:-./data}/mysql/data:/var/lib/mysqlnetworks:- netredis:image: redis:7.0container_name: jms_redisrestart: alwayscommand: redis-server --requirepass ${REDIS_PASSWORD:-123456}environment:REDIS_PASSWORD: ${REDIS_PASSWORD:-123456}healthcheck:test: ["CMD", "redis-cli", "-a", "$$REDIS_PASSWORD", "ping"]interval: 10stimeout: 5sretries: 3start_period: 10svolumes:- ${VOLUME_DIR:-./data}/redis/data:/datanetworks:- netjumpserver:image: jumpserver/jms_all:v3.10.3container_name: jms_allprivileged: truerestart: alwaysenvironment:SECRET_KEY: ${SECRET_KEY:-SYmfImNk3TfMCmKmb7h3SYZjfTR6e2jVAjfLZxHAQqIxOdAWLv}BOOTSTRAP_TOKEN: ${BOOTSTRAP_TOKEN:-9Gd3SM0tR6gmbirptLYdkqXN82ZrQh}LOG_LEVEL: ${LOG_LEVEL:-ERROR}DB_HOST: mysqlDB_PORT: 3306DB_USER: rootDB_PASSWORD: ${DB_PASSWORD:-123456}DB_NAME: ${DB_NAME:-jumpserver}REDIS_HOST: redisREDIS_PORT: 6379REDIS_PASSWORD: ${REDIS_PASSWORD:-123456}DOMAINS: ${DOMAINS:-}ports:- "${HTTP_PORT:-80}:80"- "${SSH_PORT:-2222}:2222"depends_on:mysql:condition: service_healthyredis:condition: service_healthyhealthcheck:test: ["CMD", "curl", "-fsL", "http://localhost/api/health/"]interval: 10stimeout: 5sretries: 3start_period: 90svolumes:- ${VOLUME_DIR:-./data}/core/data:/opt/jumpserver/core/data- ${VOLUME_DIR:-./data}/koko/data:/opt/jumpserver/koko/data- ${VOLUME_DIR:-./data}/lion/data:/opt/jumpserver/lion/data- ${VOLUME_DIR:-./data}/chen/data:/opt/jumpserver/chen/data- ${VOLUME_DIR:-./data}/kael/data:/opt/jumpserver/kael/data- ${VOLUME_DIR:-./data}/nginx/logs:/var/log/nginxnetworks:- netnetworks:net:driver: bridgenetworks:# 定义名为net的网络,供上述服务使用,用于容器间通信net:
# 在ubuntu1系统的jumpserver目录下,执行这条命令
# docker compose up 用于启动由当前目录下的docker-compose.yaml文件定义的所有服务
# 它会读取该配置文件,拉取所需镜像(如果本地不存在),创建并启动相关容器,按照文件中定义的依赖关系、网络配置、环境变量等设定来运行整个服务栈
# 各个容器之间的网络连接、端口映射、数据卷挂载等配置都会生效,让整个Jumpserver应用及其依赖的MySQL、Redis服务协同工作
[root@ubuntu1  jumpserver]# docker compose up
二、JumpServer的使用

用户管理
管理用户:管理用户是资产被控服务器上的root用户,JumpServer使用此用户可以推送系统用户、获取资产硬件信息等。
系统用户:用于登录资产的用户。
普通用户:登录JumpServer的用户,如运维、开发等。可以创建用户组,将用户添加到用户组,便于管理。
资产管理
在JumpServer中添加各类资产,如服务器、网络设备、数据库应用等。
对资产进行分类和组织,便于后续授权和管理。
授权管理
以资产树方式授权资产,将不同的资产授权给不同的用户组或用户。
可以设置精细的权限控制,如只允许用户执行特定命令或访问特定文件。
日志审计
JumpServer会监控并记录用户的所有操作行为。
管理员可以查看用户的操作记录,进行审计和回放。
如发现不良或危险操作,可以及时中断并采取相应的安全措施。
会话管理
JumpServer支持在线会话功能,管理员可以查看当前正在进行的会话。
可以对会话进行中断、终止等操作,确保系统的安全性。
文件管理
JumpServer支持文件管理功能,用户可以将文件直接拖拽上传至服务器。
默认的存放位置可以在配置文件中进行修改。
危险命令限制
管理员可以设置危险命令列表,禁止用户执行这些命令。
如用户尝试执行危险命令,JumpServer会进行拦截并记录相关操作。

三、JumpServer实际操作

访问Web界面
地址: http://<JumpServer服务器IP地址>:<服务运行端口>
用户名: admin 密码: admin

1、创建用户

2、创建用户组并添加用户

 3、在控制台中账号管理的账号模版,点击创建,创建账号模版root-dev、root-tests、dev-devs、test-tests、wordpress-mysql

 4、在控制台中资产管理的资产列表对应的资产树Default,创建节点开发组和测试组。Default/开发组,点击添加资产到列表 ,创建资产-主机10.0.0.100和10.0.0.108。Default/测试组,点击添加资产到列表 ,创建资产-主机10.0.0.130和10.0.0.140。

5、在控制台中权限管理的资产授权,创建资产授权规则开发组授权和测试组授权、开发组授权MYSQL。在控制台中权限管理的命令过滤 ,创建命令组。基于命令组,在控制台中权限管理的命令过滤,创建命令过滤规则。

相关文章:

Linux云计算SRE-第十五周

1.总结Dockerfile的指令和Docker的网络模式 一、Dockerfile 核心指令详解 1、基础构建指令 指令 功能描述 关键特性 FROM 指定基础镜像&#xff08;必须为首条指令&#xff09; - 支持多阶段构建&#xff1a;FROM node AS builder - scratch 表示空镜像 RUN 在镜像构建…...

2014年下半年试题一:论软件需求管理

论文库链接&#xff1a;系统架构设计师论文 论文题目 软件需求管理是一个对系统需求变更了解和控制的过程。需求管理过程与需求开发过程相互关联&#xff0c;初始需求导出的同时就要形成需求管理规划&#xff0c;一旦启动了软件开发过程需求管理活动就紧密相伴。 需求管理过程中…...

podman加速器配置,harbor镜像仓库部署

Docker加速器 registries加速器 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# cd /etc/containers/ [rootlocalhost containers]# ls certs.d policy.json registries.conf.d storage.conf oci registries.conf re…...

信息学奥赛一本通 1522:网络 | OpenJudge 百练 1144:Network

【题目链接】 ybt 1522&#xff1a;网络 OpenJudge 百练 1144:Network 【题目考点】 1. 图论&#xff1a;割点 【解题思路】 每个交换机是一个顶点&#xff0c;如果两地点之间有电话线连接&#xff0c;那么两顶点之间有一条无向边&#xff0c;该图是无向图。 初始时任何地…...

本地部署DeepSeek的硬件配置建议

本地部署DeepSeek的硬件配置需求因模型参数规模和部署工具不同而有所差异&#xff0c;以下是综合多个来源的详细要求&#xff1a; 1. 基础配置&#xff08;适用于7B参数模型&#xff09; 内存&#xff1a;最低8GB&#xff0c;推荐16GB及以上&#xff1b;若使用Ollama工具&…...

Redis面试题----Redis 的持久化机制是什么?各自的优缺点?

Redis 提供了两种主要的持久化机制,分别是 RDB(Redis Database)和 AOF(Append Only File),下面将详细介绍它们的原理、优缺点。 RDB(Redis Database) 原理 RDB 持久化是将 Redis 在某个时间点上的数据集快照以二进制文件的形式保存到磁盘上。可以通过手动执行 SAVE …...

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…...

Metal 学习笔记四:顶点函数

到目前为止&#xff0c;您已经完成了 3D 模型和图形管道。现在&#xff0c;是时候看看 Metal 中两个可编程阶段中的第一个阶段&#xff0c;即顶点阶段&#xff0c;更具体地说&#xff0c;是顶点函数。 着色器函数 定义着色器函数时&#xff0c;可以为其指定一个属性。您将在本…...

C# string转unicode字符

在 C# 中&#xff0c;将字符串转换为 Unicode 字符&#xff08;即每个字符的 Unicode 码点&#xff09;可以通过遍历字符串中的每个字符并获取其 Unicode 值来实现。Unicode 值是一个整数&#xff0c;表示字符在 Unicode 标准中的唯一编号。 以下是实现方法&#xff1a; 1. 获…...

HITCON2017SSRFME-学习复盘

代码审计 192.168.122.15 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explode(,, $_SERVER[HTTP_X_FORWARDED_FOR]);//用逗号分割多个IP$_SERVER[REMOTE_ADDR] $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];//给第一个IP发送请…...

【Http和Https区别】

概念&#xff1a; 一、Http协议 HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;主要用于Web浏览器和服务器之间的通信。http也是客户端和服务器之间请求与响应的标准协议&#xff0c;客户端通常…...

2025数学建模竞赛汇总,错过再等一年

01、2025第十届数维杯大学生数学建模挑战赛&#xff08;小国赛&#xff09; 竞赛介绍&#xff1a;数学建模行业内仅次于国赛和美赛的的第三赛事&#xff0c;被多所高校认定为国家级二类竞赛。赛题类型是国内唯一和高教社杯国赛题型风格完全一致的全国性数学建模竞赛&#xff0…...

基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘 要 《计算机网络》题库管理系统是一种新颖的考试管理模式&#xff0c;因为系统是用Java技术进行开发。系统分为三个用户进行登录并操作&#xff0c;分别是管理员、教师和学生。教师在系统后台新增试题和试卷&#xff0c;学生进行在线考试&#xff0c;还能对考生记录、错题…...

ReentrantLock 用法与源码剖析笔记

&#x1f4d2; ReentrantLock 用法与源码剖析笔记 &#x1f680; 一、ReentrantLock 核心特性 &#x1f504; 可重入性&#xff1a;同一线程可重复获取锁&#xff08;最大递归次数为 Integer.MAX_VALUE&#xff09;&#x1f527; 公平性&#xff1a;支持公平锁&#xff08;按等…...

矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密

矩阵的正定与负定&#xff1a;从Fisher信息矩阵看“曲率”的秘密 在数学和统计学中&#xff0c;矩阵的“正定性”和“负定性”是一对重要概念&#xff0c;尤其在优化、统计推断和机器学习中频繁出现。比如&#xff0c;Fisher信息矩阵&#xff08;Fisher Information Matrix, F…...

被裁20240927 --- WSL-Ubuntu20.04安装cuda、cuDNN、tensorRT

cuda、cuDNN、tensorRT的使用场景 1. CUDA&#xff08;Compute Unified Device Architecture&#xff09; 作用&#xff1a; GPU 通用计算&#xff1a;CUDA 是 NVIDIA 的并行计算平台和编程模型&#xff0c;允许开发者直接利用 GPU 的并行计算能力&#xff0c;加速通用计算任…...

uniapp写的h5跳转小程序

使用场景&#xff1a; 我们对接第三方支付的时候&#xff0c;对方只提供了原生小程序id和appid&#xff0c;由我们的app和h5平台跳转至小程序。 遇到的问题&#xff1a; app跳转本地正常&#xff0c;线上报错如下 解决办法&#xff1a; 需要去微信开放平台申请应用appid 易…...

[SWPUCTF 2022 新生赛]ez_rce

打开题目就在线环境&#xff0c;发现只有一句话&#xff1a;真的什么都没有吗 F12查看控制台和源代码也没发现任何信息&#xff0c;然后用虚拟机里面的dirsearch扫一下这个网站就能得到&#xff1a; 然后这里扫出来的结果查看的直接就是robots.txt,然后就能看到&#xff1a; …...

递归、搜索与回溯算法 —— 名词解析

目录 一、递归 1、什么是递归&#xff1f; 2、递归的数学类比 3、为什么要用到递归&#xff1f; 问题具有递归结构&#xff1a; 代码简洁易懂&#xff1a; 解决复杂问题&#xff1a; 处理嵌套结构&#xff1a; 4、如何理解递归&#xff1f; 明确基准条件&#xff1a; …...

【docker】docker swarm lock和unlock的区别,以及旧节点重启的隐患

docker swarm lock/unlock 的作用 Docker Swarm 提供了**加密集群状态&#xff08;Encrypted Raft logs&#xff09;**的功能&#xff0c;可以防止 Swarm 集群的管理数据&#xff08;如任务分配、集群配置等&#xff09;在磁盘上被未授权访问。 docker swarm lock&#xff1a…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...