2026-04-15 学习服务器随笔

SSH是什么?

SSH = Secure Shell(安全外壳)

  • 本质: 一种网络协议
  • 用途: 在不安全的网络环境中安全地访问远程计算机
  • 类比: 就像给你的网络连接装了一个"加密隧道"

SSH的三大安全机制

1. 数据加密传输
2. 身份认证

方式一:密码认证(基础) 方式二:公钥认证(更安全,推荐)

3. 数据完整性保护

安全对比表

协议 数据加密 身份认证 完整性保护 安全性
Telnet ❌ 明文 密码(明文)
FTP ❌ 明文 用户名密码(明文)
SSH ✅ 加密 密码/公钥 ✅ MAC ⭐⭐⭐⭐⭐

为什么经常和HTTP/HTTPS一起提?

SSH、HTTP、HTTPS 都是网络传输协议,但它们的安全级别和使用场景不同。

核心原因:它们都是"传输协议",但用途不同

详细对比

特性 HTTP HTTPS SSH
全称 HyperText Transfer Protocol HTTP Secure Secure Shell
用途 网页浏览 安全网页浏览 远程登录/文件传输
端口 80 443 22
加密 ✅ (SSL/TLS) ✅ (SSH协议)
典型场景 访问普通网站 网上银行、登录 服务器管理、Git
用户感知 浏览器地址栏 浏览器显示锁图标 命令行工具

构建镜像 (打包你的系统) docker build -t xxx . 构建; 也可以使用 docker compose build - 构建 docker compose 文件。有什么区别吗?

特性 docker build docker compose build
作用范围 单个镜像 多个服务(根据 compose 文件)
配置来源 Dockerfile docker-compose.yml + Dockerfile
使用场景 构建单一应用镜像 构建多容器应用的所有镜像
底层原理 直接调用 Docker 引擎 内部调用 docker build
灵活性 高(可指定任意参数) 中(受 compose 文件约束)

能不能不使用Dockerfile,直接用docker build?

答案:不能! docker build 必须要有构建指令

服务器三种部署方式的比较

服务器是有一个docker,docker里面装了nginx和java服务镜像,每一个前端代码,都是本地打包之后直接把dist包放到服务器上的docker的nginx下面,Java服务每次也是本地打包之后直接把jar包放到服务器的docker的Java服务下面,服务器重启之后,不会重新run上一个版本的镜像了,因为nginx镜像只是用来启动前端服务的,但是Java服务为什么不会run docker里面的镜像?

维度 混合方式 完整Docker部署
镜像内容 只有Java环境(openjdk) 包含应用代码(jar包)
jar包位置 宿主机 ./app/ 目录 镜像内部 /app/ 目录
重启行为 运行宿主机最新jar包 运行镜像中打包的jar包
版本管理 通过宿主机文件管理 通过镜像标签管理
回滚方式 替换宿主机jar包 切换镜像标签
存储占用 小(只存基础镜像) 大(每个版本一个镜像)
部署速度 快(秒级) 慢(分钟级)
环境一致性 依赖宿主机环境 完全一致

传统部署 没有docker,直接把前端、后端放到服务器上

完整Docker部署 是在服务器上部署一个docker,每次都把前后端都打包构建镜像,然后在服务器上拉取镜像,更新

混合方式 是在服务器上部署一个docker,在docker中部署nginx,每次把前端打包替换nginx中的文件,然后构建一个基础的Java8镜像,通过卷挂载的方式,每次将后端的代码打包替换app中的Jar包,然后容器就会更新,这样即使服务器重启,也不会导致镜像运行的容器变成了旧版本的容器。

维度 方式1:传统部署 方式2:完整Docker部署 方式3:混合方式
部署位置 服务器文件系统 新容器(基于新镜像) 运行中的容器内部
部署速度 快(秒级) 慢(分钟级) 最快(秒级)
学习成本
资源占用 多(镜像存储)
环境一致性 最好
版本管理 困难 容易(镜像标签) 困难
回滚能力 困难 容易 困难
容器重启 不适用 内容一致 可能丢失修改
符合Docker哲学 不适用
适合场景 小项目、稳定环境 生产环境、微服务 开发/测试环境

混合方式(使用volumes):

宿主机: ./app/app.jar

容器: /usr/local/app/app.jar (挂载自宿主机)

docker restart container

容器重启后,

/usr/local/app/app.jar 仍然是宿主机的文件

修改不会丢失!

混合方式:

修改代码 → 打包jar → 替换宿主机jar → 重启容器

耗时:10-30秒

镜像:openjdk:8u111-jre

这个镜像永远不会改变(官方基础镜像)

只需要替换宿主机的jar包,镜像不需要更新

总结

1、这个ssh和https一样是一个协议,只不过https是ssl/tls加密,SSH 是SSH协议);更安全了;

2、docker build -t xxx . 构建;与docker compose build - 构建 docker compose 文件区别就是docker build -t xxx . 适合单个服务构建;docker compose build 适合构建多个服务;

3、在一个新项目,没有存在的容器,没有现有镜像的情况下,必须要先docker build -t xxx . 或者docker compose build 构建镜像,然后docker build构建的时候,必须有Dockerfile;

4、只有一个免费docker账号,只能创建1个私有仓库,但是又不想让我的其他仓库变成公开的,所以要用完整Docker部署的方式,要么使用自建私有镜像仓库,要么使用其他免费私有仓库 ,比如阿里云、腾讯云、华为云,要么就是采用这种混合的方式,最方便并且不用付费。

相关推荐
zjneymar2 小时前
苍穹外卖中一些知识点和问题
java·linux·服务器
发发就是发2 小时前
资源管理:I/O端口与内存映射
linux·服务器·驱动开发·单片机·嵌入式硬件·fpga开发
坤坤藤椒牛肉面2 小时前
linux中断:顶半部与底半部
linux·运维·服务器
米饭不加菜2 小时前
PLC编程基础知识
运维·服务器
末日汐2 小时前
网络层IP
服务器·网络·tcp/ip
Soari2 小时前
Ziggo-Device软件构建(On device)教程
运维·服务器·bash·tsn 交换机
爱喝水的鱼丶3 小时前
SAP-ABAP: 深入浅出 SAP 经典可执行程序:从零开始掌握
运维·服务器·数据库·sap·abap·开发交流
星辰_mya3 小时前
进程状态转换
linux·运维·服务器
凯强同学3 小时前
不上班,想裸辞,可以不可以?
服务器·前端·javascript