首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,327 阅读
2
类的加载
880 阅读
3
Spring Cloud OAuth2.0
871 阅读
4
SpringBoot自动装配原理
761 阅读
5
集合不安全问题
658 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
React
Linux
容器
Docker
Containerd
Podman
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
OpenCV
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Canvas
React
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
蘇阿細
累计撰写
463
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
React
Linux
容器
Docker
Containerd
Podman
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
页面
统计
关于
搜索到
463
篇与
的结果
2025-07-07
基础使用
参考 b站 叩丁狼 Canvas 课程(1)通过 html 标签创建<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>通过html标签创建</title> </head> <body> <canvas id="canvas" width="500" height="500"></canvas> <script> // 1. 获取 canvas 画布 const canvas = document.getElementById('canvas') // 2. 获取 context 对象(画笔) const context = canvas.getContext('2d') // 3. 画一个正方形 // fillRect(x, y, width, height) context.fillRect(50, 40, 200, 200) </script> </body> </html>(2)通过 js 创建<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>通过js创建</title> </head> <body> <script> // 1. 创建 canvas 画布 const canvas = document.createElement('canvas') // 设置宽高 canvas.width = 500 canvas.height = 500 document.body.append(canvas) // 2. 获取 context 对象(画笔) const context = canvas.getContext('2d') // 3. (同第一节)画一个正方形 context.fillRect(60, 60, 200, 200) </script> </body> </html>(3)canvas 宽高的设置<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>canvas宽高的设置</title> <!-- <style> canvas { width: 500px; height: 500px } </style> --> </head> <body> <script> // 注意:不建议使用 CSS 样式表设置 canvas 的宽高,样式会出问题 // 1. 创建 canvas 画布 const canvas = document.createElement('canvas') // 设置宽高 canvas.width = 500 canvas.height = 500 document.body.append(canvas) // 2. 获取 context 对象(画笔) const context = canvas.getContext('2d') // 3. (同第一节)画一个正方形 context.fillRect(60, 60, 200, 200) </script> </body> </html>
2025年07月07日
35 阅读
0 评论
0 点赞
2025-07-02
数据持久化
为容器挂载主机目录# scr 主机目录 # dst 容器中的目录 ctr container create docker.io/library/busybox:latest busybox-test --mount type=bind,src=/home/workspace/busybox-mount-test,dst=/home,options=rbind:rw运行容器ctr tasks start -d busybox-test bash向挂载目录中添加文件touch /home/workspace/busybox-mount-test/test.txt进入容器查看ctr tasks exec --exec-id $RANDOM -t busybox-test bash
2025年07月02日
87 阅读
0 评论
0 点赞
2025-07-02
NameSpace 管理
containerd 使用 namespace 隔离容器运行时1. ctr namespace helproot@suaxi:~# ctr namespace -h NAME: ctr namespaces - Manage namespaces USAGE: ctr namespaces command [command options] [arguments...] COMMANDS: create, c Create a new namespace list, ls List namespaces remove, rm Remove one or more namespaces label Set and clear labels for a namespace OPTIONS: --help, -h show help2. 查看 namespacectr namespace ls NAME LABELS moby k8s.io3. 创建ctr namespace create test # 再次查看 ctr namespace ls NAME LABELS moby k8s.io test4. 删除ctr namespace rm test # 再次查看 ctr namespace ls NAME LABELS moby k8s.io5. 补充(1)查看指定 namespace 运行的用户进程ctr -n test tasks ls(2)在指定 namespace 中拉取镜像ctr -n test images pull docker.io/library/nginx:latest(3)在指定 namespace 中创建静态容器ctr -n test container create docker.io/library/nginx:latest nginx-test(4)查看在指定 namespace 中创建的容器ctr -n test container ls CONTAINER IMAGE RUNTIME nginx-test docker.io/library/nginx:latest io.containerd.runc.v2
2025年07月02日
72 阅读
0 评论
0 点赞
2025-07-01
容器管理
1. ctr container helproot@suaxi:~# ctr container help NAME: ctr containers - Manage containers USAGE: ctr containers [global options] command [command options] [arguments...] VERSION: 1.7.27 COMMANDS: create Create container delete, del, remove, rm Delete one or more existing containers info Get info about a container list, ls List containers label Set and clear labels for a container checkpoint Checkpoint a container restore Restore a container from checkpoint GLOBAL OPTIONS: --help, -h show help 2. 查看容器ctr container ls查看容器中正在跑着的进程ctr task ls # 简写 ctr t ls3. 创建静态容器# 同上,c 为 container 的简写 ctr c create docker.io/library/nginx:alpine nginx-test # 查看已创建的容器 ctr container ls CONTAINER IMAGE RUNTIME nginx-test docker.io/library/nginx:alpine io.containerd.runc.v2 # 查看容器信息 ctr container info nginx-test4. 启动容器# 启动task,即表时在容器中运行了进程(动态容器) ctr task start -d nginx-test5. 进入容器# --exec-id 表示为 exec 进程设置一个id(可以使用随机数,保证该id唯一即可) ctr task exec --exec-id 1 nginx-test /bin/sh6. 直接运行动态容器# --net-host 网络模式为 host ctr run -d --net-host docker.io/library/nginx:alpine nginx-test7. 暂停容器# 查看容器状态 ctr tasks ls TASK PID STATUS nginx-test 5687 RUNNING # 暂停 ctr tasks pause nginx-test # 再次查看状态 ctr tasks ls TASK PID STATUS nginx-test 5687 PAUSED8. 恢复容器ctr tasks resume nginx-test # 查看容器状态 ctr tasks ls TASK PID STATUS nginx-test 5687 RUNNING9. 停止容器# 使用 kill 命令,在 ctr task -h 帮助文档中可查看详细信息 ctr tasks kill nginx-test # 查看容器状态 ctr tasks ls TASK PID STATUS nginx-test 5687 STOPPED10. 删除容器# 停止/删除 task ctr tasks delete nginx-test # 删除容器(需先完成上述步骤) ctr container delete nginx-test
2025年07月01日
86 阅读
0 评论
0 点赞
2025-07-01
镜像管理
containerd 使用 ctr 命令,即:containerd CLI1. ctr images helproot@suaxi:~# ctr images -h NAME: ctr images - Manage images USAGE: ctr images command [command options] [arguments...] COMMANDS: check Check existing images to ensure all content is available locally export Export images import Import images list, ls List images known to containerd mount Mount an image to a target path unmount Unmount the image from the target pull Pull an image from a remote push Push an image to a remote prune Remove unused images delete, del, remove, rm Remove one or more images by reference tag Tag an image label Set and clear labels for an image convert Convert an image usage Display usage of snapshots for a given image ref OPTIONS: --help, -h show help 2. 查看镜像ctr images ls3. 拉取镜像containerd 支持 oci 标准的镜像,所以可以直接使用 docker 官方或 dockerfile 构建的镜像。# 拉取时镜像名需要写全量名称(源 + 镜像名:TAG) ctr images pull --all-platforms docker.io/library/nginx:alpine # 拉取指定平台的镜像(x86) ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine4. 删除镜像ctr image rm docker.io/library/nginx:alpine5. 导出镜像ctr i export --all-platforms nginx.img docker.io/library/nginx:alpine6. 导入镜像# 以上一步导出的 nginx.img 镜像为例 ctr images import nginx.img unpacking docker.io/library/nginx:alpine7. 修改镜像 tag# 将 docker.io/library/nginx:alpine 修改为 nginx:alpine-test ctr images tag docker.io/library/nginx:alpine nginx:alpine-test修改后检查镜像ctr images check
2025年07月01日
56 阅读
0 评论
0 点赞
2025-07-01
简介、安装
一、简介1. 前言早在2016年3月,Docker 1.11 的 Docker Engine 里就包含了 containerd,而现在则是把 containerd 从 Docker Engine 里彻底剥离出来,作为一个独立的开源项目发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在 Docker Engine 里 containerd 相比,独立的 containerd 将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。containerd 并不直接面向用户,而是主要用于集成到更上层的系统里,比如 Swarm, Kubernetes , Mesos 等容器编排系统。containerd 以 Daemon 的形式运行在系统上,通过暴露底层的 gRPC API,上层系统可以通过这些API管理对应的容器。每个 containerd 只负责一台机器,Pull 镜像,对容器的启动、停止等操作,网络,存储都是由 containerd 完成。具体运行容器由 runC 负责,实际上只要是符合OCI规范的容器都可以支持。对于容器编排服务来说,运行时只需要使用 containerd + runC,更加轻量,容易管理。独立之后 containerd 的特性演进可以和 Docker Engine 分开,更加专注于专注容器运行时管理。2. 架构简要版二、安装以 Ubuntu 20.04 LTS 为例1. 安装依赖sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release2. 添加 Docker 官方 GPG 密钥sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg3. 添加仓库echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null4. 安装sudo apt update sudo apt install -y containerd.io # 查看版本 containerd -V
2025年07月01日
70 阅读
0 评论
0 点赞
2025-06-29
Helm
参照 b站王晓春老师 helm 课程一、安装官网:https://helm.sh/此处以二进制包安装为例:# K8s 管理节点 wget https://github.com/helm/helm/releases/download/v3.18.3/helm-v3.18.3-linux-amd64.tar.gz.asc tar -zxvf helm-v3.18.3-linux-amd64.tar.gz.asc -C /usr/local/bin ln -s /usr/local/bin/linux-amd64/helm /usr/bin/helm # 查看版本信息 helm version二、常用命令1. 管理类Repository 管理add、list、remove、upgrade、index子命令等Chart 管理create、package、pull、push、dependency、search、show、verify等Release 管理instll、upgrade、get、list、history、status、rollback、uninstall等2. 常用命令示例# repo helm repo list # 列出已添加的仓库 helm repo add [REPO_NAME] [URL] # 添加远程仓库并指定名称 helm repo remove [ROPE_NAME] # 删除仓库 helm repo update # 更新仓库,类似于 apt update helm search hub [xxx] # 从 artifacthub 搜索,类似于 docker search helm search repo [xxx] # 从本地仓库搜索 helm show chart [CHART] # 查看 chart 包的信息 helm show values [CHART] # 查看 chart 包下 values.yaml 的文件内容 # 拉取 helm pull repo/chartname # 拉取最新版本的 chart.tgz 到当前目录下 helm pull chart_URL # 从 url 拉取 helm pull repo/app --version 1.0 --untar # 拉取指定版本并解压 # 安装 helm install [NAME] [CHART] [--version <string>] # 安装指定版本的 chart helm install [CHART] --generate-name # 安装时自动生成 RELEASE_NAME helm install --set key1=value1,key2=value2 [RELEASE_NAME] [CHART] # 动态设置参数 helm install -f values.yaml [RELEASE_NAME] [CHART] # 引用指定文件配置 helm install --debug --dry-run [RELEASE_NAME] [CHART] # 调试但不实际运行,输出调试的结果 # 删除 helm uninstall [RELEASE_NAME] # 删除 release # 查看 helm list # 列出已安装的 release helm status [RELEASE_NAME] # 查看 release 状态 helm get notes [RELEASE_NAME] # 查看 release 的说明 helm get values [RELEASE_NAME] -n [NAMESPACE] > values.yaml # 查看 release 生成的 values 并导出至指定文件 helm get mainfest [RELEASE_NAME] -n [NAMESPACE] # 查看 release 生成的资源清单文件 # 升级和回滚 helm upgrade [RELEASE_NAME] [CHART] --set key=value # 更新 release,同时动态设置参数 helm upgrade [RELEASE_NAME] [CHART] -f chartname/values.yaml # 同上 helm rollback [RELEASE_NAME] [REVISION] # 回滚至指定版本,不指定版本时默认回滚至上一个版本 helm history [RELEASE_NAME] # 查看历史记录 # 打包 helm package chartname/ # 将指定目录下的 chart 打包为 chartname.tgz 包至当前目录下3. 安装 chart 的六种方式By chart reference:helm install mysql xxx/mysqlBy path to a packaged chart:helm install mysql ./mysql-5.7.35.tgzBy path to an unpacked chart directory:helm install mysql ./mysqlBy absolute URL:helm install mysql https://xxx.com/charts /mysql-5.7.35.tgzBy chart reference and repo url:helm install --repo https://xxx .com/charts/mysql mysqlBy oci registries:helm install mysql --version 5.7.35 oci://xxx.com/charts /mysql
2025年06月29日
64 阅读
0 评论
0 点赞
2025-06-19
中间件
四、中间件1. 概念"中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应之后工作。2. 使用在函数的顶部使用装饰器 @app.middleware("http")中间件接收的参数:requestcall_next 函数接收 request,作为参数在处理完相应的逻辑后,将 request 传递给下一步操作返回对应路径请求的 response3. 示例from fastapi import FastAPI, Request, Response app = FastAPI() @app.middleware("http") async def middleware2(request: Request, call_next): print("中间件2-请求") response = await call_next(request) print("中间件2-响应") return response @app.middleware("http") async def middleware1(request: Request, call_next): print("中间件1-请求") response = await call_next(request) print("中间件1-响应") return response @app.get("/{user_id}") async def get_user(user_id: int): print(f'查询用户id为: {user_id}的用户') return { "user": "孙笑川" } if __name__ == '__main__': import uvicorn uvicorn.run("main:app", host="127.0.0.1", port=8088, reload=True) 当请求 get_user 时,控制台会打印如下信息(中间件需按顺序写,从上至下倒序):4. CORS 中间件示例from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware app = FastAPI() origins = [ "http://localhost:8089" ] app.add_middleware( CORSMiddleware, allow_origins=origins, # 值为*时代表所有客户端 allow_credentials=True, allow_methods=["GET", "POST", "PUT", "DELETE"], allow_headers=["*"], ) @app.get("/") def main(): return { "message": "你好,孙笑川" } if __name__ == '__main__': import uvicorn uvicorn.run("main:app", host="127.0.0.1", port=8088, reload=True)
2025年06月19日
59 阅读
0 评论
0 点赞
1
...
8
9
10
...
58