【第10期】Docker 基础实战:镜像、容器、端口、卷和日志到底是什么
【第10期】小蓝伞的 Docker 基础实战镜像、容器、端口、卷、网络和日志一次讲透系列《从小白到 AI 大模型开发工程师的进阶之路》技术点AI-0010 Docker 基础主人公小蓝伞先说结论Docker 不是“把程序压缩成一个文件”而是用镜像描述运行环境用容器启动隔离进程用端口暴露服务用卷保存容器之外仍需保留的数据。掌握这四句话就能读懂大多数 Docker 入门命令。本文假设 Docker Desktop 已经可用。以下命令是学习示例请在自己的开发环境中执行并验证不要把示例输出当作已经在你的电脑上实测成功。一、镜像和容器到底差在哪概念正确理解常见误解镜像 image只读、分层的运行模板镜像本身就是正在运行的程序容器 container从镜像启动的运行实例删除容器也不会影响其中数据端口映射宿主机端口转发到容器端口容器端口会自动对外公开卷 volumeDocker 管理的持久化存储容器文件天然永久保存镜像像菜谱容器像按菜谱做出来的一盘菜端口是餐厅窗口卷是不会随盘子一起倒掉的仓库。小蓝伞提醒盘子可以重做仓库的数据不能靠运气保存。Docker 客户端把命令交给 Docker daemondaemon 负责拉取镜像、创建容器、配置网络和存储。理解这条链路后遇到问题就能区分是命令端、镜像、容器进程还是网络出了问题。二、最小实践运行一个 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-nginxdocker 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但重启策略不等于健康检查也不能替代监控和告警。六、五类高频故障端口被占用执行Get-NetTCPConnection -LocalPort 8080 -ErrorAction SilentlyContinue换宿主机端口或停止明确确认过的占用进程。容器名冲突docker ps -a找到旧容器确认数据已持久化后删除或使用新名称。容器秒退先看docker ps -a再看docker logs 容器名不要只看镜像是否下载成功。数据丢失检查是否使用卷或绑定挂载只依赖容器可写层不适合保存重要数据。镜像拉取失败检查网络、镜像标签和仓库权限不要把来路不明的镜像源写进团队配置。七、面试题1. 镜像和容器的关系镜像是只读模板容器是镜像启动后的实例同一镜像可以启动多个容器。2.-p 8080:80如何理解宿主机 8080 映射到容器 80容器应用仍监听 80外部访问宿主机 8080。3. 为什么需要卷容器生命周期短卷把数据放到独立存储中支持重建和升级后继续使用。4.docker stop与docker rm区别stop停止主进程rm删除容器元数据和可写层删除前必须确认数据已持久化。5. 容器内localhost指向哪里指向当前容器自身不等于宿主机或其他容器。八、本期小结Docker 的价值不在于让命令变多而在于明确“运行环境、服务生命周期、网络边界和数据归属”。下一期学习 WSL2 与 Docker Desktop解释 Windows、Linux 子系统和 Docker 引擎之间的边界。点个关注不迷路继续跟着小蓝伞把 AI 开发环境搭得既能跑、又可复现。工具让启动更快理解让系统更稳每一次认真验证都是从小白走向 AI 工程师的一小步。官方资料DockerWhat is a container?DockerVolumesDockerNetworking overviewDocker CLI reference

相关新闻