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

从 0 到上线:Java 项目打包 Docker 镜像全流程实战

📖 摘要

本文是一份超详细的Java项目Docker化实战手册,从环境准备到最终上线,手把手带你完成整个容器化部署流程。你将学会:

  • Docker基础概念与核心原理
  • 如何为Java项目编写高效的Dockerfile
  • 多阶段构建优化镜像体积
  • 镜像推送与容器运行的最佳实践
  • 生产环境部署的注意事项

无论你是刚接触Docker的新手,还是想系统梳理容器化流程的开发者,这篇文章都能给你带来实实在在的帮助!

📚 目录

  1. 🔧 环境准备
  2. 📦 项目结构说明
  3. 🐳 Docker基础概念
  4. ✍️ 编写Dockerfile
  5. ⚙️ 多阶段构建优化
  6. 🏗️ 构建与运行镜像
  7. 🚢 推送镜像到仓库
  8. 🌐 生产环境部署
  9. 💡 总结与最佳实践

🔧 环境准备

1. 开发环境要求

  • JDK 8+ (推荐JDK 11/17 LTS版本)
  • Maven 3.6+ 或 Gradle 7+
  • Docker Desktop (Mac/Windows) 或 Docker Engine (Linux)
  • 推荐IDE: IntelliJ IDEA (社区版即可)

2. 安装Docker

不同操作系统的安装方式:

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 \gnupg \lsb-release# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 设置稳定版仓库
echo \"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io# 验证安装
sudo docker run hello-world

Mac/Windows:
直接下载Docker Desktop安装包:
https://www.docker.com/products/docker-desktop

3. 验证安装

docker --version
# 输出类似: Docker version 20.10.12, build e91ed57docker-compose --version
# 输出类似: docker-compose version 1.29.2, build 5becea4c

📦 项目结构说明

我们以一个典型的Spring Boot项目为例:

my-java-app/
├── src/
│   ├── main/
│   │   ├── java/com/example/demo/
│   │   │   ├── DemoApplication.java
│   │   │   └── controllers/
│   │   └── resources/
│   │       ├── application.properties
│   │       └── static/
│   └── test/
├── target/
│   ├── my-java-app-0.0.1-SNAPSHOT.jar
│   └── ...
├── pom.xml
└── Dockerfile

🐳 Docker基础概念

在开始之前,先了解几个核心概念:

  1. 镜像(Image): 只读模板,包含运行应用所需的所有内容
  2. 容器(Container): 镜像的运行实例
  3. Dockerfile: 构建镜像的指令文件
  4. Registry: 镜像仓库(如Docker Hub)

Docker的优势:

  • 🏗️ 一致的运行环境
  • ⚡ 快速部署和扩展
  • 📦 资源隔离
  • 🔄 易于版本管理和回滚

✍️ 编写Dockerfile

基础Dockerfile示例

# 第一阶段:构建
FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
# 利用缓存下载依赖
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests# 第二阶段:运行
FROM openjdk:11-jre-slim
WORKDIR /app
# 从构建阶段复制jar包
COPY --from=build /app/target/my-java-app-*.jar app.jar
# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

逐行解析

  1. FROM maven:3.8.4-openjdk-11 AS build
    使用Maven镜像作为构建阶段的基础镜像,并命名为"build"

  2. WORKDIR /app
    设置工作目录为/app

  3. COPY pom.xml .
    复制pom.xml到工作目录

  4. RUN mvn dependency:go-offline
    下载所有依赖项(利用Docker缓存层)

  5. COPY src ./src
    复制源代码

  6. RUN mvn package -DskipTests
    打包应用(跳过测试)

  7. FROM openjdk:11-jre-slim
    第二阶段使用更小的JRE镜像

  8. COPY --from=build /app/target/my-java-app-*.jar app.jar
    从构建阶段复制生成的jar包

  9. EXPOSE 8080
    声明容器暴露的端口

  10. ENTRYPOINT ["java", "-jar", "app.jar"]
    容器启动时执行的命令

⚙️ 多阶段构建优化

多阶段构建有三大优势:

  1. 减小镜像体积 - 最终镜像只包含运行时必要内容
  2. 提高安全性 - 构建工具不会出现在生产镜像中
  3. 更清晰的构建流程 - 分离构建和运行环境

进阶优化技巧

  1. 使用.dockerignore文件
    避免将不必要的文件复制到镜像中:

    .git
    .idea
    *.iml
    target/
    *.log
    *.tmp
    
  2. 选择合适的基础镜像

    • openjdk:11-jdk - 完整JDK(较大)
    • openjdk:11-jre - 仅运行时(较小)
    • openjdk:11-jre-slim - 更精简版本
    • openjdk:11-alpine - 基于Alpine Linux(最小)
  3. 层缓存优化
    将不常变化的指令放在前面,充分利用缓存:

    # 先复制pom.xml并下载依赖
    COPY pom.xml .
    RUN mvn dependency:go-offline# 然后复制源代码
    COPY src ./src
    

🏗️ 构建与运行镜像

1. 构建镜像

# -t 指定镜像名称和标签
# . 表示使用当前目录的Dockerfile
docker build -t my-java-app:1.0 .

构建过程输出示例:

[+] Building 45.3s (12/12) FINISHED=> [internal] load build definition from Dockerfile                       0.0s=> => transferring dockerfile: 37B                                        0.0s=> [internal] load .dockerignore                                          0.0s=> => transferring context: 35B                                           0.0s=> [internal] load metadata for docker.io/library/openjdk:11-jre-slim    1.5s=> [internal] load metadata for docker.io/library/maven:3.8.4-openjdk-11  1.5s=> [build 1/5] FROM docker.io/library/maven:3.8.4-openjdk-11@sha256:9c... 0.0s=> [internal] load build context                                          0.1s=> => transferring context: 3.01kB                                        0.0s=> CACHED [build 2/5] WORKDIR /app                                        0.0s=> [build 3/5] COPY pom.xml .                                             0.0s=> [build 4/5] RUN mvn dependency:go-offline                              20.1s=> [build 5/5] COPY src ./src                                             0.0s=> [build 6/5] RUN mvn package -DskipTests                               18.2s=> [stage-1 1/2] FROM docker.io/library/openjdk:11-jre-slim@sha256:9c... 0.0s=> [stage-1 2/2] COPY --from=build /app/target/my-java-app-*.jar app.jar  0.1s=> exporting to image                                                     0.1s=> => exporting layers                                                    0.1s=> => writing image sha256:7e9b6e5ba...                                   0.0s=> => naming to docker.io/library/my-java-app:1.0                         0.0s

2. 查看镜像

docker images# 输出示例
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
my-java-app    1.0       7e9b6e5ba123   2 minutes ago   215MB

3. 运行容器

# -d 后台运行
# -p 端口映射(主机端口:容器端口)
# --name 容器名称
docker run -d -p 8080:8080 --name my-app my-java-app:1.0

4. 查看运行状态

docker ps# 输出示例
CONTAINER ID   IMAGE             COMMAND               CREATED         STATUS         PORTS                    NAMES
a3b8d7e6f5g4   my-java-app:1.0   "java -jar app.jar"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->8080/tcp   my-app

5. 查看日志

docker logs -f my-app# 输出示例.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.6.3)

6. 停止和删除容器

# 停止容器
docker stop my-app# 删除容器
docker rm my-app# 删除镜像
docker rmi my-java-app:1.0

🚢 推送镜像到仓库

1. 登录Docker Hub

docker login -u your-username

2. 标记镜像

# 格式: docker tag local-image:tagname username/repository:tagname
docker tag my-java-app:1.0 your-username/my-java-app:1.0

3. 推送镜像

docker push your-username/my-java-app:1.0

4. 从仓库拉取运行

docker run -d -p 8080:8080 your-username/my-java-app:1.0

🌐 生产环境部署

1. 使用docker-compose

创建docker-compose.yml文件:

version: '3.8'services:app:image: your-username/my-java-app:1.0container_name: my-java-appports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=prodrestart: unless-stoppedvolumes:- ./logs:/app/logshealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]interval: 30stimeout: 10sretries: 3

启动服务:

docker-compose up -d

2. Kubernetes部署示例

创建deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:name: java-app
spec:replicas: 3selector:matchLabels:app: java-apptemplate:metadata:labels:app: java-appspec:containers:- name: java-appimage: your-username/my-java-app:1.0ports:- containerPort: 8080resources:requests:cpu: "500m"memory: "512Mi"limits:cpu: "1000m"memory: "1024Mi"livenessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 30periodSeconds: 10readinessProbe:httpGet:path: /actuator/healthport: 8080initialDelaySeconds: 20periodSeconds: 5

💡 总结与最佳实践

✅ 最佳实践总结

  1. 镜像优化

    • 使用多阶段构建减小镜像体积
    • 选择合适的基础镜像(Alpine/slim版本)
    • 定期更新基础镜像以获取安全补丁
  2. 构建优化

    • 合理利用层缓存(.dockerignore + 指令顺序)
    • 固定基础镜像版本(避免使用latest标签)
    • 在CI/CD中实现自动化构建
  3. 运行优化

    • 限制容器资源(cpu/memory)
    • 配置健康检查
    • 使用非root用户运行
    • 正确处理信号(如SIGTERM)
  4. 安全建议

    • 不要将敏感信息硬编码在镜像中(使用环境变量/secret)
    • 扫描镜像中的漏洞(使用docker scan)
    • 最小化容器权限(避免–privileged)

🛠️ 常见问题解决

Q: 构建时下载依赖很慢怎么办?
A: 配置Maven镜像仓库:

RUN mkdir -p /root/.m2 && \echo 'aliyunhttps://maven.aliyun.com/repository/publiccentral' > /root/.m2/settings.xml

Q: 容器启动后立即退出?
A: 可能原因:

  1. 应用启动失败 - 查看日志docker logs
  2. 没有前台进程 - 确保应用不是以daemon方式运行
  3. 端口冲突 - 检查端口映射

Q: 如何调试容器内的应用?
A: 进入运行中的容器:

docker exec -it  /bin/bash

或者直接附加到进程:

docker attach 

🎯 下一步学习建议

  1. 学习Docker网络和存储卷配置
  2. 掌握Docker Compose编排多容器应用
  3. 了解Kubernetes容器编排
  4. 探索CI/CD流水线与Docker集成
  5. 学习服务网格(如Istio)与容器化应用

通过本文的学习,你已经掌握了Java项目容器化的核心技能。Docker的世界还有很多值得探索的地方,继续实践,你将发现更多容器化带来的便利与效率提升!🚀

Happy Dockering! 🐳

相关文章:

从 0 到上线:Java 项目打包 Docker 镜像全流程实战

📖 摘要 本文是一份超详细的Java项目Docker化实战手册,从环境准备到最终上线,手把手带你完成整个容器化部署流程。你将学会: Docker基础概念与核心原理如何为Java项目编写高效的Dockerfile多阶段构建优化镜像体积镜像推送与容器…...

【符号引用和直接引用是什么?有什么作用?什么场景下使用?为什么符号引用和直接引用在常量池里?】

符号引用与直接引用详解 1. 符号引用(Symbolic Reference) 定义: 符号引用是编译阶段使用的抽象标识符,通过全限定名、方法签名等符号描述目标(如类、方法、字段)。它不涉及具体内存地址,仅作为…...

ESModule和CommonJS在Node中的区别

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部报错commonjs console.log(require);console.log(module);console.log(exports);co…...

阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~

简介 OmniTalker 是一个由 阿里巴巴集团 Tongyi Lab(通义实验室) 开发的研究项目,专注于实时文本驱动的说话头像生成技术。该项目旨在通过文本输入生成同步的语音和视频内容,同时保留参考视频中的音视频风格。以下是关于 OmniTalk…...

Kubernetes-如何进入某POD中

Kubernetes 如何进入某POD中 工作中需要进入pod中查询比如pod 网络等问题 步骤: 1、 查询某pod, 比如该pod 为namespace test 下的 ip 为 192.168.1.100 #查询namespace 列表 #kubectl get ns #查询该ns下ip 为 192.168.1.100的pod # kubectl -n test get pods …...

java导出postgis空间数据几何对象shapefile文件

项目开发中,需要java后端实现导出postgis空间数据几何对象shapefile文件,以便能直观查看数据详情。注意事项Shapefile 默认的几何字段名为 the_geom,若导出时未显式指定或字段名被修改,部分软件(如 ArcGIS、QGI&#x…...

蓝桥杯嵌入式按键长按双击

直接上代码这个代码里面我们简单实现了如果按键按下时间超过0.8秒K1的值增加,短按只增加一次,按键2长按K2值增加,按键3双击K1的值减1,按键4双击K2的值减1 #include "fun.h" #define long_press_time 800//定义长按时间…...

深入解析Java中的栈:从JVM原理到开发实践

一、栈的双重身份:JVM运行时数据区 vs 数据结构 1. JVM层面的栈 线程私有:每个线程独立拥有自己的栈 LIFO结构:后进先出的方法调用模型 栈帧存储:每个方法对应一个栈帧(Stack Frame) 2. 数据结构中的栈…...

408 计算机网络 知识点记忆(6)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容,系统梳理核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。(PS:后续将持续迭代优化细节) 往期内容 408 计算机网络 知识…...

从ETL到ELT:大数据时代下两者的选型建议及优势

随着大数据时代的到来,数据量呈爆炸式增长,数据类型日益复杂,ETL与ELT两种技术路径的抉择直接影响着数据处理效率。我们这次来深入解析下两种模式的本质差异与应用场景,为企业提供选型建议。 一、ETL架构的优势 ETL架构遵循“提…...

Java蓝桥杯习题一:for循环和字符串的应用

知道循环次数用for循环 练习题1 小明对数位中含有2.0.1.9的数字很感兴趣,在1到40中这样的数包含1.2.9.10至32.39.40,共28个,他们的和是574.请问,在1到2019中,所有这样的数的和是多少?(2019Jav…...

Windows 图形显示驱动开发-WDDM 2.0功能_分配用法跟踪

随着分配列表的消失,视频内存管理器 (VidMm) 不再能够查看特定命令缓冲区中引用的分配。 因此,VidMm 不再能够跟踪分配使用情况和处理相关同步。 此责任现在由用户模式驱动程序 (UMD) 承担。 具体而言,UMD 需要处理与直接 CPU 访问分配和重命…...

SpringMVC的请求-文件上传

文件上传客户端三要素 1. 表单项type“file” 2. 表单的提交方式是post 3. 表单的enctype属性是多部分表单形式&#xff0c;及enctype“multipart/form-data” <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <he…...

MySQL表的增删查改(基础)

一.插入数据 数据准备 create table student(id INT,sn INT comment 学号,name VARCHAR(20) comment 姓名,qq_mail VARCHAR(20) comment QQ邮箱 ); 1.单行数据全列插入 INSERT INTO student VALUES (100, 10000, 唐三藏, NULL); INSERT INTO student VALUES (101, 10001, …...

C++初阶-C++的讲解1

目录 1.缺省(sheng)参数 2.函数重载 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 3.5.指针和引用的关系 4.nullptr 5.总结 1.缺省(sheng)参数 &#xff08;1&#xff09;缺省参数是声明或定义是为函数的参数指定一个缺省值。在调用该函数是…...

【NLP 面经 9.逐层分解Transformer】

如果我能给你短暂的开心 —— 25.4.7 一、Transformer 整体结构 1.Tranformer的整体结构 Transformer 的整体结构&#xff0c;左图Encoder和右图Decoder&#xff0c;下图是Transformer用于中英文翻译的整体结构&#xff1a; 可以看到 Transformer 由 Encoder 和 Decoder 两个…...

Diffusion Policy Visuomotor Policy Learning via Action Diffusion官方项目解读(二)(5)

运行官方代码库中提供的Colab代码&#xff1a;vision-based environment&#xff08;二&#xff09;&#xff08;5&#xff09; Network十八、类SinusoidalPosEmb&#xff0c;继承自nn.Module十八.1 def __init__()十八.2 def forward()总体说明 十九、类Downsample1d&#xff…...

西门子S7-1200PLC 工艺指令PID_Temp进行控温

1.硬件需求&#xff1a; 西门子PLC&#xff1a;CPU 1215C DC/DC/DC PLC模块&#xff1a;SM 1231 TC模块 个人电脑&#xff1a;已安装TIA Portal V17软件 加热套&#xff1a;带加热电源线以及K型热电偶插头 固态继电器&#xff1a;恩爵 RT-SSK4A2032-08S-F 其他&#xff1…...

【深度学习:理论篇】--Pytorch进阶教程

目录 1.神经网络 1.1.torch.nn 核心模块 1.2.定义神经网络 1.3.损失函数 1.4.反向传播 1.5.梯度更新 2.图片分类器 2.1.数据加载 2.2.卷积神经网络 2.3.优化器和损失 2.4.训练网络 2.5.测试网络 2.6.GPU上训练 3.数据并行训练--多块GPU 3.1.导入和参数 3.2.构造…...

卷积神经网络(CNN)基础

目录 一、应用场景 二、卷积神经网络的结构 1. 输入层&#xff08;Input Layer&#xff09; 2. 卷积层&#xff08;Convolutional Layer&#xff09; 3. 池化层&#xff08;Pooling Layer&#xff09; 最大池化&#xff08;max_pooling&#xff09;或平均池化&#xff08;…...

第 28 场 蓝桥入门赛 JAVA 完整题解

前言 本文总结了六个编程题目的解题思路与核心考点&#xff0c;涵盖基础语法、逻辑分析、贪心算法、数学推导等知识点。每个题目均从问题本质出发&#xff0c;通过巧妙的算法设计或数学优化降低复杂度&#xff0c;展现了不同场景下的编程思维与解题技巧。以下为各题的详细考点解…...

Python 网络请求利器:requests 包详解与实战

诸神缄默不语-个人技术博文与视频目录 文章目录 一、前言二、安装方式三、基本使用1. 发起 GET 请求2. 发起 POST 请求 四、requests请求调用常用参数1. URL2. 数据data3. 请求头 headers4. 参数 params5. 超时时间 timeout6. 文件上传 file&#xff1a;上传纯文本文件流7. jso…...

聊透多线程编程-线程基础-1.进程、线程基础概念

目录 一、进程 二、线程 三、进程与线程的关系 四、进程与线程的比较 注&#xff1a;本文多张图片来源于网络&#xff0c;如有侵权&#xff0c;请联系删除 一、进程 1. 进程的定义 进程是指在系统中正在运行的一个应用程序的实例&#xff0c;是操作系统进行资源分配和调…...

Android:Android Studio右侧Gradle没有assembleRelease等选项

旧版as是“Do not build Gradle task list during Gradle sync” 操作这个选项。 参考这篇文章&#xff1a;Android Studio Gradle中没有Task任务&#xff0c;没有Assemble任务&#xff0c;不能方便导出aar包_gradle 没有task-CSDN博客 在as2024版本中&#xff0c;打开Setting…...

LeetcodeBST2JAVA

235.二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&…...

如何创建单独的城市活码?活码能永久使用吗?

如何创建单独的城市活码 创建单独的城市活码通常需要借助专业的第三方工具&#xff0c;以下是具体步骤&#xff1a; 1.选择合适的工具 推荐使用专业的活码生成工具。 2.注册并登录 访问官网&#xff0c;完成注册并登录。 3.创建活码 在首页点击“创建活码”按钮。输入活码…...

用户画像(https://github.com/memodb-io/memobase)应用

1.下载项目的源代码,我们要先启动后端,用docker启动 cd src/server cp .env.example .env cp ./api/config.yaml.example ./api/config.yaml 这里我的配置内容如下config.yaml(因为我是调用的符合openai格式的大模型,所以我没改,如果要是别的大模型的话,需要自己再做兼容…...

基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划|文献速递-深度学习医疗AI最新文献

Title 题目 Automated planning of mandible reconstruction with fibula free flap basedon shape completion and morphometric descriptors 基于形状补全和形态测量描述符的腓骨游离皮瓣下颌骨重建自动规划 01 文献速递介绍 因创伤、骨髓炎和肿瘤而接受下颌骨节段切除术…...

Python3笔记之号称替代pip的uv包管理器

uv是什么&#xff1f; uv&#xff0c;这是一个由 Astral 团队开发的极快速的Python包和项目管理工具&#xff0c;用Rust语言编写。它集成了多种功能&#xff0c;旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具&#xff0c;提供更高效、更全面的Py…...

面试如何应用大模型

在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...

贪心算法:部分背包问题深度解析

简介&#xff1a; 该Java代码基于贪心算法实现了分数背包问题的求解&#xff0c;核心通过单位价值降序排序和分阶段装入策略实现最优解。首先对Product数组执行双重循环冒泡排序&#xff0c;按wm(价值/重量比)从高到低重新排列物品&#xff1b;随后分两阶段装入&#xff1a;循环…...

Java程序的基本规则

java程序的基本规则 1.1 java程序的组成形式 Java程序是一种纯粹的面向对象的程序设计语言&#xff0c;因此Java程序 必须以类&#xff08;class&#xff09;的形式存在&#xff0c;类&#xff08;class&#xff09;是Java程序的最小程序 单位。Java程序不允许可执行性语句…...

机器学习-线性回归模型

机器学习-线性回归模型 线性模型笔记1、向量化2、线性回归模型公式3、损失函数&#xff08;代价函数&#xff09;4、梯度下降法5、Python 实现示例 6、使用 sklearn 实现线性回归模型✅ 基本步骤如下&#xff1a;&#x1f4e6; 示例代码&#xff1a; 7、numpy中的切片X[n,:]是取…...

Linux 入门指令(1)

&#xff08;1&#xff09;ls指令 ls -l可以缩写成 ll 同时一个ls可以加多个后缀 比如 ll -at (2)pwd指令 &#xff08;3&#xff09;cd指令 cd .是当前目录 &#xff08;4&#xff09;touch指令 &#xff08;5&#xff09;mkdir指令 &#xff08;6&#xff09;rmdir和rm…...

密码学基础——AES算法

目录 一、算法背景 AES算法与Rijndael算法 二、算法特点 1.安全性高 2.效率高 3.灵活性好 三、算法说明 3.1状态、种子密钥和轮数的概念 &#xff08;1&#xff09;状态&#xff08;State&#xff09; 定义 结构&#xff1a;通常状态是一个 4N 字节的矩阵&#xff0…...

淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发

要实现淘宝 API 与小程序深度联动&#xff0c;开发商品详情页 “一键转卖” 功能&#xff0c;可按以下步骤进行&#xff1a; 1. 前期准备 淘宝开放平台接入&#xff1a;在淘宝开放平台注册开发者账号&#xff0c;创建应用&#xff0c;获取 App Key 和 App Secret&#xff0c;…...

深入解析 C++ 设计模式:原理、实现与应用

一、引言 在 C 编程的广袤领域中&#xff0c;设计模式犹如闪耀的灯塔&#xff0c;为开发者指引着构建高效、可维护软件系统的方向。设计模式并非神秘莫测的代码魔法&#xff0c;实际上&#xff0c;我们在日常编程中或许早已与之打过交道。简单来说&#xff0c;设计模式常常借助…...

配置与管理代理服务器

安装squid Squid软件包在标准yum存储库中可用&#xff0c;因此&#xff0c;我们正在使用yum命令安装Squid代理。 [rootserver ~]# dnf install -y squid //安装 [rootserver ~]#systemctl enable --now squid.service [rootserver ~]#systemctl status squid.serv…...

RuntimeError: CUDA error: invalid device function

CUDA内核编译时的架构设置与当前GPU不兼容导致 -- The CUDA compiler identification is NVIDIA 11.5.119 &#xff08;实际为 12.6&#xff09; 解决方案&#xff1a; 1. 查看显卡计算能力 2. CMakeLists.txt 修改 set_target_properties(my_library PROPERTIESCUDA_AR…...

vulnhub:sunset decoy

靶机下载地址https://www.vulnhub.com/entry/sunset-decoy,505/ 渗透过程 简单信息收集 nmap 192.168.56.0/24 -Pn # 确定靶机ip&#xff1a;192.168.56.121 nmap 192.168.56.121 -A -T4 # 得到开放端口22,80 在80端口得到save.zip&#xff0c;需要密码解压。 john破解压缩…...

MySQL日期时间类型详解:DATE、TIME和DATETIME的用法与区别

在数据库设计中&#xff0c;正确处理日期和时间数据是至关重要的。MySQL提供了多种数据类型来存储时间信息&#xff0c;其中最常用的三种是DATE、TIME和DATETIME。本文将详细介绍这三种类型的特性、区别以及实际应用场景。 一、基本数据类型介绍 1. DATE类型 用途&#xff1…...

js异步机制

1、什么是异步机制&#xff1f;为什么js需要异步机制&#xff1f; 异步机制和同步机制是相对应的&#xff0c;异步是指&#xff1a;当代码按照顺序执行到一些比较耗时的操作&#xff0c;不会立刻执行&#xff0c;而是将这些操作推到一个队列中等待合适的时机从队列中取出任务执…...

Pycharm常用快捷键总结

主要是为了记录windows下的PyCharm的快捷键&#xff0c;里面的操作都试过了功能描述会增加备注。 文件操作 快捷键功能描述Ctrl N新建文件Ctrl Shift N根据名称查找文件Ctrl O打开文件Ctrl S保存当前文件Ctrl Shift S另存为Alt F12打开终端&#xff08;Terminal&…...

巧记英语四级单词 Unit2-下【晓艳老师版】

mit传递&#xff08;send 送&#xff09;、 superiority n.优势&#xff0c;优越性 超越别人的东西就是自己的优势govern v.统治 government政府 统治的机构administer v.管理&#xff0c;治理 minister 大臣 部长&#xff0c;mini-小人&#xff0c;一再的做大臣 部长&#xf…...

走进底层 - JVM工作原理入门指南

走进底层 - JVM工作原理入门指南 Java 之所以能够实现“一次编写&#xff0c;到处运行”&#xff08;Write Once, Run Anywhere, WORA&#xff09;&#xff0c;核心在于 Java 虚拟机&#xff08;JVM, Java Virtual Machine&#xff09;。JVM 是 Java 程序的运行环境&#xff0c…...

windows 10频繁通知A字“出现了问题,无法安装功能。”

一、故障突现 windows 10频繁通知A字“出现了问题&#xff0c;无法安装功能。” 编辑文档时发现黑体、楷体gb_2312等常用字体&#xff0c;在字体列表中失踪&#xff0c;原来设置好的字体也显示失效。 二、起因分析 回想了一下&#xff0c;是3月27日安装了 2025-适用于Windows…...

基础环境配置

1.GitGerritjenkins Linux 远程登录 | 菜鸟教程 https://zhuanlan.zhihu.com/p/22766058062 2.Samba 配置 3.软件安装 &#xff08;1&#xff09;MobaXterm &#xff08;2&#xff09;Vscode &#xff08;3&#xff09;Xmind &#xff08;4&#xff09; Audacity Aud…...

ROS2——foxy apt打包离线安装deb包

需要从A设备复制ROS2环境到B设备&#xff0c;且B设备有可能没网络&#xff0c;所以选择制作离线资源包 1. 本机安装指令 本机环境ubuntu20.04&#xff0c;安装ros2-foxy版本&#xff0c;直接输入以下指令&#xff0c;基本不会遇到问题 这里安装的是ros-base版本&#xff0c;不…...

大数据学习(104)-clickhouse与hdfs

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

大数据 - 1. 概述

早期的计算机&#xff08;上世纪70年代前&#xff09; 是相互独立的&#xff0c;各自处理各自的数据上世纪70年代后&#xff0c;出现了基于TCP/IP协议的小规模的计算机互联互通。上世纪90年代后&#xff0c;全球互联的互联网出现。当全球互联网逐步建成&#xff08;2000年左右&…...