Docker 三大核心组件详解:镜像、容器、仓库(附分层原理 + 示例)

前言

学习 Docker,镜像、容器、仓库 是必须吃透的三大核心概念,三者构成了 Docker 完整的工作闭环:镜像用于构建、容器用于执行、仓库用于分发。本文结合原理图解、通俗讲解与实操示例,帮你彻底搞懂三者的定义、关系及底层分层机制,适合 Docker 入门进阶学习。

一、Docker 整体工作逻辑

Docker 的核心流转逻辑可以概括为:构建镜像 → 运行容器 → 分发仓库,三者关系如下:

  • 镜像(Images):构建,静态模板;
  • 容器(Container):执行,镜像运行后的动态实例;
  • 仓库(Repositories):分发,存储、共享镜像的平台。

简单理解:镜像是模板,容器是运行起来的应用,仓库是存放模板的云端仓库

二、Docker 镜像(Images):静态只读的应用模板

1. 什么是 Docker 镜像

容器能够取代传统虚拟机,核心原因就是 Docker 镜像技术 。Docker 镜像本质是一个压缩包,包含完整操作系统的文件、依赖、运行环境、应用程序,和本地开发 / 测试环境系统完全一致。核心特点:

  1. 分层架构:镜像由多层文件系统堆叠而成;
  2. 只读不可修改:镜像本身是静态文件,运行时不能直接修改;
  3. 一次构建,到处运行,是创建容器的基础模板。

2. 镜像分层原理(重点)

Docker 镜像采用分层存储机制,每一层只记录变更的文件,下层文件可被多个上层镜像复用,极大节省存储空间。

  • 基础层:操作系统内核、基础系统(如 Ubuntu、CentOS);
  • 中间层:安装的依赖、软件(如 VIM、Nginx);
  • 顶层:应用程序及配置;
  • 所有镜像层均为只读,不可修改。

举个例子:基于 Ubuntu 系统,依次安装 VIM、Nginx,就会形成多层镜像:

镜像修改逻辑:修改镜像内文件,不会直接覆盖原文件,而是在上层生成新文件,屏蔽下层旧文件;最终系统看到的是多层合并后的完整视图。

3. Dockerfile 构建镜像示例

Dockerfile 是构建镜像的脚本,每一条RUN命令会生成一层镜像。

冗余写法(生成 3 层镜像)
复制代码
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
优化写法(合并为 1 层,减少镜像层数)
复制代码
FROM centos
RUN yum -y install wget && \
    wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" && \
    tar -xvf redis.tar.gz

优化原则:尽量合并RUN指令,减少镜像层数,缩小镜像体积。

三、Docker 容器(Container):镜像运行的动态实例

1. 镜像与容器的关系

  • 镜像:静态,只读模板,相当于软件安装包;
  • 容器:动态,镜像运行后的实例,相当于运行中的软件;
  • 容器由只读镜像层 + 顶部可读写容器层组成。

2. 容器分层结构

容器在镜像的所有只读层之上,新增一层可读写的容器层

  • 镜像层:全部只读,共享复用;
  • 容器层:唯一可读写,所有修改、新增、删除操作都在此层完成;
  • 生命周期:容器消亡,容器层数据随之销毁。

3. 容器核心特性

  1. 可被创建、启动、停止、删除、暂停;

  2. 可理解为一个或一组相互依赖的服务

  3. 启动容器核心命令:

    后台运行容器,images为镜像名称/ID

    docker run -d images

四、Docker 仓库(Repositories):镜像的存储分发平台

Docker 仓库是用来存放、共享、分发 Docker 镜像 的平台,分为公共仓库私有仓库两大类。

1. 公共仓库

  • 官方仓库:Docker Hubhttps://hub.docker.com),全球最大镜像仓库,拥有海量官方镜像(Nginx、MySQL、Redis 等),可免费下载;
  • 国内公共源:阿里云镜像仓库、网易蜂巢等,用于加速国内镜像拉取。

2. 私有仓库

企业内部使用,存放自定义镜像,保障安全与内网访问,常见工具:

  • Harbor(VMware 开源,企业级私有仓库);
  • Docker Registry(Docker 官方简易私有仓库)。

五、总结

  1. 镜像:静态只读分层模板,构建应用环境,Dockerfile 用于构建镜像;
  2. 容器:镜像运行实例,拥有独立可读写层,实现应用运行;
  3. 仓库:镜像存储平台,分为公共 / 私有仓库,实现镜像分发共享。

三者配合,完美实现 Docker Build(构建)、Ship(分发)、Run(运行) 的核心流程,也是容器化部署的基础。

相关推荐
小此方33 分钟前
Re:Linux系统篇(四十二)通信篇·七:SystemV标准三部曲其之三:信号量与并发编程初步认识
linux·运维·驱动开发
画中有画7 小时前
使用yolov8实现自动化脚本
运维·yolo·自动化
Piko6149 小时前
H3C IRF2 堆叠实战:打造高可靠核心交换网络
运维·网络·笔记
万联WANFLOW12 小时前
SD-WAN 控制平面高可用怎么做?SDWAN 控制器挂了,全网会发生什么
运维·网络·分布式·架构
程序员老油条13 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
SkyWalking中文站14 小时前
认识 Horizon UI · AI Assistant:用日常语言查询你的可观测性数据
运维·监控·自动化运维
大侠锅锅14 小时前
第 4 篇:策略模式实践——用统一接口管理 Docker 容器、原生进程与 K3s Pod
docker·容器·边缘计算·策略模式·iot
崇山峻岭之间15 小时前
Keil5输出hex转换为bin的设置
linux·运维·服务器
Hoxy.R15 小时前
KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战
运维·数据库
小蓝波16 小时前
docker 的命令
java·docker·容器