news 2026/8/26 18:38:06

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【第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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 18:31:53

GDB 调试手册

程序崩溃或行为异常时,GDB 能把你直接送到出错的那一行。本手册按真实排查流程组织:从可调试构建、复现崩溃,到读栈、查内存,再用断点与观察点逼出逻辑错误。 关键词:bt 看崩溃栈 watch 抓变量改写者 core 事后验尸 …

作者头像 李华
网站建设 2026/8/26 18:31:06

全文 - Isaac ROS 06 - Getting Started

页面 27:Isaac ROS Freespace Segmentation — 自由空间分割 原文:https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_freespace_segmentation/index.html 概述 Isaac ROS Freespace Segmentation 包含一个用于生成导航占用栅格的…

作者头像 李华
网站建设 2026/8/26 18:28:36

串口收发数据包

1.HEX数据包2.数据包作用:把一个个单独的数据给打包起来,方便进行多字节数据通信3.数据和包头包尾重复解决方法1.限制载荷数据范围,在发送时对数据进行限幅2.无法避免重复,尽量使用固定长度数据包3.增加包头包尾数量,并…

作者头像 李华
网站建设 2026/8/26 18:26:01

2026 年 AI Agent 框架横评:10 大框架优缺点对比 + 选型指南

本文由 GO FUNNY 出品。专注 AI Agent 协作方法论与开源工具深度解读。你想搭一个 AI agent,打开 GitHub 搜「agent framework」,按 star 排序,点进第一名,照着 quickstart 敲完,跑通了一个 demo——觉得这事稳了。然后…

作者头像 李华