Linux 与 Docker:运行配置、日志和持久化|课后复习
今天学会了什么
能从模块入口启动自己的商品导入器,验证环境配置、日志和退出码,并在 Linux/Docker 环境核对路径、依赖和持久化。
先标出你的数据库实际位于宿主机还是独立容器,再沿图解释浏览器到应用、应用到数据库的地址,不能照抄拓扑中的服务名。
今天讲了什么(对照复习)
下面逐项对应课堂正文。先盖住右边那一栏,凭记忆回答;卡住了再翻回左边同名的小节。光说得出名字不算会,还要能讲清它会做什么、什么时候会失效。
| 课堂对应章节 | 必须能解释的机制与边界 |
|---|---|
| 宿主机、虚拟机、终端、Shell 和进程;第一次登录先收集事实 | 宿主机运行系统,虚拟机提供独立系统环境;终端提供交互,Shell 解析命令,进程执行程序。先记录系统、用户、当前目录和工具版本,连接成功不等于项目成功。 |
| Linux 路径与大小写;权限位只讲项目所需深度;环境变量怎样影响命令 | 路径大小写敏感,工作目录影响相对路径;r/w/x 与所有者、组、其他用户决定访问。PATH 影响命令选择,项目变量影响配置;按实际所需修权限,不用全开放掩盖原因。 |
| 为什么不能复制 Windows .venv;根据声明重建依赖;ModuleNotFoundError 怎样定位 | venv 与平台、解释器绑定;在目标环境创建,再按依赖清单安装。先确认 python 与 pip 是否同环境,再核对安装位置、工作目录和导入路径,不复制旧 .venv 充当重建。 |
| 分层排障顺序;日志回答什么 | 从系统/目录到解释器/依赖、配置/端口、应用/数据库逐层定位。日志用 request_id 关联错误,不回显密码、会话令牌或敏感连接串;保留失败与修复后的实际输出。 |
| Docker 解决什么问题;Image、Container、Volume | 镜像是打包制品,容器是运行实例,Volume 保存需独立于实例的数据。打包运行环境不能自动解决业务事务、外部依赖和数据备份。 |
| Dockerfile 只是构建说明;构建上下文 | FROM/WORKDIR/COPY/RUN/CMD 描述构建和启动,RUN 在构建时执行,CMD 在运行时执行;先依赖后代码可复用构建缓存。.dockerignore 排除 .env、密钥、.venv、缓存和无关数据。 |
| 端口映射;环境变量;应用与 MySQL 的运行关系 | EXPOSE 不发布端口,进程监听与主机端口映射分别检查。容器 localhost 指向自己;连接宿主机数据库与连接同网络服务名是两种情况。配置运行时注入,真实密码不写镜像和 Git。 |
| healthcheck 应该检查什么;Docker 五段证据;先用最小部署建立运行边界 | Build、Run、Health、Log、持久化分别取证。running 不等于 healthy,health 不等于订单业务通过;重建只替换应用并保留数据库/卷,前后查询同一订单及库存。 |
出了问题:怎么发现、怎么修、怎么验证
只在你自己那份课程副本或专用实验数据上复验,把改之前和改之后的真实结果都留下来。
| 风险/现象 | 提前预防 | 怎样发现 | 怎样处理 | 怎样复验 |
|---|---|---|---|---|
| 跨环境导入失败或文件找不到 | 按固定版本重建 venv 并写工作目录 | 核对大小写、sys.executable 与实际依赖 | 修环境/路径,按清单补依赖 | 目标环境能从新终端启动并跑基础测试 |
| 权限错误靠全开放掩盖 | 明确执行用户与最小读写需求 | 查看目录、文件权限和运行用户 | 只修所需权限或数据位置 | 应用能操作实验数据,无需扩大无关权限 |
| 容器 localhost 或端口配置错 | 分别画监听、映射和数据库地址 | 核对容器日志、连接错误与主机访问 | 修监听地址、映射或宿主机/服务名配置 | health 和真实订单读取都通 |
| 配置或密钥被打包 | 敏感配置运行时注入并设置忽略 | 检查构建上下文和 diff,不输出秘密 | 移出镜像/Git,改安全示例文件 | 重建后按外部配置运行,日志无敏感值 |
| 重建丢数据或只看 running | 先定位数据库与卷,记录同一订单 | 比较重启/替换应用前后订单、金额、库存 | 保留数据存储,只替换应用实例 | 五段证据完整,原订单仍可查 |
本日新增 Python 知识怎样进入商城
模块/包、name/main、python -m、环境变量、依赖、logging、退出码和进程生命周期;保留 Linux/Docker/持久化。它们共同支持“商城运营工具与订单 API 的可重复启动”。我应能打开 runtime.py 指出每个机制的位置,并重跑 导入模块不执行写入;正常导出;缺配置与同路径拒绝;日志和退出码;重建应用后同订单可查询。
| 风险 | 提前预防 | 怎样发现 | 怎样处理 | 怎样复验 |
|---|---|---|---|---|
| 导入即写入或启动服务 | 业务动作放 main,入口保护 | 只 import 就出现副作用 | 移动顶层动作到入口 | import 无动作,-m 才执行 |
| 输入被截断或配置泄露 | 输入输出分开,日志最小字段 | 同路径失败或日志含连接信息 | 拒绝同路径,删敏感输出 | 原 CSV 哈希不变,日志只含数量/错误类型 |
闭卷自测
先自己答一遍,再去运行或翻回课堂核对;不确定的地方标出来,别用 AI 的答案顶掉你自己的第一次判断。
-
终端、Shell、进程、宿主机和容器分别是什么?如何确认自己现在操作的是哪一层?
-
Windows 的 .venv 为什么不能直接搬到 Linux?ModuleNotFoundError 应按什么顺序检查?
-
RUN、CMD、EXPOSE 与端口发布分别发生在什么时候、解决什么问题?
-
容器内 localhost 指向哪里?数据库在宿主机或另一容器时各应核对什么配置?
-
health 通过还缺哪类业务证据?怎样用同一笔订单证明重启和替换应用后数据仍保留?
-
为什么 import 模块不应自动执行导入?缺配置应返回什么退出码?日志应怎样说明失败且避免泄漏密钥?
再看一眼真实业务
把预习读到的运行条件/版本变化与自己的部署说明对照。公开商品页不能证明后台容器技术,跨环境可用性必须靠你的构建、启动和数据验证。
今天留下什么,下节课怎么接着用
同时保留本人运行入口、配置说明、正常导出与缺配置退出记录,下一日接入测试和 CI。
保留 Dockerfile、忽略文件、安全配置示例、固定依赖、拓扑、五段证据和一次配置故障闭环。W02-D05 将这些步骤写入可供同伴和 CI 执行的说明。
本机版本证据如实记录;未实跑的目标系统保持待验证。Kubernetes、镜像优化大全和生产发布不作为今天新增要求。
补充交接:D05 给本人模块补隔离测试,再交同伴与 CI 执行同一命令。本人 commerce_ops 每天增量合并,不用后一天骨架覆盖前一天实现。