首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Docker架构拆解:从命令到容器的完整旅程

Docker架构拆解:从命令到容器的完整旅程

原创
作者头像
刘叨叨趣味运维
发布2026-01-20 17:52:27
发布2026-01-20 17:52:27
1350
举报

大家好,我是刘叨叨,一个致力于让碎片化技术系统性的运维人。

如果说容器是“正在运行的进程”,那么镜像就是容器的“静态蓝图”。今天,我们将深入幕后,掌握镜像的完整操作链条——从拉取、推送到分析、管理,直至搭建你自己的私有镜像仓库。这是实现环境标准化高效交付的基石。

一、 镜像基础操作:获取、管理与分发

镜像操作是Docker日常使用中最频繁的部分。

1. 镜像的拉取、查看与清理

代码语言:bash
复制
# 1. 从仓库拉取镜像(推荐指定具体标签,而非默认的latest)
docker pull nginx:alpine
# 2. 列出本地镜像(-q 参数仅显示镜像ID,便于脚本处理)
docker images
docker images -q
# 3. 搜索Docker Hub上的镜像
docker search redis --limit 5
# 4. 删除本地镜像(-f 强制删除)
docker rmi nginx:alpine
# 5. 镜像的离线导入与导出(适用于内网/离线环境迁移)
在内网部署或需要迁移特定版本镜像时,常用 docker save 和 docker load 命令进行离线操作。
# 将指定镜像导出为一个 `.tar` 归档文件(适合备份或传输)
docker save -o nginx_alpine.tar nginx:alpine
# 参数说明:-o (--output) 指定输出文件名
# 从归档文件将镜像完整加载到本地(包含其所有历史层和元数据)
docker load -i nginx_alpine.tar
# 参数说明:-i (--input) 指定输入文件
# 另一种常用简写(效果相同)
docker save nginx:alpine > nginx_alpine.tar
docker load < nginx_alpine.tar

2. 镜像标签管理与推送

镜像是通过 仓库地址/命名空间/镜像名:标签 来唯一标识的。

代码语言:bash
复制
# 1. 为本地镜像打上新标签(准备推送或版本管理)
docker tag nginx:alpine 192.168.1.100:5000/lddops/nginx:v1.0
# 命令格式:docker tag 源镜像[:标签] 新镜像名:新标签
# 2. 推送镜像到远程仓库(需先登录或有权限)
docker push 192.168.1.100:5000/lddops/nginx:v1.0
# 3. 登录/登出镜像仓库
docker login 192.168.1.100:5000
docker logout 192.168.1.100:5000

二、 深入镜像层:理解Docker的核心设计

理解镜像的分层存储是优化镜像和高效运维的关键。

查看镜像的详细构成

代码语言:bash
复制
# 1. 查看镜像的详细元数据(JSON格式)
docker image inspect nginx:alpine | jq .[0].RootFS.Layers
# 使用 jq 工具可以清晰看到组成该镜像的所有只读层(Layer)的哈希值
# 2. 查看镜像的构建历史(每一层对应的Dockerfile指令)
docker history nginx:alpine

分层带来的核心优势

  • 🚀 共享与复用:多个镜像可共享相同的基础层,极大节省存储。
  • 🚀 构建缓存:重新构建时,未改变的层会直接使用缓存,加速构建。
  • 🚀 高效分发:拉取镜像时,只需下载本地缺失的层。

三、 私有镜像仓库搭建与管理

在生产环境中,出于安全、速度和合规性要求,搭建私有镜像仓库是必然选择。我们将从最简单的官方 Registry 开始。作为基础入门,后续我们还将单篇详细讲解功能更强大的企业级镜像仓库解决方案—— Harbor

1. 快速启动一个私有Registry

Docker官方提供了开源的 Registry 镜像,搭建非常简单。

代码语言:bash
复制
# 1. 拉取 registry:2 镜像
docker pull registry:2
# 2. 运行一个基础私有仓库容器
docker run -d \
  --name private-registry \
  -p 5000:5000 \
  -v /opt/lddops/registry:/var/lib/registry \
  --restart=always \
  registry:2
# 参数拆解:
# -d : 后台运行
# --name : 容器名称
# -p 5000:5000 : 端口映射,将宿主机的5000端口映射到容器的5000端口
# -v /opt/lddops/registry:/var/lib/registry : 数据卷挂载,将容器内镜像存储目录持久化到宿主机,防止容器重启数据丢失
# --restart=always : 重启策略,确保服务在Docker守护进程重启后也能自动运行

执行后,一个私有仓库就在 http://你的服务器IP:5000 运行了。

2. 向私有Registry推送与拉取镜像

默认情况下,Docker认为本地localhost的Registry是安全的,但非localhost的HTTP仓库需要显式声明为“受信任”。

代码语言:bash
复制
# 1. 【关键】配置Docker Daemon,信任你的私有仓库地址(假设IP为192.168.1.100)
# 编辑 /etc/docker/daemon.json,添加或合并 "insecure-registries" 配置项
{
  "insecure-registries": ["192.168.1.100:5000"]
}
# 保存后,重启Docker服务使配置生效
sudo systemctl restart docker
# 2. 重标签并推送镜像到私有仓库
docker tag nginx:alpine 192.168.1.100:5000/my-nginx:prod-v1
docker push 192.168.1.100:5000/my-nginx:prod-v1
# push 命令会将镜像及其所有层推送到指定仓库
# 3. 从私有仓库拉取镜像
docker pull 192.168.1.100:5000/my-nginx:prod-v1

3. 管理私有仓库内容

Registry API 是 RESTful 风格的,我们可以用 curl 命令进行基础查询。

代码语言:bash
复制
# 1. 查询仓库中有哪些镜像项目(`_catalog`)
curl -X GET http://192.168.1.100:5000/v2/_catalog
# 返回示例:{"repositories":["my-nginx"]}
# 2. 查询某个镜像的所有标签(`tags/list`)
curl -X GET http://192.168.1.100:5000/v2/my-nginx/tags/list
# 返回示例:{"name":"my-nginx","tags":["prod-v1"]}

四、 镜像清理与空间管理

长期使用后,系统会积累临时镜像和悬虚镜像(<none>:<none>),可按需求清理(谨慎操作)。

代码语言:bash
复制
# 1. 删除所有悬虚镜像(未被任何标签引用的中间构建层)
docker image prune -f
# `-f` 或 `--force` 参数表示跳过确认提示
# 2. 删除所有未被使用的镜像(未被任何容器引用的所有镜像)
docker image prune -a -f
# `-a` 或 `--all` 参数表示删除所有未使用的镜像,不仅仅是悬虚镜像
# 3. 【谨慎使用】一键清理(停止的容器、未使用的网络、悬虚镜像、构建缓存)
docker system prune -f

💬 动手与思考

镜像管理是高效运维的基本功,建议你动手实践:

  1. 请在本地或一台测试服务器上,按照步骤搭建一个基础的私有Registry,并成功推送一个 busybox:latest 镜像到其中。在配置 insecure-registries 前后,执行 docker push 命令有什么不同?这个配置解决了什么问题?

欢迎在评论区分享你的操作笔记或排查思路。


🔜 下期预告

掌握了镜像的“收与藏”,下一步我们将学习如何“造”。下一篇,我们将进入更高阶的主题:《Dockerfile基础:FROM、RUN、COPY指令与构建优化》,手把手教你如何像编写代码一样,通过 Dockerfile 来定制和构建属于自己的、高效安全的容器镜像。

搜索关注【刘叨叨趣味运维】公众号,用有趣的方式,啃下最硬核的技术。咱们下期见!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 镜像基础操作:获取、管理与分发
    • 1. 镜像的拉取、查看与清理
    • 2. 镜像标签管理与推送
  • 二、 深入镜像层:理解Docker的核心设计
    • 查看镜像的详细构成
  • 三、 私有镜像仓库搭建与管理
    • 1. 快速启动一个私有Registry
    • 2. 向私有Registry推送与拉取镜像
    • 3. 管理私有仓库内容
  • 四、 镜像清理与空间管理
  • 💬 动手与思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档