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

【第10期】Docker 基础实战:镜像、容器、端口、卷和日志到底是什么

【第10期】小蓝伞的 Docker 基础实战:镜像、容器、端口、卷、网络和日志一次讲透

系列:《从小白到 AI 大模型开发工程师的进阶之路》
技术点:AI-0010 Docker 基础
主人公:小蓝伞

先说结论

Docker 不是“把程序压缩成一个文件”,而是用镜像描述运行环境,用容器启动隔离进程,用端口暴露服务,用卷保存容器之外仍需保留的数据。掌握这四句话,就能读懂大多数 Docker 入门命令。

本文假设 Docker Desktop 已经可用。以下命令是学习示例,请在自己的开发环境中执行并验证;不要把示例输出当作已经在你的电脑上实测成功。

一、镜像和容器到底差在哪

概念正确理解常见误解
镜像 image只读、分层的运行模板镜像本身就是正在运行的程序
容器 container从镜像启动的运行实例删除容器也不会影响其中数据
端口映射宿主机端口转发到容器端口容器端口会自动对外公开
卷 volumeDocker 管理的持久化存储容器文件天然永久保存

镜像像菜谱,容器像按菜谱做出来的一盘菜;端口是餐厅窗口,卷是不会随盘子一起倒掉的仓库。小蓝伞提醒:盘子可以重做,仓库的数据不能靠运气保存。

Docker 客户端把命令交给 Docker daemon;daemon 负责拉取镜像、创建容器、配置网络和存储。理解这条链路后,遇到问题就能区分是命令端、镜像、容器进程还是网络出了问题。

二、最小实践:运行一个 Nginx 服务

docker version docker pull nginx docker image ls docker run --name hello-nginx -d -p 8080:80 nginx docker ps docker port hello-nginx Invoke-WebRequest http://localhost:8080 -UseBasicParsing | Select-Object -ExpandProperty StatusCode

-d表示后台运行,--name固定容器名,-p 8080:80表示把宿主机 8080 转发到容器内监听的 80。若最后返回200,才说明服务进程、端口映射和 HTTP 访问三者都已打通。

为什么不只看docker ps?容器在运行只能证明主进程没有退出,并不能证明应用端口可访问。为什么不只在浏览器看页面?浏览器缓存、代理和跳转也可能干扰判断。命令行状态码是更可重复的验证方式。

三、容器生命周期:先查状态,再查日志

docker ps docker ps -a docker logs --tail 100 hello-nginx docker inspect hello-nginx docker stop hello-nginx docker start hello-nginx docker restart hello-nginx

docker ps只显示运行中容器,已退出容器要用docker ps -a找。服务访问失败时,按“容器是否存在 → 是否运行 → 日志是否报错 → 端口是否映射 → 应用是否监听”的顺序排查,远比重装 Docker 更有效。

进入容器应主要用于检查:

docker exec -it hello-nginx sh cat /etc/os-release exit

不建议把手工改容器内部文件当作部署方案。容器重建后,修改通常会消失;可重复的改动应写进 Dockerfile,需保留的数据应写进卷。

四、卷:容器删了,数据还能不能在

下面用 Nginx 首页验证命名卷的持久化。请先确保 8081 未被占用。

docker volume create nginx-html docker run --name nginx-volume -d -p 8081:80 -v nginx-html:/usr/share/nginx/html nginx docker exec nginx-volume sh -c 'echo "hello from volume" > /usr/share/nginx/html/index.html' Invoke-WebRequest http://localhost:8081 -UseBasicParsing | Select-Object -ExpandProperty Content docker rm -f nginx-volume docker run --name nginx-volume-2 -d -p 8081:80 -v nginx-html:/usr/share/nginx/html nginx Invoke-WebRequest http://localhost:8081 -UseBasicParsing | Select-Object -ExpandProperty Content

第二个容器仍能看到页面,才证明数据放进了卷,而不是容器可写层。卷适合数据库、向量索引和模型缓存;临时数据是否持久化,要按恢复要求决定。docker volume rm nginx-html是不可逆清理动作,删除前先确认不含重要数据。

命名卷与绑定挂载怎么选

命名卷由 Docker 管理,跨环境迁移更明确,适合服务数据;绑定挂载把宿主机目录映射进去,适合本地开发时把代码实时提供给容器。Windows 路径挂载尤其需要验证权限和共享设置,不能照搬 Linux 路径。

五、网络、日志与重启策略

默认 bridge 网络允许容器联网,但容器里的localhost指向容器自己,不是宿主机,也不是另一个容器。多个服务协作时,应创建自定义网络,用容器名作为服务地址:

docker network create ai-demo-net docker run --name demo-nginx --network ai-demo-net -d nginx docker network inspect ai-demo-net docker logs --tail 100 demo-nginx

服务日志优先输出到标准输出和标准错误,docker logs才能成为第一排查入口。长期服务可考虑--restart unless-stopped,但重启策略不等于健康检查,也不能替代监控和告警。

六、五类高频故障

  1. 端口被占用:执行Get-NetTCPConnection -LocalPort 8080 -ErrorAction SilentlyContinue,换宿主机端口或停止明确确认过的占用进程。
  2. 容器名冲突docker ps -a找到旧容器;确认数据已持久化后删除,或使用新名称。
  3. 容器秒退:先看docker ps -a,再看docker logs 容器名,不要只看镜像是否下载成功。
  4. 数据丢失:检查是否使用卷或绑定挂载;只依赖容器可写层不适合保存重要数据。
  5. 镜像拉取失败:检查网络、镜像标签和仓库权限;不要把来路不明的镜像源写进团队配置。

七、面试题

1. 镜像和容器的关系?镜像是只读模板,容器是镜像启动后的实例;同一镜像可以启动多个容器。

2.-p 8080:80如何理解?宿主机 8080 映射到容器 80;容器应用仍监听 80,外部访问宿主机 8080。

3. 为什么需要卷?容器生命周期短,卷把数据放到独立存储中,支持重建和升级后继续使用。

4.docker stopdocker rm区别?stop停止主进程,rm删除容器元数据和可写层;删除前必须确认数据已持久化。

5. 容器内localhost指向哪里?指向当前容器自身,不等于宿主机或其他容器。

八、本期小结

Docker 的价值不在于让命令变多,而在于明确“运行环境、服务生命周期、网络边界和数据归属”。下一期学习 WSL2 与 Docker Desktop,解释 Windows、Linux 子系统和 Docker 引擎之间的边界。

点个关注不迷路,继续跟着小蓝伞把 AI 开发环境搭得既能跑、又可复现。工具让启动更快,理解让系统更稳;每一次认真验证,都是从小白走向 AI 工程师的一小步。

官方资料

  • Docker:What is a container?
  • Docker:Volumes
  • Docker:Networking overview
  • Docker CLI reference
http://www.cnnetsun.cn/news/4227805.html

相关文章:

  • GDB 调试手册
  • 全文 - Isaac ROS 06 - Getting Started
  • 上线千舟报修云前后,贵州中建秀印高速公路有限公司后勤工作发生了什么?
  • 串口收发数据包
  • 2026 年 AI Agent 框架横评:10 大框架优缺点对比 + 选型指南
  • 具身智能之通用机器人RoboCat详解:一个能用少量示范快速学会新任务和新机器人的自我改进智能体
  • 电机模块注意事项
  • 随机前沿SFA结果解读:技术效率分布与前沿面估计
  • 2026年佛山桂城少儿美术培训机构哪家好
  • 前端:全景深度分析/前端岗位起源,以及“美国没有前端岗位”的真相
  • IMX6ULL MfgTool软件烧写系统
  • .NET 软件开发平台
  • Go命令工具全解:go build/run/test/fmt/mod
  • 二叉树的基本操作详解
  • 【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader
  • 具身智能中融合TVA时空特征的VLA模型
  • 具身智能TVA-VLA分层规划提升长时序任务成功率
  • 面向具身智能的TVA-VLA增量学习防遗忘机制
  • 中国技术大败局TBL-20260809-048深度解剖报告V2.1 决策迭代版
  • 物理机异常重启怎么排查?定位根因,避免故障反复
  • can总线相关
  • 抖助手第066个开关:隐藏全屏观看的位置、验证方法与入口边界
  • Dify实战-人工输入节点-AI起草人工审批的工作流怎么做
  • 【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_114.[第12章 RAG评估体系] 生成评估:BLEU、ROUGE和BERTScore
  • 第10篇-通道架构与Telegram配置
  • Winform/Sunny.UI的DataGridView数据展示、uiPagination分页
  • 转:怎样招到优秀的核心人才
  • 【中国方言题库|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
  • Raid卡命名及代表含义
  • C++进阶知识5.0