揭阳市网站开发,百度软件市场,瑞安市建设工程质量监督站网站,企业网站必须做可信认证吗文章目录Docker 新手崩了#xff01;镜像删不掉、版本不一致、构建总失败#xff1f;一篇讲透全流程操作Docker 镜像操作的 6 大高频痛点Docker 镜像的核心逻辑01、镜像标签不是 “可有可无”#xff0c;latest是最大的坑02、镜像体积的 “视觉差”#xff0c;不是 Docker …文章目录Docker 新手崩了镜像删不掉、版本不一致、构建总失败一篇讲透全流程操作Docker 镜像操作的 6 大高频痛点Docker 镜像的核心逻辑01、镜像标签不是 “可有可无”latest是最大的坑02、镜像体积的 “视觉差”不是 Docker 出了错03、删除镜像的 “两步走”Untagged ≠ DeletedDocker 镜像的核心操作(一) 基础管理镜像的获取、查看、删除、导入导出1、获取镜像docker pull告别latest指定版本是关键02、查看镜像不止docker image ls这些命令才是实用派03、删除镜像docker image rm先清容器再删镜像04、导入导出save/load离线环境镜像共享的唯一方式(二) 镜像构建两种方式Dockerfile 是核心Commit 仅临时使用05、Commit 构建临时测试可用生产环境严禁使用06、Dockerfile 构建标准化方式必学必会(三) 镜像发布推送到仓库团队协作的核心方式(四) 特殊镜像详解scratch极简的空镜像核心总结写在最后其他疑问Docker 新手崩了镜像删不掉、版本不一致、构建总失败一篇讲透全流程操作刚学 Docker 的你是不是也踩过这些坑拉取镜像只知道敲docker pull生产环境只会用latest标签想构建自己的镜像但对着 Dockerfile 一脸懵删除镜像总提示 “被容器使用”死活删不掉Docker 的核心是镜像镜像的获取、管理、构建、发布是 Docker 的入门必修课。今天我们就把 Docker 镜像的核心操作讲透从镜像的获取、查看、删除、导入导出到用 Dockerfile/Commit 构建镜像再到镜像发布到仓库。Docker 镜像操作的 6 大高频痛点不管是 Docker 新手还是入门不久的开发者在镜像操作中都会遇到这些共性问题拉取镜像不指定版本全程用latest开发、测试、生产环境镜像版本不一致线上问题层出不穷查看镜像只知道 docker image ls看不懂镜像体积、分不清中间层镜像磁盘占满了都不知道怎么清理删除镜像无脑敲 docker image rm遇到 “容器占用” 提示就懵不懂 Untagged 和 Deleted 的核心区别构建镜像只会用 Commit镜像分层混乱、体积臃肿无法复用和维护编写 Dockerfile 不规范命令拼接错误、构建上下文没处理反复构建失败发布镜像踩格式坑不知道镜像名要和仓库账号匹配推送时提示权限不足或格式错误。这些问题的本质要么是操作不规范要么是没搞懂 Docker 镜像的底层逻辑。Docker 镜像的核心逻辑很多人镜像操作踩坑不是记不住命令而是没搞懂这 3 个核心逻辑看似操作正确实则埋下隐患这也是镜像操作的核心冲突点01、镜像标签不是 “可有可无”latest是最大的坑标签Tag是镜像的版本标识符未指定标签时 Docker 默认拉取latest。但 **latest并非固定版本 **只是指向仓库中最新推送的镜像一旦仓库更新latest对应的镜像就会变直接导致环境不一致。生产环境必须指定具体标签如nginx:1.20.0。02、镜像体积的 “视觉差”不是 Docker 出了错你会发现docker image ls显示的镜像体积和 Docker Hub 上的大小完全不同这不是 bugDocker Hub 显示的是压缩后体积关注网络传输本地显示的是展开后体积关注磁盘占用本地镜像体积总和≠实际磁盘消耗因为镜像分层存储相同基础层会复用只保存一份。03、删除镜像的 “两步走”Untagged ≠ DeletedDocker 删除镜像时先执行Untagged取消标签再执行Deleted删除镜像层一个镜像可以有多个标签若仅删除其中一个只是取消标签镜像主体还在只有当镜像的所有标签都被取消且无容器 / 其他镜像依赖其底层层时才会真正物理删除镜像层。Docker 镜像的核心操作镜像的全流程操作可以分为基础管理获取 / 查看 / 删除 / 导入导出、镜像构建Dockerfile/Commit、镜像发布、特殊镜像详解四部分。(一) 基础管理镜像的获取、查看、删除、导入导出这是镜像最高频的操作命令简单但细节多。1、获取镜像docker pull告别latest指定版本是关键核心命令docker pull [Registry地址/][仓库名]:[标签]# 从Docker Hub拉取指定版本nginxdockerpull nginx:1.20.0# 从第三方仓库quay.io拉取镜像dockerpull quay.io/bitnami/nginx:latest注意优先选择 Docker Hub 上的Docker Official Images官方镜像/Verified Content认证镜像安全性更高拉取速度慢时配置国内镜像源阿里云、网易云、中科大大幅提升速度。02、查看镜像不止docker image ls这些命令才是实用派基础查看只是入门学会过滤、格式化查看才能高效管理镜像核心命令如下# 基础查看仓库名、标签、镜像ID、创建时间、体积dockerimagels# 查看所有镜像包括中间层镜像dockerimagels-a# 只查看镜像ID批量操作必备dockerimagels-q# 过滤查看只看nginx相关镜像dockerimagelsnginx# 格式化查看自定义显示列ID、仓库名、标签dockerimagels--formattable {{.ID}}\t{{.Repository}}\t{{.Tag}}# 查看镜像详细信息如分层、环境变量、暴露端口dockerimage inspect 镜像ID/镜像名:标签# 查看镜像/容器/数据卷的磁盘占用情况dockersystemdf03、删除镜像docker image rm先清容器再删镜像核心命令docker image rm 镜像ID/镜像名:标签/镜像摘要# 通过短ID删除输入前3-4位即可能唯一区分dockerimagerm501# 通过镜像名:标签删除dockerimagermnginx:1.20.0# 批量删除删除所有redis镜像dockerimagerm$(dockerimagels-qredis)注意若提示“镜像被容器使用”先停止并删除相关容器docker container stop 容器ID docker container rm 容器ID批量删除前先单独执行过滤命令如docker image ls -q redis确认结果避免误删镜像摘要是最精确的标识通过docker image ls --digests查看适合生产环境精准操作。04、导入导出save/load离线环境镜像共享的唯一方式适用于无网络的离线环境将镜像导出为 tar 包再导入到其他服务器# 导出镜像-o 指定输出文件可导出多个镜像dockerimage save-onginx_1.20.0.tar nginx:1.20.0# 导入镜像从tar包导入dockerimage load-inginx_1.20.0.tar注意导出的 tar 包包含镜像的所有分层体积较大适合小范围离线共享团队 / 生产环境的镜像共享优先用镜像仓库Docker Hub / 私有仓库而非手动拷贝 tar 包。(二) 镜像构建两种方式Dockerfile 是核心Commit 仅临时使用构建自定义镜像是 Docker 的核心能力有Dockerfile 构建和Commit 构建两种方式。前者是官方推荐的标准方式后者仅适用于临时测试。05、Commit 构建临时测试可用生产环境严禁使用核心逻辑基于运行的容器做修改再将容器保存为镜像适合快速测试但镜像分层混乱、无法追溯修改记录体积臃肿。# 1. 启动一个nginx容器进入容器做修改dockerrun-it--namenginx-test nginx:1.20.0 /bin/bash# 2. 在容器内修改如修改首页index.htmlechoh1Hello Docker/h1/usr/share/nginx/html/index.html# 3. 退出容器将容器保存为新镜像dockercontainer commit 容器ID/容器名 新镜像名:标签# 示例将nginx-test容器保存为my-nginx:1.0dockercontainer commit nginx-test my-nginx:1.0注意Commit 构建的镜像被称为“黑盒镜像”团队协作中其他人无法知道镜像内的修改严禁在生产环境使用。06、Dockerfile 构建标准化方式必学必会Dockerfile 是构建镜像的文本配置文件包含构建镜像的所有指令可追溯、可复用、可批量构建是企业生产环境的标准方式。Dockerfile 基础结构规范示例# 基础镜像指定基于哪个镜像构建必选首行 FROM ubuntu:22.04 # 执行命令安装python3环境拼接命令减少分层避免apt-get交互 RUN apt-get update \ DEBIAN_FRONTENDnoninteractive apt-get install --no-install-recommends -y \ python3.10 python3-pip python3.10-dev # 添加文件将本地hello.py添加到容器根目录 ADD hello.py / # 容器启动命令指定容器运行时执行的命令 CMD [python3, /hello.py]核心构建命令# 构建镜像-t 标记镜像名:标签. 表示构建上下文为当前目录dockerimage build-thello-docker:1.0.注意构建上下文docker build后的.表示构建上下文Docker 会将该目录下的所有文件发送给 Docker 守护进程因此构建目录要保持干净避免无关文件增大镜像体积减少分层用拼接RUN命令避免多条RUN创建多个分层导致镜像体积臃肿选择轻量基础镜像优先用 alpine 版本如nginx:1.20.0-alpine比官方标准版体积小 80% 以上。(三) 镜像发布推送到仓库团队协作的核心方式构建好的自定义镜像需要发布到公共仓库Docker Hub或私有仓库才能实现团队共享和生产环境部署。完整发布流程以 Docker Hub 为例# 1. 注册并登录Docker Hub终端登录dockerlogin# 2. 标记镜像格式必须为「Docker Hub账号/仓库名:标签」dockerimage tag 本地镜像名:标签 账号名/仓库名:标签# 示例将hello-docker:1.0标记为xiaopeng163/hello-docker:1.0dockerimage tag hello-docker:1.0 xiaopeng163/hello-docker:1.0# 3. 推送镜像到Docker Hubdockerimage push xiaopeng163/hello-docker:1.0# 4. 其他机器拉取该镜像dockerpull xiaopeng163/hello-docker:1.0注意推送前必须先标记镜像格式错误会直接推送失败私有仓库推送镜像名格式为「私有仓库 IP: 端口 / 仓库名标签」如192.168.1.100:5000/my-nginx:1.0推送失败检查确认仓库账号已登录、镜像名格式正确、网络能访问仓库。(四) 特殊镜像详解scratch极简的空镜像scratch 是 Docker 官方提供的空镜像没有任何分层、没有操作系统、没有任何文件是构建超轻量镜像的基础很多官方基础镜像如 alpine都是基于 scratch 构建的。核心要点无法拉取docker pull scratch会失败scratch 是 Docker 内置的空镜像无需拉取可直接在 Dockerfile 中使用FROM scratch适用场景仅适用于静态可执行文件如 C/C 编译的静态二进制文件因为没有操作系统无法运行解释型语言如 Python/Java需要运行环境核心优势镜像体积几乎等于静态可执行文件的大小极致轻量安全性高无多余文件和依赖减少攻击面避坑要点开发环境极少使用仅在生产环境需要极致轻量镜像时使用且必须保证可执行文件是静态编译编译时加--static参数。核心总结最后总结 8 个核心法则记住这些能让你避开 90% 的镜像操作坑新手也能做到规范操作生产环境禁用latest标签拉取 / 构建镜像必须指定具体版本保证环境一致性优先用 Dockerfile 构建镜像Commit 仅用于临时测试严禁生产环境使用Dockerfile 编写要精简拼接 RUN 命令、选择轻量基础镜像减少镜像分层和体积删除镜像先清容器遇到占用提示先停止并删除相关容器再删镜像发布镜像必改格式镜像名必须和仓库账号 / 私有仓库地址匹配否则推送失败查看镜像多用过滤 / 格式化docker system df定期检查磁盘占用及时清理无用镜像离线共享用save/load团队 / 生产环境用镜像仓库拒绝手动拷贝 tar 包scratch 镜像仅用于静态可执行文件解释型语言不要用避免构建后无法运行。写在最后镜像作为 Docker 的核心是容器化部署的基础。掌握了镜像的获取、管理、构建、发布你就已经跨过了 Docker 的入门门槛。如果你觉得这篇文章对你有帮助欢迎点赞、在看、转发给身边的朋友。关注我我将持续更新更多 Docker、云原生、Python 的实战干货。从 Docker 基础到容器化部署从 Python 入门到后端开发。我将把我踩过的坑、总结的实战经验全部分享给你帮你少走弯路快速入门。想要获取《Docker 镜像核心操作速查表》请在 评论区 / 私信 回复【Docker 核心速查】。其他疑问Dockerfile 别再瞎写了90% 的人都踩过的坑底层逻辑 最佳实践一篇讲透Dockerfile 新手秘籍4 个封神技巧镜像从 1.14G 瘦到 6M构建速度快10倍Flask镜像打包教程90%的Docker新手必踩的4个致命坑我全给你踩过了新手直接抄Docker 新手抄作业Dockerfile 的底层逻辑 避坑红线 最佳实践看这一篇就够了90% 的 Docker 新手 都踩过的 8 个持久化坑一文讲透底层逻辑新手直接抄相关内容我都给大家做好了感兴趣的朋友来「我的主页」找一找直接就可以看到。欢迎关注 「王二哥的技术笔记」每天分享「FastAPI」、「Docker」、「Flask」、「职场」有趣干货千万不要错过