Docker镜像源管理器
Docker镜像源+UI管理界面
安装次数
点赞
应用评论
催更次数
桌面端
移动端

应用描述
Docker镜像源+UI管理界面,可以推送镜像到懒猫微服进行储存,并提供UI管理界面。
相关攻略

写给懒猫微服玩家的容器小书 Docker篇(一):《无法部署的诅咒》
> 一直想写一本容器小书,真好懒猫基本都做了容器化,所以把这部分分享出来。不同的是,懒猫微服中使用pg-docker来替代docker命令,使用dockge来执行docker-compose。以下讲解以标准docker为主,这样子既学会了docker知识,也能够在懒猫微服上启动Docker服务。 https://appstore.lazycat.cloud/#/shop/detail/in.zhaoj.dockerregistry # 《无法部署的诅咒》讲的是Docker 的起源与作用、镜像与容器概念、安装入门 ### 🏙️ 开篇:代码在电脑上运行良好,部署却频频翻车 小李是一名后端工程师,刚完成一个用 Flask 编写的内部管理系统。他信心满满地将代码提交,交给测试工程师老赵部署。 可没想到—— > “报错了!你是不是少传文件了?” > > “我这边 Python 是 3.6,怎么你这代码用了 `match case`?” > > “你数据库呢?你 Redis 配了?环境变量在哪?” 这一刻,小李陷入了一个叫「部署地狱」的世界。 这个世界里,每一台服务器都是独一无二的“宠物”,需要手动配置、手动部署、手动踩坑,稍有不慎就会陷入版本冲突、依赖缺失、环境不一致的深渊。 小李心里想:**有没有一种办法,能让我把代码和环境一起打包起来,无论在哪运行都能保持一致?** --- ### 🌀 变故:神秘的程序员大叔与魔法容器 在公司茶水间,小李邂逅了一个带着黑框眼镜的大叔,大家都叫他老周。 老周是个技术老炮,在各种部署大灾难中杀出血路。他听完小李的吐槽后,轻轻地推了一份文档过来,只写了五个字母: > `Docker` “这是个**魔法容器**,”老周说,“把你代码和环境都打包进去,哪怕放在火星,也能跑。” > “以后别再‘它在我电脑上可以跑’了,Docker 能让所有环境变得一致。” 小李的眼睛亮了。 --- ### 🔧 技术讲解 Part 1:什么是 Docker? Docker 是一个**开源的容器化平台**,它允许开发者将应用及其所有依赖打包成一个“容器”,保证在任何平台上都可以一致运行。 你可以把 Docker 想象成: > **程序员的打包箱子**:把你写的程序、环境、库、配置都放进去,打包成一个“镜像”; > > **程序员的快递服务**:运行镜像就像打开快递,内容和你寄出时一模一样。 #### 🚀 为什么要用 Docker? * ✅ **跨平台运行**:一次构建,到处运行(Run anywhere) * ✅ **快速部署**:秒级启动,适合 CI/CD * ✅ **环境一致性**:不再“你电脑能跑我电脑不行” * ✅ **轻量隔离**:不像虚拟机那么重,不需要整个操作系统 * ✅ **资源占用少**:用起来更像一个进程,而不是一台虚拟机 > ☑️ 一句话总结:**Docker 解决了“在我电脑上能跑”的问题。** --- ### 🛠️ 技术讲解 Part 2:如何安装 Docker? 老周拍了拍小李的肩膀,说:“先装起来,动手最重要。” #### 🧑💻 在 Mac / Windows 上: * 访问官网:[https://www.docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop) * 下载并安装 Docker Desktop * 安装后打开终端(Terminal),输入: ```bash docker --version ``` 如果看到 Docker 的版本信息,说明安装成功。 #### 🧑💻 在 Linux(Ubuntu)上: ```bash sudo apt update sudo apt install docker.io sudo systemctl start docker sudo systemctl enable docker ``` 🔐 *建议将当前用户加入 docker 组,以免每次都要用 sudo:* ```bash sudo usermod -aG docker $USER ``` --- ### 🧠 技术讲解 Part 3:Docker 的核心概念 | 概念 | 说明 | | ------------- | ------------------------------------------ | | 镜像(Image) | 应用和其依赖的静态快照模板(如:打包好的 Python 环境 + Flask 项目) | | 容器(Container) | 镜像运行出来的实例,是真正“活着”的程序 | | Dockerfile | 编写镜像的“配方”,定义如何构建镜像 | | Docker Hub | 类似 GitHub 的公共镜像仓库,可上传/下载别人做好的镜像 | | `docker` 命令 | Docker 的主命令工具,用于操作镜像、容器、网络、卷等 | #### 📌 镜像 vs 容器 * 镜像是“模具”,容器是“实物” * 镜像不可变,容器是可运行的环境 * 一个镜像可以运行多个容器 --- ### 🧪 技术实践:Hello Docker 世界 老周指导小李敲下第一行命令: ```bash docker run hello-world ``` > 如果docker run/pull 有问题,那么可以通过`lzc-cli appstore copy-image your-images`来使用懒猫的镜像仓库。 这个命令会做三件事: 1. 自动从 Docker Hub 拉取一个 `hello-world` 镜像(如果本地没有) 2. 基于镜像运行容器 3. 容器运行后输出信息,然后自动退出 这是验证 Docker 是否正常运行的“点灯测试”。 --- ### 🧱 小李的第一个真实容器:Flask Web 项目打包实战 老周笑着说:“现在,把你那个 Flask 管理系统也丢进 Docker 试试。” 小李在项目根目录下写了一个 Dockerfile: ```dockerfile # 使用 Python 官方基础镜像 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制项目文件 COPY . /app # 安装依赖 RUN pip install -r requirements.txt # 设置启动命令 CMD ["python", "main.py"] ``` #### 构建镜像: ```bash docker build -t my-flask-app . ``` #### 启动容器: ```bash docker run -p 5000:5000 my-flask-app ``` 现在访问浏览器 `http://localhost:5000`,你的项目上线了! --- ### 💡 小知识快闪 * Docker 容器内部不包含完整操作系统,只包含必要的运行库; * Dockerfile 的每一行都是一层(Layer),构建时会缓存复用; * `docker ps` 查看运行中容器,`docker images` 查看已有镜像; * 可以通过 `.dockerignore` 文件忽略不想加入镜像的文件,比如 `.git` 和日志。 --- ### ⚔️ 章节尾声:打破部署诅咒 这次,小李把打好的镜像发给了测试老赵: ```bash docker run -p 5000:5000 my-flask-app ``` 老赵只运行了一行命令,项目便神奇地跑了起来。 > “不改配置?不用装 Python?数据库也连上了?” > “你这是什么魔法!” 小李笑了笑,第一次感觉部署是件简单的事。 --- ## 🧭 第一章总结知识点: | 技术点 | 命令 | | ------------- | ------------------------------------------------- | | 安装 Docker | Mac/Win 下载 Docker Desktop / Ubuntu 安装 `docker.io` | | 查看版本 | `docker --version` | | 运行测试容器 | `docker run hello-world` | | 编写 Dockerfile | FROM / COPY / RUN / CMD | | 构建镜像 | `docker build -t name .` | | 运行容器 | `docker run -p 宿主:容器 镜像名` |

懒猫 OCI 镜像同步:把商店镜像、外部仓库、离线备份一次打包掌控
# 用 OCI 镜像同步 把懒猫镜像带回家 https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.liu.imagesync ## Why - 为什么需要 OCI 镜像同步? ### 它解决的痛点 - 懒猫应用商店的镜像无法直接通过 `docker pull` 获取,无法满足探索镜像、二次开发的需求。 - dive 等镜像层分析工具无法触达懒猫的私有镜像,开发者无法洞悉镜像内容与风险。 - 想基于懒猫镜像做定制或复刻,却缺少一个稳定的导出流程和可复用的基础镜像。 - 想要同步外部镜像到懒猫微服或个人私库时,缺少统一的图形化入口,流程零散且重复。 ### 对懒猫生态的价值 - 让开发者把镜像同步到本地或可信私有仓库,恢复透明度与掌控力。 - 支持快速构建生产镜像副本,自动化流程与安全审计不必每次都访问应用商店。 - 与懒猫的《Docker 镜像源管理器》搭配,实现镜像发现、同步、管理的闭环。 - 通过同一界面操作任意网络可达的容器镜像,实现懒猫与外部生态之间的镜像流转。 ## What - OCI 镜像同步是什么?底层依赖如何运作? ### 服务概览 - OCI Image Sync 运行在懒猫微服之上,为个人用户提供类 Linux 服务器的体验,全程通过图形化流程完成,无需命令行。 - 支持从懒猫应用商店或任何网络可达的镜像仓库同步到本地目录、懒猫自建仓库或外部 registry。 - 通过可视化配置表单与模板,实现备份、环境镜像与多仓协同的自动化与可重复。 ### Skopeo 的角色 - 工具内部依赖 [Skopeo](https://github.com/containers/skopeo),由 Containers 社区维护,可在无需 Docker 守护进程的情况下直接搬运镜像。 - Skopeo 负责校验 manifest、拉取 OCI 镜像层,并支持多种认证方式(Basic、Bearer)与传输协议。 - 它的无守护进程设计非常适合懒猫微服这类 NAS/Linux 设备,减少依赖与资源占用。 ### 与其它懒猫工具的关系 - OCI 镜像同步 专注镜像的提取与复制;《Docker 镜像源管理器》在此基础上提供仓库级的可视化管理。 https://appstore.lazycat.cloud/#/shop/detail/in.zhaoj.dockerregistry - 两者配合使用,个人用户无需企业级工具,即可在自用开发、家庭实验室测试与离线备份场景中重复利用懒猫镜像。 ## Who - 谁适合使用这套方案? ### 主要使用者 - **家庭实验室构建者**:把懒猫微服当作个人 Linux 服务器,需要简单的方式镜像或归档镜像文件。 - **独立创客**:基于懒猫应用做自定义或副项目,希望在自有硬件上获得可编辑的基础镜像。 - **自动化爱好者**:把懒猫镜像接入个人 CI/CD、安全扫描或 SBOM 流程,而无需依赖企业基础设施。 ### 前置条件 - 拥有访问懒猫应用商店镜像的账号或授权凭据。 - 具备目标仓库(Harbor、Docker Hub 镜像、企业私服等)的访问权限,或准备好本地文件系统存储。 - 理解需要同步的镜像命名约定与标签策略,以便在界面中快速准确填写表单。 ## When - 在哪些时刻执行镜像同步? ### 触发场景 - 基于懒猫镜像发布个性化版本或修复前,先把原镜像同步到可控环境。 - 应用商店更新上游镜像、希望下游环境保持一致时。 - 进行安全审计、使用 dive 分析内容、生成 SBOM 前的预处理步骤。 - 需要为离线、灾备环境提前准备镜像副本时。 - 希望把外部镜像搬入懒猫微服或个人私库,统一管理版本与访问权限时。 ### 运行节奏 - 将同步纳入每次依赖镜像变更时的发布清单。 - 在执行诊断或分析前,可随时发起一次临时同步获取最新层内容。 ## Where - 在哪里运行?数据存放在哪? ### 运行环境 - 直接在懒猫微服上执行,利用其内置的 Linux 环境与应用商店组件。 - 在应用商店中安装 OCI 镜像同步 服务即可,无需额外部署步骤。 -  ### 源与目标位置 https://appstore.lazycat.cloud/#/shop/detail/top.j0k3r.lpk-inspector - 源端:懒猫应用商店的镜像仓库,或任何网络可达的 OCI/镜像仓库(Docker Hub、GHCR、企业私服等)。 - 你可以通过 《懒猫应用查看器》了解应用使用的的镜像 -  - 目标:本地目录用于离线存储、懒猫本机的《Docker 镜像源管理器》,或 NAS 能访问到的外部 registry。 -  https://appstore.lazycat.cloud/#/shop/detail/in.zhaoj.dockerregistry ## How - 如何配置并操作 OCI 镜像同步? ### 架构流程 1. 在 Web 控制台新建同步任务或套用现有模板,填入源、目标、命名空间与标签规则。 - 基于前面获取到的信息,在 UI 上配置即可。 -  2. 开始同步后,系统后台调用 Skopeo 完成 manifest 校验与镜像层复制。 -  3. 控制台实时展示进度与日志,必要时可暂停、重试或调整参数。 4. 同步成功后,可直接在界面中跳转到《Docker 镜像源管理器》或复制目标仓库地址。 -  5. 基于同步后的镜像来做分析 - 通过成功后,镜像就在 《Docker 镜像源管理器》应用中,我们可以使用 dive 或 trivy 或其他工具来获取、分析该镜像。 -  ### 基础配置步骤 1. **准备凭据** - 获取懒猫应用商店的拉取凭据(默认为空)。 - 如果需要访问外部仓库,准备 Basic 认证信息。 2. **图形化填写配置** - 打开 OCI 镜像同步 控制台,输入源地址、目标地址、命名空间、标签过滤等参数。 - 按需开启 TLS 校验、并发控制和完整性验证,并可保存为模板以便后续复用。 - 在 高级选项 中可以将上述配置保存到后台,下次可以直接使用。 -  3. **预检查与验证** - 使用“查询可用架构”功能确认凭据有效、仓库可达。 -  - 出现异常时,界面会提示具体错误并提供排查建议。 4. **启动同步任务** - 单击“开始同步”,后台自动执行传输;仪表板展示每个仓库与标签的状态。 - 同步结束后可一键复制目标镜像地址或导出同步报告。 5. **验收与记录** - 对同步结果使用 dive 或其他工具进行层级审查。 - 更新依赖部署脚本或编排文件,指向新的镜像地址或仓库。 ### 常见问题排查 - **认证失败**:核对凭据是否过期、编码是否正确,必要时重新申请懒猫访问令牌。 - **证书错误**:目标仓库使用自签证书时,为 Skopeo 配置自定义 CA。 - **网络瓶颈**:拆分大规模任务或启用层缓存,避免重复传输。 - **标签冲突**:按环境添加后缀(如 `-lazycat`、时间戳)避免覆盖重要镜像。 ## How Much - 需要投入多少成本? ### 时间投入 - 首次整理凭据、熟悉界面、完成首个同步模板通常在一小时内。 - 后续复用模板与计划任务后,单次同步仅需数分钟。 ### 资源消耗 - 同步过程主要占用网络带宽,需关注大体积基础镜像的传输窗口。 - 存储压力随保留的镜像副本数量增长,可结合目标仓库的配额策略定期清理。 - CPU 占用较低,Skopeo 以流式方式传输数据,无需频繁解压。 ## 参考资料 - OCI 镜像同步 项目文档:https://github.com/lazycatapps/image-sync/blob/main/CLAUDE.md - Skopeo 官方仓库:https://github.com/containers/skopeo - dive 镜像探查工具:https://github.com/wagoodman/dive

懒猫微服进阶心得(十五):超越systemd,不用每次开机都再安装软件~
懒猫微服是分层文件系统,所以在之前的文章里前面我们使用用 `systemctl --user` 在开机时自动安装软件,解决重启丢包的问题。但说实话,每次开机都要跑一遍 `apt install`,当面对软件包过多以及网络延迟的问题的时候,使用dkpg会卡住,这不够优雅,所以才有了这个方案。 后来我换了个思路:既然懒猫微服天生就是为 Docker 而生的,为什么不直接用容器来跑这些工具呢? 想想看,htop、iotop、glances 这些运维神器,本质上就是读取 `/proc` 和 `/sys` 里的系统信息。只要让容器能访问宿主机的这些文件,不就能正常工作了吗? 这篇文章就来聊聊怎么用 Docker 容器跑系统监控工具。不用装软件,不怕重启丢失,一条命令就能用,用完自动清理。这让我们既享受了分层文件系统的优势,也不用再为软件持久化烦恼了。 > **关于镜像源**:本文使用了 `docker.1ms.run` 作为镜像加速站,仅作示例,不对镜像源的可用性负责。如果某个镜像拉取失败,可以换成其他镜像源,比如 `dockerpull.org`、`docker.xuanyuan.me` 等。 ### 进程监控类 #### htop - 经典进程查看器 我们习惯的使用方式是 `apt install htop`,但在懒猫微服的分层文件系统下重启后会丢失。所以我们可以用Docker来一键设置: https://appstore.lazycat.cloud/#/shop/detail/in.zhaoj.dockerregistry ```bash pg-docker run --rm -it --pid host docker.1ms.run/frapsoft/htop ``` 这条命令的作用是:启动一个包含 `htop` 工具的 Docker 容器,并以交互式方式查看宿主机的进程列表。容器停止后会自动删除。`htop` 是一个用于实时查看和管理系统进程的交互式工具。我们可以逐部分解析一下这条命令: 1. **`docker run`**: 这是 Docker 命令,用来启动一个新的容器并执行指定的命令。 2. **`--rm`**: 这个选项表示容器在停止后会被自动删除。这样可以避免容器停留在系统上,占用空间。 3. **`-it`**: - `-i` 表示让容器保持交互模式(interactive),即允许你输入命令。 - `-t` 表示分配一个伪终端(tty),让你可以以终端方式与容器交互。 4. **`--pid host`**: 这个选项使得容器能够访问宿主机的进程信息。正常情况下,容器只能看到自己内部的进程,但通过 `--pid host`,容器可以查看宿主机的所有进程,这样你就可以通过 `htop` 查看宿主机的进程。 5. **`frapsoft/htop`**: 这是一个 Docker 镜像的名称,它提供了一个包含 `htop` 工具的容器镜像。运行这个镜像会启动 `htop`,让你可以在容器中查看进程。 为了方便,还可以在 `.bashrc` 里加个 alias,这样就能像本地命令一样直接敲 `htop` 使用了。 ```bash echo "alias htop='pg-docker run --rm -it --pid host docker.1ms.run/frapsoft/htop'" >> ~/.bashrc source ~/.bashrc ```  在重启之后我们看到镜像没有丢失,还在本地存在,所以这个方式是可行的。 ```bash lzcbox-e66ccc4a ~ # pg-docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.1ms.run/library/alpine latest a40c03cbb81c 3 days ago 8.44MB docker.1ms.run/frapsoft/htop latest 4b76ab24430c 9 years ago 8.19MB ``` 如果你经常玩docker,那么除了--pid之外一定都不陌生。对于默认来讲,--pid 的参数是 private,所以我们常说每个容器有独立的进程命名空间,容器只能看到自己内部的进程。用了**`--pid host`** 之后,容器就可以共享宿主机的进程命名空间。这样,容器可以查看宿主机上的所有进程,而不仅仅是容器内部的进程。所以我们可以用它来做一些监控。甚至还有,**`--pid container:<container_id>`**:- 容器将能够看到并与指定容器的进程共享命名空间。通常在多容器间需要共享进程信息或调试时使用。例如,一个容器需要查看另一个容器的进程或进行故障排查。当然我们这里不做仔细展开。 > 关于 Docker 参数解释以及 alias、bashrc 的修改,这里只以 htop 为例,后面的工具不再赘述。 同理我们也可以测试其他工具。 #### glances - 全能系统监控 ```bash pg-docker run --rm -it --pid host --net host \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ docker.1ms.run/nicolargo/glances ```  glances 比 htop 更全面,是个「一屏看所有」的监控工具。CPU、内存、网络、磁盘、Docker 容器状态全都有。参数说明: - `--pid host`:读取宿主机进程信息 - `--net host`:读取宿主机网络信息 - `-v docker.sock`:让 glances 能监控 Docker 容器 #### btop - htop 的现代化替代 ```bash pg-docker run --rm -it --pid host terorie/btop ``` btop 界面更炫酷,功能也更丰富,支持鼠标操作。不过这个镜像比较冷门,`docker.1ms.run` 等加速站可能没缓存,所以这里直接用 Docker Hub 官方源。如果拉取慢,可以换成其他加速源试试。 #### ctop - Docker 容器专用监控 ```bash pg-docker run --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ quay.io/vektorlab/ctop ```  这个镜像来自 quay.io(Red Hat 的镜像仓库),国内访问通常比 Docker Hub 顺畅,可以直接拉取。ctop 专门用来监控 Docker 容器的资源占用。 不过要注意,ctop 默认连接 `/var/run/docker.sock`,这是系统 Docker 的 socket。如果你想监控 playground 里的容器,需要挂载 playground 的 socket: ```bash pg-docker run --rm -it \ -v /data/playground/docker.sock:/var/run/docker.sock:ro \ quay.io/vektorlab/ctop ```  #### netshoot - 网络排障瑞士军刀 ```bash pg-docker run --rm -it --net host --pid host --privileged docker.1ms.run/nicolaka/netshoot ```  netshoot 内置了 tcpdump、iftop、nmap、curl、dig 等一堆网络工具,临时排查问题特别方便。网络监控工具必须加 `--net host`,否则测的是容器网络而不是宿主机网络。  进入容器后,先用 `ip link` 查看网卡名。懒猫微服的主网卡通常是 `enp2s0` 而不是 `eth0`: ```bash # 进入容器后 ip link # 查看网卡列表 iftop -i enp2s0 # 监控主网卡流量 tcpdump -i enp2s0 # 抓包 ``` 注意:netshoot 里没有 nethogs,如果需要按进程查看流量,可以用 alpine 临时安装: ```bash pg-docker run --rm -it --net host --pid host --privileged alpine sh -c "apk add --no-cache nethogs && nethogs" ``` #### 工具选择指南 | 工具 | 特点 | 适用场景 | |------|------|----------| | htop | 轻量、经典 | 快速查看进程,日常使用 | | btop | 界面炫酷、支持鼠标 | 喜欢好看界面的用户 | | glances | 功能全面、一屏显示所有 | 需要综合监控的场景 | | ctop | 专注 Docker 容器 | 监控容器资源占用 | | netshoot | 网络工具箱 | 网络排障、抓包分析 | ### 理解 --pid host 的本质 `--pid host` 的本质是让容器挂载宿主机的 `/proc`,而不是容器自己隔离的那份。 容器内的监控工具之所以能工作,是因为 Linux 的系统信息都存在 `/proc` 虚拟文件系统里: | 文件 | 内容 | |------|------| | `/proc/cpuinfo` | CPU 信息 | | `/proc/meminfo` | 内存信息 | | `/proc/uptime` | 运行时间 | | `/proc/version` | 内核版本 | | `/proc/loadavg` | 系统负载 | | `/proc/<pid>/stat` | 进程状态 | 常见工具的数据来源: | 工具 | 读取的文件 | |------|-----------| | htop/top | `/proc/<pid>/stat`, `/proc/meminfo`, `/proc/loadavg` | | free | `/proc/meminfo` | | df | `/proc/mounts`, `/proc/diskstats` | | ps | `/proc/<pid>/status`, `/proc/<pid>/cmdline` | | netstat/ss | `/proc/net/tcp`, `/proc/net/udp` | | vmstat | `/proc/stat`, `/proc/vmstat` | | iostat | `/proc/diskstats` | 所以 `--pid host` 能让这些工具在容器里正常工作,因为它们本质上就是读文件,共享了 `/proc` 就等于共享了系统信息。 ### /proc vs /etc/os-release 有个细节需要注意:`/proc/version` 和 `/etc/os-release` 记录的是不同层面的信息。 `/proc/version` 是内核信息,由内核动态生成: ```bash cat /proc/version Linux version 6.16.6-x64v3-xanmod1 (root@runner-6areqvs9r-project-51590166-concurrent-0) (Debian clang version 19.1.7 (3), Debian LLD 19.1.7) #0~20250909.g439cb47 SMP PREEMPT_DYNAMIC Tue Sep 9 22:24:21 UTC ``` `/etc/os-release` 是发行版信息,是静态文件: ```bash cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 12 (bookworm)" NAME="Debian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" ``` 打个比方: - `/proc/version` = 引擎型号(Linux 6.16) - `/etc/os-release` = 车的品牌(Debian Linux) 同一个内核可以跑不同发行版,所以如果你想让容器里的工具显示正确的操作系统名称,需要手动挂载 `/etc/os-release`。 ### 进阶:自己打包docker工具 我们经常习惯使用,fastfetch 显示系统信息,但还是没有找到别人打包好的容器的版本。fastfetch 是 neofetch 的现代替代品,速度更快。 我们可以用使用alpine安装二进制包的方式来运行,也可以自定义Docker images来跑: 先看一个使用alpine安装的: ```bash pg-docker run --rm -it \ --pid host \ --net host \ -v /etc/os-release:/etc/os-release:ro \ -v /etc/hostname:/etc/hostname:ro \ docker.1ms.run/library/alpine sh -c "apk add --no-cache fastfetch && fastfetch" ``` 参数说明: - `--pid host`:让 fastfetch 读到宿主机的 CPU、内存、内核信息 - `-v /etc/os-release:/etc/os-release:ro`:让 fastfetch 读到正确的操作系统名称 - `-v /etc/hostname:/etc/hostname:ro`:让 fastfetch 读到正确的主机名  虽然不是很完美,但是已经可以读取到大多数的信息了, 再看一个自己打包的Docker版本。 ```dockerfile FROM alpine:latest RUN apk add --no-cache fastfetch CMD ["fastfetch"] ``` 构建并运行: ```bash pg-docker build -t my-fastfetch . pg-docker run --rm -it --pid host \ -v /etc/os-release:/etc/os-release:ro \ my-fastfetch ``` 同理我们也可以基于alpine构建基于任何软件的镜像工具,我这里再举一个例子,比如iotop。 ``` pg-docker run --rm -it --pid host --privileged docker.1ms.run/library/alpine sh -c "apk add --no-cache iotop && iotop -o" ```  ### 关于 /sys 文件系统 除了 `/proc`,Linux 还有 `/sys` 虚拟文件系统,存放硬件相关信息: ```bash # 读网卡 MAC 地址 pg-docker run --rm -it -v /sys:/sys:ro docker.1ms.run/library/alpine cat /sys/class/net/enp2s0/address # 列出所有网卡 pg-docker run --rm -it -v /sys:/sys:ro docker.1ms.run/library/alpine ls /sys/class/net/ # 读 CPU 温度 pg-docker run --rm -it -v /sys:/sys:ro docker.1ms.run/library/alpine cat /sys/class/thermal/thermal_zone0/temp # 读磁盘大小 pg-docker run --rm -it -v /sys:/sys:ro docker.1ms.run/library/alpine cat /sys/block/nvme0n1/size ``` ### 其他命名空间参数 除了 `--pid host`,Docker 还支持其他命名空间共享: ```bash # 共享网络命名空间 --net host # 共享 UTS 命名空间(主机名和域名) --uts host # 共享 IPC 命名空间(进程间通信) --ipc host # 共享指定容器的进程命名空间 --pid container:<container_id> ``` `--pid container:<container_id>` 在多容器调试时很有用,可以让一个容器看到另一个容器的进程。 #### 关于 --privileged 你可能注意到有些命令用了 `--privileged`,这个参数会让容器获得几乎所有的宿主机权限: - 访问所有设备(`/dev/*`) - 加载内核模块 - 修改系统配置 - 访问完整的 `/proc` 和 `/sys` 像 iotop、nethogs 这类需要深度访问内核信息的工具,没有 `--privileged` 可能跑不起来。但要注意,这个参数权限很大,只在信任的镜像上使用,用完记得 `--rm` 自动清理。 ### 总结 懒猫微服的分层文件系统固然好,但是常用软件会有丢失安装的问题,所以我们用容器来跑这些监控工具,容器镜像重启不会丢失,配置一个alias和bashrc就可以完美兼容这个feature。 容器里读取宿主机的参数有这三板斧: - 看进程用 `--pid host` - 看网络用 `--net host` - 看磁盘用 `--privileged` 记住这三个,大多数监控工具都能在容器里跑起来。我们只要维护bashrc里的alias就足够了。 回头看看,之前用 `systemctl --user` 开机自动装软件,虽然能用,但每次重启都要跑一遍 `apt install`,还会受限于软件体积和网络问题。现在换成 Docker 镜像,拉一次就永久缓存,重启秒开,彻底告别「开机等安装」的烦恼。 超越systemd,不用每次开机都再安装软件~
懒猫评分/评论
4.0
1 条评论
新功能
版本历史记录"第一个版本"
liu
9/29/2025
看上去不错,就是缺少使用文档。 链接的文档中也没提到这个镜像仓库的地址是什么,手动尝试后才知道实际需要往应用的 Domain 上推送,才会有显示。😆