Decorative image frame

MotherFaker的个人博客

随葫芦娃一起消散吧,旧日的幻影

MotherFaker的个人博客

docker学习笔记(一)

Docker 学习笔记

一、什么是 Docker?

Docker 是一个开源的应用容器引擎,可将应用及其依赖打包在一个可移植的容器中。它提供轻量级、可移植、自给自足的容器环境。

✅ 优点

  • 快速部署
  • 一致的运行环境
  • 占用资源少
  • 易于版本控制与回滚

二、核心概念

概念说明
镜像 Image应用和依赖的只读模板,类似 .exe 安装文件
容器 Container镜像运行时的实例,类似“打开 .exe 后运行的程序”
仓库 Repository镜像的存储位置,如 Docker Hub
Dockerfile定义镜像构建方式的脚本文件

三、容器 vs 虚拟机

比较项容器(Docker)虚拟机(Virtual Machine)
启动速度🚀 秒级启动🕒 启动慢,需完整引导系统
系统开销轻量,仅运行必要组件占用大,需完整操作系统
隔离方式共享宿主机内核、进程隔离完全隔离,拥有独立内核
镜像体积通常几十 MB常为几个 GB
应用场景微服务、CI/CD、快速部署多系统环境、强隔离、安全敏感场景

✅ Docker 更适合开发部署;VM 更适合高隔离或跨平台测试等场景。


四、常用命令整理

🔹 镜像管理

1
2
3
docker pull <镜像名>         # 下载镜像
docker images # 查看本地镜像
docker rmi <镜像名或ID> # 删除镜像

🔹 容器管理

1
2
3
4
5
docker ps -a                 # 查看所有容器(包括已停止)
docker stop <容器名或ID> # 停止容器
docker start <容器名或ID> # 启动已停止容器
docker restart <容器名或ID> # 重启容器
docker rm <容器名或ID> # 删除容器

🔹 容器交互与日志

1
2
3
docker exec -it <容器> bash        # 进入容器终端
docker logs <容器名> # 查看日志
docker logs -f <容器名> # 实时跟踪日志

🔹 网络管理

1
2
3
4
docker network ls                  # 查看所有网络
docker network create <网络名> # 创建网络
docker network inspect <网络名> # 查看网络详情
docker network rm <网络名> # 删除网络

🔹 数据卷管理(Volume)

为什么使用数据卷:

  • 实现容器内数据持久化
  • 跨容器共享数据
  • 提升 IO 性能(绕开容器文件系统)
1
2
3
4
docker volume ls                   # 查看所有数据卷
docker volume create <卷名> # 创建数据卷
docker volume inspect <卷名> # 查看卷详情
docker volume rm <卷名> # 删除数据卷

五、运行容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run 
-d # 后台运行容器
-it # 交互式运行并附带终端
--name <容器名> # 指定容器名称
-p <宿主端口>:<容器端口> # 端口映射(宿主机:容器)
-v <宿主路径>:<容器路径> # 数据卷挂载(宿主机路径:容器路径)
--rm # 容器退出后自动删除
--network <网络名> # 指定容器所属网络
-e <环境变量名>=<值> # 设置环境变量
--entrypoint <入口命令> # 自定义容器启动时的入口命令
--restart <策略> # 自动重启策略(no、always、unless-stopped、on-failure[:max-retries])
<镜像名>[:标签|@唯一标识符] # 镜像名称与版本(可选标签或摘要)
[容器启动后执行的命令] # 容器启动后要执行的命令(可选)
[命令的参数] # 命令的附加参数(可选)

六、挂载数据卷

1
2
3
docker run   
[--read-only] --mount type=volume[,source=<卷名>],target=<容器路径>[,volume-nocopy]
<镜像名>
  • 若未指定 source,Docker 将自动创建一个匿名卷。
  • 容器对 target 路径的读写将映射到挂载的卷中。

⚠️ 注意挂载时 target 目录的行为

如果挂载路径(target)在镜像中已存在且非空:

数据卷状态结果
数据卷非空数据卷内容将 覆盖 容器内 target 目录原有内容。
数据卷为空容器内 target 目录的初始内容将会被 复制到卷中

可通过 volume-nocopy 禁用复制行为

七、绑定挂载

绑定挂载 bind 允许将宿主机的指定目录绑定到容器内,实现数据共享或持久化。

与匿名/命名卷不同,绑定挂载使用的是宿主机已有路径。

1
2
3
docker run   
[--read-only] --mount type=bind,src=<宿主机路径>,target=<容器路径>
<镜像名>

八、临时文件系统挂载(tmpfs)

tmpfs 是一种挂载在内存中的临时文件系统,适用于存储不需要持久化的敏感或高频数据,如缓存、临时文件等。

容器停止后,tmpfs 中的数据会立即消失,不会写入宿主机磁盘。

优点:

  • 数据存储在内存中,访问速度快
  • 自动清除,无需清理残留数据
  • 不持久化,提高安全性

语法格式:

docker run
  --mount type=tmpfs,tmpfs-size=<大小>,target=<容器路径> \
  <镜像名>

3D数学学习笔记-矩阵(2)

1. 齐次坐标

  • 点:
    在三维空间中,点 (x,y,z)(x,y,z) 的齐次坐标表示为 (sx,sy,sz,s)(sx,sy,sz,s),其中 ss 是非零的缩放系数。通过将点转为齐次坐标,几何变换可以通过矩阵乘法统一处理。
  • 向量:
    向量 (x,y,z)(x,y,z) 的齐次坐标为 (x,y,z,0)(x,y,z,0)。由于向量表示方向而不携带位置信息,最后一位设置为 0,这也确保了向量在几何变换中不会受到平移的影响。

2. 变换矩阵

变换矩阵是一个用来表示几何变换(例如平移、旋转、缩放等)的矩阵。变换矩阵的逆矩阵能够抵消变换矩阵带来的影响,恢复对象到其原始状态。

在进行多个变换时,变换矩阵的顺序非常重要,需遵循 SRT 原则:即先进行缩放(S),然后进行旋转(R),最后进行平移(T)。变换的顺序不同会导致结果的显著变化。

2.1 平移矩阵

T=[100001000010txtytz1]T = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ t_x & t_y & t_z & 1 \end{bmatrix}

P×T=[pxpypz1]×[100001000010txtytz1]=[px+txpy+typz+tz1]P\times T = \begin{bmatrix} p_x & p_y & p_z & 1 \end{bmatrix}\times \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ t_x & t_y & t_z & 1 \end{bmatrix}=\begin{bmatrix} p_x + t_x & p_y +t_y & p_z + t_z & 1 \end{bmatrix}

2.2 旋转矩阵

  • xx 轴旋转

Rx(θ)=[10000cos(θ)sin(θ)00sin(θ)cos(θ)00001]R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos(\theta) & \sin(\theta) & 0 \\ 0 & -\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

  • yy 轴旋转

Ry(θ)=[cos(θ)0sin(θ)00100sin(θ)0cos(θ)00001]R_y(\theta) = \begin{bmatrix} \cos(\theta) & 0 & -\sin(\theta) & 0 \\ 0 & 1 & 0 & 0 \\ \sin(\theta) & 0 & \cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

  • zz 轴旋转

Rz(θ)=[cos(θ)sin(θ)00sin(θ)cos(θ)0000100001]R_z(\theta) = \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 & 0 \\ -\sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

旋转矩阵是正交的,旋转矩阵的逆矩阵是其转置矩阵。

2.3 缩放矩阵

S=[sx0000sy0000sz00001]S = \begin{bmatrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

sx=sy=szs_x=s_y=s_z 时为均匀缩放,此缩放不会改变对象的形状。

3D数学学习笔记-矩阵(1)

1. 基本概念

矩阵(Matrix)是一个按照行和列排列的矩形数组。一个拥有 m 行 n 列的矩阵被称为 m×nm\times n 矩阵 MMMijM_{ij} 表示矩阵中第 i 行第 j 列的元素。

M=[M11M12M1nM21M22M2nMm1Mm2Mmn]M = \begin{bmatrix} M_{11} & M_{12} & \cdots & M_{1n} \\ M_{21} & M_{22} & \cdots & M_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ M_{m1} & M_{m2} & \cdots & M_{mn} \end{bmatrix}

阅读更多...

设计模式学习笔记-策略模式

策略模式是一种行为设计模式,它允许我们在运行时选择特定的算法或行为,而无需对客户端代码进行修改。这对于那些需要根据不同条件(如客户类型)执行不同逻辑的场景尤其有用。通过策略模式,可以有效避免大量的if-else或switch-case判断,使代码更具可读性、可扩展性和维护性。

阅读更多...