【Docker】Docker入门了解
文章目录
- Docker 的核心概念
- Docker 常用命令
- 示例:构建一个简单的 C++ 应用容器
- 1. 创建 C++ 应用
- 2. 创建 Dockerfile
- 3. 构建镜像
- 4. 运行容器
- Docker 优势
- 学习 Docker 的下一步
- **一、Docker 是什么?**
- **为什么 C++ 开发者需要 Docker?**
- **二、核心概念**
- 1. **镜像(Image)**
- 2. **容器(Container)**
- 3. **仓库(Registry)**
- **三、安装 Docker**
- 1. **Linux (Ubuntu)**
- 2. **Windows/macOS**
- **四、基础操作**
- 1. **拉取镜像**
- 2. **运行容器**
- 3. **在容器内安装 C++ 环境**
- **五、Dockerfile 实战(C++ 专用)**
- 1. **示例目录结构**
- 2. **Dockerfile 内容**
- 3. **构建镜像**
- 4. **运行容器**
- **六、Docker Compose(多容器编排)**
- 1. **安装 Docker Compose**
- 2. **docker-compose.yml**
- 3. **启动服务**
- **七、C++ 开发中的实用场景**
- 1. **开发环境标准化**
- 2. **持续集成(CI)**
- 3. **部署二进制文件**
- **八、常见问题**
- Q1:容器退出后数据会丢失吗?
- Q2:如何调试运行中的容器?
- Q3:如何暴露 C++ 服务的端口?
- **九、学习资源**

Docker 是一个开源的应用容器引擎,允许你把应用和所有依赖打包到一个标准化的容器里,这样就可以在任何环境中运行。它主要解决了“在我的机器上能运行”的问题,确保你的应用在不同的环境中有一致的表现。
简单来说,Docker 就是通过容器化技术,让开发、测试、部署的过程更加高效、轻松。容器是一种轻量级、可移植的虚拟化方式,可以让你在同一台机器上运行多个应用,而不会互相干扰。
Docker 的核心概念
-
镜像(Image):
- Docker 镜像是一个包含应用程序及其依赖的轻量级、可执行的包。它是 Docker 容器的构建蓝图。
- 镜像是只读的,每次运行镜像都会创建一个新的容器。
-
容器(Container):
- 容器是镜像的一个实例,是应用的运行时环境。容器是隔离的,可以在其中运行任何程序或服务。
- 容器是临时的,停止或删除容器后,容器内部的修改会丢失(除非使用数据卷来保存数据)。
-
Dockerfile:
- Dockerfile 是用来构建 Docker 镜像的文本文件,其中定义了如何从一个基本镜像开始、添加程序、依赖和配置等步骤。
- 例如,你可以在 Dockerfile 中指定操作系统、安装的库、编译你的 C++ 程序、暴露的端口等。
-
Docker Hub:
- Docker Hub 是一个公共的 Docker 镜像仓库,类似于 GitHub,但它是专门用于存储和共享 Docker 镜像的地方。
- 你可以从 Docker Hub 拉取(下载)常见的镜像,或者将你自己的镜像推送到 Docker Hub 上。
-
容器网络(Network):
- Docker 提供了多个网络模式,让你可以在不同的容器之间建立网络连接(如桥接网络、主机网络等)。
-
数据卷(Volume):
- 数据卷允许容器持久化数据,即使容器被删除,数据依然存在。
- 它主要用于存储数据库文件、日志文件等需要持久化的数据。
Docker 常用命令
- docker --version: 查看 Docker 的版本。
- docker pull <image_name>: 从 Docker Hub 拉取镜像。
- docker build -t <image_name>
: 从 Dockerfile 构建镜像。 - docker run <image_name>: 运行一个容器,启动一个镜像实例。
- docker ps: 查看正在运行的容器。
- docker stop <container_id>: 停止运行中的容器。
- docker rm <container_id>: 删除一个已停止的容器。
- docker rmi <image_name>: 删除镜像。
- docker logs <container_id>: 查看容器的输出日志。
示例:构建一个简单的 C++ 应用容器
假设你有一个简单的 C++ 应用,并想要将它放进 Docker 容器里运行。
1. 创建 C++ 应用
例如,你有一个 hello.cpp
文件,内容如下:
#include <iostream>
using namespace std;int main() {cout << "Hello, Docker!" << endl;return 0;
}
2. 创建 Dockerfile
接下来,你需要创建一个 Dockerfile
来构建镜像。Dockerfile
可能会是这样:
# 使用一个官方的基础镜像,选择一个带有编译器的镜像
FROM ubuntu:20.04# 安装 C++ 编译器
RUN apt-get update && apt-get install -y g++# 复制本地代码到容器中
COPY hello.cpp /hello.cpp# 编译 C++ 程序
RUN g++ /hello.cpp -o /hello# 设置容器启动时执行的命令
CMD ["/hello"]
3. 构建镜像
然后在同一目录下打开终端,运行以下命令来构建镜像:
docker build -t cpp-hello-world .
4. 运行容器
镜像构建完成后,你可以通过以下命令来运行容器:
docker run cpp-hello-world
你应该会看到输出 Hello, Docker!
。
Docker 优势
- 一致性: 容器确保应用在不同的环境中都能以相同的方式运行。
- 轻量: 相比虚拟机,容器启动速度快,占用资源少。
- 隔离性: 容器之间是隔离的,可以确保不同应用互不干扰。
- 便捷性: Docker 提供了简单的命令行工具,易于使用和管理。
学习 Docker 的下一步
- 你可以开始构建更复杂的应用容器,或者在多个容器之间进行交互(例如,数据库和应用服务器的组合)。
- 了解如何使用 Docker Compose 来管理多个容器的应用。
- 了解如何将 Docker 容器部署到云平台(如 AWS、Azure 或 Google Cloud)上。
希望这些基础能帮你入门 Docker!如果有具体的问题或者需要进一步讲解某部分,随时告诉我!
好的!我会从零开始详细讲解 Docker,并特别结合 C++ 开发场景。内容较长,建议分段阅读。
一、Docker 是什么?
Docker 是一个容器化平台,允许你将应用程序及其依赖打包成一个轻量级、可移植的容器。容器与虚拟机类似,但更轻量(共享操作系统内核),启动更快,资源消耗更少。
为什么 C++ 开发者需要 Docker?
- 环境一致性:避免 “在我机器上能跑” 的问题。
- 依赖隔离:不同项目可使用不同版本的库(如 gcc、Boost)。
- 快速部署:编译后的程序可直接打包进容器,无需在服务器配置环境。
二、核心概念
1. 镜像(Image)
- 定义:只读模板,包含运行程序所需的一切(代码、运行时、库、环境变量)。
- 类比:C++ 中的 “类”,镜像是静态的,通过
Dockerfile
定义。 - 示例镜像:
ubuntu:20.04
,gcc:latest
2. 容器(Container)
- 定义:镜像的运行实例(类似对象实例化)。
- 特点:容器之间隔离,可启动/停止/删除。
- 操作:通过
docker run
启动容器。
3. 仓库(Registry)
- 定义:存储和分发镜像的地方(如 Docker Hub)。
- 常用命令:
docker pull
,docker push
三、安装 Docker
1. Linux (Ubuntu)
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc# 安装依赖
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 -# 添加仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装
sudo docker run hello-world
2. Windows/macOS
- 下载 Docker Desktop:https://www.docker.com/products/docker-desktop
四、基础操作
1. 拉取镜像
docker pull ubuntu:20.04 # 拉取 Ubuntu 20.04 镜像
docker pull gcc:latest # 拉取 GCC 最新镜像
2. 运行容器
# 运行一个 Ubuntu 容器并进入终端
docker run -it --name my_cpp_container ubuntu:20.04 /bin/bash# 参数解释:
# -it : 交互模式 + 分配终端
# --name : 容器名称
# ubuntu:20.04 : 镜像名
# /bin/bash : 启动后执行的命令
3. 在容器内安装 C++ 环境
# 进入容器后执行
apt update
apt install -y g++ # 安装 C++ 编译器
g++ --version # 验证安装
五、Dockerfile 实战(C++ 专用)
创建一个 Dockerfile
,自动化构建 C++ 开发环境:
1. 示例目录结构
my_cpp_project/
├── Dockerfile
└── src/└── main.cpp
2. Dockerfile 内容
# 使用官方 GCC 镜像作为基础
FROM gcc:latest# 设置工作目录
WORKDIR /app# 将本地代码复制到容器中
COPY src/main.cpp .# 编译代码
RUN g++ -o myapp main.cpp# 容器启动时运行程序
CMD ["./myapp"]
3. 构建镜像
docker build -t my_cpp_app . # -t 指定镜像名称,. 表示当前目录
4. 运行容器
docker run --rm my_cpp_app # --rm 运行后自动删除容器
六、Docker Compose(多容器编排)
适用于需要同时运行多个服务(如 C++ 程序 + Redis):
1. 安装 Docker Compose
sudo apt-get install docker-compose
2. docker-compose.yml
version: '3'
services:cpp_app:build: .command: ./myappredis:image: "redis:alpine"
3. 启动服务
docker-compose up
七、C++ 开发中的实用场景
1. 开发环境标准化
FROM ubuntu:20.04
RUN apt update && apt install -y g++ cmake make libboost-all-dev
2. 持续集成(CI)
在 GitLab CI 或 GitHub Actions 中直接使用 Docker 镜像编译代码。
3. 部署二进制文件
将编译后的可执行文件打包进 alpine
镜像(极小化部署):
FROM gcc:latest AS build
COPY . .
RUN g++ -o /app main.cppFROM alpine:latest
COPY --from=build /app /app
CMD ["/app"]
八、常见问题
Q1:容器退出后数据会丢失吗?
- 答:是的!需使用
-v
挂载卷:
docker run -v $(pwd)/data:/data my_cpp_app
Q2:如何调试运行中的容器?
docker exec -it <container_id> /bin/bash # 进入正在运行的容器
Q3:如何暴露 C++ 服务的端口?
docker run -p 8080:80 my_cpp_app # 主机端口:容器端口
九、学习资源
- 官方文档:https://docs.docker.com/
- Docker Hub:https://hub.docker.com/
- 《Docker 入门与实践》
通过 Docker,你可以将 C++ 项目的开发、测试、部署流程完全容器化。建议先尝试简单的示例,再逐步应用到实际项目中。
相关文章:
【Docker】Docker入门了解
文章目录 Docker 的核心概念Docker 常用命令示例:构建一个简单的 C 应用容器1. 创建 C 应用2. 创建 Dockerfile3. 构建镜像4. 运行容器 Docker 优势学习 Docker 的下一步 **一、Docker 是什么?****为什么 C 开发者需要 Docker?** **二、核心概…...
threejs实现烟花效果
大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...
23【进制的理解】
很多人可能听过计算机的最底层是2进制执行,但是原理并不知道,我们今天先不讨论那么复杂的问题,先讨论什么是进制 1910,10并不是1个字符,而是2个字符,也就是说在10进制里面没有“10”这个字符,1…...
VMware 和本机(Win10)安装共享文件
1. 安装VM-tools, sudo apt-get install open-vm-tools-desktop -y 2. VMware->设置-> 选项中启动共享文件夹. 3. 本机设置共享文件夹(文件目录为data),右键属性设置: VMware, Other Locations->Computer->mnt->data 即可。 ps: 还有个…...
整数转罗马数字
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function intToRoman(num) {// 定义罗马数字符号和对应的整数值,按照从大到小的顺序排列const values [1000, 900, 500, 400, 100, 90, 50, 40,…...
数据结构--树
树的基本概念 树:一个或多个节点的有限集合。 存在一个称为根的特定节点,其余的节点被分为n个互不相交的集合T1,T2,…,Tn,其中的每一个集合都是一棵树。T1,T2,…,Tn称为根…...
Next.js 14 TS 中使用jwt 和 App Router 进行管理
jwt是一个很基础的工作。但是因为架构不一样,就算是相同的架构,版本不一样,加jwt都会有一定的差别。现在我们的项目是Next.js 14 TS 的 App Router项目(就是没有pages那种),添加jwt的步骤: 1、…...
oracle 分区表介绍
oracle 分区表介绍 Oracle 分区表是一个非常强大的数据库功能,可以将一个大的表分割成多个更小、更易管理的块(分区)。这种分区结构在处理大规模数据时非常有用,因为它能改善性能、简化维护和管理,并支持高效的数据存取…...
TypeScript 学习 -类型 - 9
声明合并 成员变量合并:成员变量会合并,但类型必须一致。成员函数合并:如果函数签名不同,合并后的函数会是签名的联合类型。接口声明顺序:在同一个接口内按顺序合并;不同接口时,后声明的会覆盖…...
996引擎 - 前期准备-配置开发环境
996引擎 - 前期准备 官网搭建服务端、客户端单机搭建开发环境配置后端开发环境配置环境前端开发环境配置环境后端简介前端简介GUILayoutGUIExport官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭建服务端、客户端 这个教…...
python-decouple和 django-environ管理 Python/Django 项目中的环境变量
在现代软件开发中,环境变量的管理是一个至关重要的任务。环境变量通常用于存储敏感信息(如 API 密钥、数据库凭据)或配置信息(如调试模式、日志级别)。为了更安全、更方便地管理环境变量,Python 社区提供了许多工具,其中最流行的两个是 python-decouple 和 django-envir…...
FileReader使用
FileReader : 读取文件内容的api,,,在前端处理上传的文件,,比如预览图片 readAsDataURL(file) : 读取为base64编码的 data urlreadAsText() : 读取为文本readAsArrayBuffer() : 读取为二进制 …...
npm cnpm pnpm npx yarn的区别
npm、cnpm、pnpm、npx、yarn 这几个工具都与 Node.js 项目的包管理和命令执行相关,它们的区别具体如下: 本质与功能定位 npm:是 Node.js 官方的包管理工具,提供了安装、卸载、更新、发布等全方位的包管理功能,还能通…...
knots = unique(knots, ‘stable‘);区别引用
【问题】knots unique(knots, stable); 和unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 的区别 【解释】knots unique(knots, stable); 和 unique_knots unique(knots(2:end-1)); knots(2:end-1) unique_knots; 两段代码的主要区别在于它们处理重…...
c++ 定点 new
(1) 代码距离: #include <new> // 需要包含这个头文件 #include <iostream>int main() {char buffer[sizeof(int)]; // 分配一个足够大的字符数组作为内存池int* p new(&buffer) int(42); // 使用 placement new…...
无人机如何自主侦察?UEAVAD:基于视觉的无人机主动目标探测与导航数据集
作者:Xinhua Jiang, Tianpeng Liu, Li Liu, Zhen Liu, and Yongxiang Liu 单位:国防科技大学电子科学学院 论文标题:UEVAVD: A Dataset for Developing UAV’s Eye View Active Object Detection 论文链接:https://arxiv.org/p…...
怎样在PPT中启用演讲者视图功能?
怎样在PPT中启用演讲者视图功能? 如果你曾经参加过重要的会议或者演讲,你就会知道,演讲者视图(Presenter View)对PPT展示至关重要。它不仅能帮助演讲者更好地掌控演讲节奏,还能提供额外的提示和支持&#…...
大语言模型LLM在地理信息GIS中应用场景
AI&地理 AI大语言模型在地理中的应用主要体现在以下几个方面: 一、地理信息检索与查询 AI大语言模型能够理解复杂的自然语言查询,包括地名、地理位置、地理特征等,从而提供更加精准的地理信息检索服务。例如,用户可以通过自…...
AI常见的算法
人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…...
借DeepSeek-R1东风,开启创业新机遇
DeepSeek-R1的崛起 DeepSeek-R1的推出引发了广泛关注,在AI领域引起了一阵旋风。作为新一代的智能模型,它在多项任务中表现出了卓越的能力。普通人可以借助这个强大的工具,开启属于自己的创业之路,抓住时代带来的机遇。 内容创作…...
知识库建设对提升团队协作与创新能力的影响分析
内容概要 在当今快速变革的商业环境中,知识库建设的重要性愈发凸显。它不仅是信息存储的载体,更是推动组织内部沟通与协作的基石。通过系统整理与管理企业知识,团队成员能够便捷地访问相关信息,使得协作过程更为流畅,…...
Mongodb 慢查询日志分析 - 1
Mongodb 慢查询日志分析 使用 mloginfo 处理过的日志会在控制台输出, 显示还是比较友好的. 但是如果内容较大, 就不方便查看了, 如果可以导入到 excel 就比较方便筛选/排序. 但是 mloginfo 并没有提供生成到 excel 的功能. 可以通过一个 python 脚本辅助生成: import pandas…...
fps一些内容添加
1 增强输入要点记录 输入 :输入值的类型 布尔 1d,2d,3d 映射:就是确定按键输入键位,输入类型,和一些触发器(按键方式)修改器(对输出值进行修改) 基本的&am…...
从单体应用到微服务的迁移过程
目录 1. 理解单体应用与微服务架构2. 微服务架构的优势3. 迁移的步骤步骤 1:评估当前单体应用步骤 2:确定服务边界步骤 3:逐步拆分单体应用步骤 4:微服务的基础设施和工具步骤 5:管理和优化微服务步骤 6:逐…...
计算机视觉-卷积
卷积-图像去噪 一、图像 二进制 灰度 彩色 1.1二进制图像 0 1 一个点可以用一个bit(0/1)来表示 1.2灰度图像 0-255 一个点可以用一个byte来表示 1.3彩色图像 RGB 表达一个彩色图像先说它的分辨率p/w(宽)和q/h(高…...
Sprintboot原理
配置优先级 Springboot中支持的三种配置文件: application.propertiesapplication.ymlapplication.yaml java系统属性:-Dxxxxxx 命令行参数:-xxxxxx 优先级:命令行参数>java系统属性>application.properties>applicat…...
2007-2020年各省国内专利申请授权量数据
2007-2020年各省国内专利申请授权量数据 1、时间:2007-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围:31省 5、指标解释:专利是专利权的简称&…...
SpringBoot或SpringAI对接DeekSeek大模型
今日除夕夜,deepseek可是出尽了风头,但是我看网上还没有这方面的内容对接,官网也并没有,故而本次对接是为了完成这个空缺 我看很多的博客内容是流式请求虽然返回时正常的,但是他并不是实时返回,而是全部响应…...
MV结构下设置Qt表格的代理
目录 预备知识 模型 关联 刷新 示例 代理 模型 界面 结果 完整资料见: 所谓MV结构,是“model-view”(模型-视图)的简称。也就是说,表格的数据保存在model中,而视图由view实现。在我前面的很多博客…...
C++:多继承习题2
题目内容: 分别声明Teacher类和Cadre类,采用多重继承派生出新类Teacher_Dadre。要求: (1)在两个基类中都包含姓名、年龄、性别、地址和电话。 (2)在Teacher类中包含title数据成员,Ca…...
DeepSeek--通向通用人工智能的深度探索者
一、词源与全称 “DeepSeek"由"Deep”(深度)与"Seek"(探索)组合而成,中文译名为"深度求索"。其全称为"深度求索人工智能基础技术研究有限公司",英文对应"De…...
Spring MVC中HandlerInterceptor和Filter的区别
目录 一、处理阶段 二、功能范围 三、参数访问 四、配置方式 五、使用场景说明 在Spring MVC中,HandlerInterceptor和Filter都是用于拦截请求的重要组件,但它们在多个方面存在显著的差异。本文将详细解析这两种拦截机制的区别,并结合使用…...
Linux 部署 Java 项目:Tomcat、Redis、MySQL 教程
在 Linux 服务器上部署 Java 项目通常需要配置应用服务器(如 Tomcat)、数据库(如 MySQL)和缓存服务器(如 Redis)。本文将详细介绍如何在 Linux 环境中部署一个 Java 项目,涵盖 Tomcat、Redis 和…...
C语言------数组从入门到精通
1.一维数组 目标:通过思维导图了解学习一维数组的核心知识点: 1.1定义 使用 类型名 数组名[数组长度]; 定义数组。 // 示例: int arr[5]; 1.2一维数组初始化 数组的初始化可以分为静态初始化和动态初始化两种方式。 它们的主要区别在于初始化的时机和内存分配的方…...
工作总结:git篇
文章目录 前言基础Gerrit1.克隆2.新建本地分支和checkout3.添加到暂存区新增文件到暂存区修改已经添加到暂存区的文件取消添加到暂存区的文件 4.提交到本地仓库在不重复提交的情况下,修改本次提交 5.提交到远程仓库6.评审其他辅助命令 前言 目前也算是工作一段时间…...
2024年终总结——今年是蜕变的一年
2024年终总结 摘要前因转折找工作工作的成长人生的意义 摘要 2024我从国企出来,兜兜转转还是去了北京,一边是工资低、感情受挫,一边是压力大、项目经历少,让我一度找不到自己梦寐以求的工作,我投了一家又一家ÿ…...
Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)
什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的…...
宫本茂的游戏设计思想:有趣与风格化
作为独立游戏开发者之一,看到任天堂宫本茂20年前的言论后,深感认同。 游戏研发思想,与企业战略是互为表里的,游戏是企业战略的具体战术体现,虚空理念的有形载体。 任天堂长盛不衰的关键就是靠简单有趣的游戏…...
[JMCTF 2021]UploadHub
题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …...
树和图的实现与应用:C语言实践详解
树和图的实现与应用:C语言实践详解 树和图是两种重要的非线性数据结构,在计算机科学中有着广泛的应用。从基本的二叉树到复杂的图算法(如最短路径和最小生成树),这些结构能够帮助我们高效解决实际问题。本文将从基础出发,逐步深入,讲解如何用C语言实现树和图,并探讨其…...
DeepSeek助力学术文献搜索!
搜集文献 宝子们如果是第一次发表学术论文,论文往往是会署名多个作者。在这种情况下,即便成功发表了论文,独立撰作或主导写作的挑战仍旧存在。那么,怎样才能独立地完成一篇属于自己的学术论文呢?对于初次尝试学术论文…...
新项目上传gitlab
Git global setup git config --global user.name “FUFANGYU” git config --global user.email “fyfucnic.cn” Create a new repository git clone gitgit.dev.arp.cn:casDs/sawrd.git cd sawrd touch README.md git add README.md git commit -m “add README” git push…...
t113 procd-init文件系统增加自己的程序文件
tina 默认为 procd-init ,可以通过Tina procd-init 与 busybox-init 切换 | 全志在线开发者论坛 默认的procd-init系统的文件夹在tina-sdk/target/allwinner/t113-round/base-files, 把文件或者文件夹放这里会在编译pack的时候打包到文件系统...
vue中的el是指什么
简介: 在Vue.js中,el指的是Vue实例的挂载元素。 具体来说,el是一个选项,用于指定Vue实例应该挂载到哪个DOM元素上。通过这个选项,Vue可以知道应该从哪个元素开始进行模板编译和渲染。它可以是一个CSS选择器字符串&…...
渗透测试之WAF规则触发绕过规则之规则库绕过方式
目录 Waf触发规则的绕过 特殊字符替换空格 实例 特殊字符拼接绕过waf Mysql 内置得方法 注释包含关键字 实例 Waf触发规则的绕过 特殊字符替换空格 用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格 这个方法也可以部分绕过最新版本的…...
前端【11】HTML+CSS+jQUery实战项目--实现一个简单的todolist
前端【8】HTMLCSSjavascript实战项目----实现一个简单的待办事项列表 (To-Do List)-CSDN博客 学过jQUery可以极大简化js代码的编写,基于之前实现的todolist小demo,了解如何使用 jQuery 来实现常见的动态交互功能。 修改后的js代码 关键点解析 动态添加…...
Vscode的AI插件 —— Cline
简介 vscode的一款AI辅助吃插件,主要用来辅助创建和编辑文件,探索大型项目,使用浏览器并执行终端命令(需要多个tokens),可以使用模型上下文协议(MCP)来创建新工具并扩展自己(比较慢…...
HTML表单深度解析:GET 和 POST 提交方法
系列文章目录 01-从零开始学 HTML:构建网页的基本框架与技巧 02-HTML常见文本标签解析:从基础到进阶的全面指南 03-HTML从入门到精通:链接与图像标签全解析 04-HTML 列表标签全解析:无序与有序列表的深度应用 05-HTML表格标签全面…...
CycleGAN模型解读(附源码+论文)
CycleGAN 论文链接:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks 官方链接:pytorch-CycleGAN-and-pix2pix 老规矩,先看看效果 总体流程 先简单过一遍流程,细节在代码里说。CycleGAN有…...
WebAssembly(Wasm)详解
WebAssembly 详解:开启 Web 应用的新纪元 引言 WebAssembly(简称 Wasm)是一种革命性的技术,它为 Web 应用带来了接近原生的性能,并支持使用多种编程语言进行开发。本文将深入探讨 WebAssembly 的方方面面,…...