Docker 镜像与容器的区别与联系

🐳 Docker 镜像与容器的区别与联系

“镜像是什么?容器又是什么?两者有什么关系?”
这是几乎每个学习 Docker 的人都会遇到的问题。
本文将用最直观的方式,帮你彻底搞清楚 镜像(Image)容器(Container) 的关系。


🧠 一、先来一个比喻

你可以把 镜像 看成是一个 “程序模板”
容器 就是这个模板“运行后”的实例。

就像:

类比对象Docker 对应概念说明
类(class)镜像(Image)定义了对象的结构和行为
对象(object)容器(Container)由类实例化出来,独立运行
蓝图镜像只读的定义文件
房子容器根据蓝图建造出的实际可用空间

🧩 结论:

镜像是静态的模板,容器是运行中的实体。


🧱 二、Docker 镜像(Image)是什么?

镜像 是一个只读的、分层的文件系统。
它包含:

  • 操作系统环境(如 Ubuntu、Alpine)
  • 应用程序(如 Nginx、Python)
  • 应用配置(环境变量、依赖等)

你可以理解为:

镜像 = “应用 + 运行环境 + 系统依赖”的打包文件。

🧩 镜像的特点

特性说明
只读镜像内容不可更改
分层结构由多个只读层叠加组成(UnionFS)
可复用多个镜像可共享相同的底层层
可移植一次构建,到处运行

示例

docker pull nginx:latest     # 拉取镜像
docker images                # 查看本地镜像

输出示例:

REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   2 weeks ago     142MB

📦 三、Docker 容器(Container)是什么?

容器是 镜像的运行实例
当你运行一个镜像时,Docker 会:

  1. 从镜像创建一个可写层;
  2. 分配网络、挂载卷;
  3. 启动应用进程。

从此,容器就像一个独立的运行环境,拥有自己的文件系统、进程空间、网络接口。

容器的特点

特性说明
轻量共用宿主机内核,不需要完整系统
隔离文件系统、网络、进程互不干扰
临时性删除容器不会影响镜像内容
可复制可快速创建多个相同实例

🔄 四、镜像与容器的关系图

        +-----------------------------+
        |        Docker 镜像          |
        |  代码 + 依赖 + 配置 + 系统  |
        +-----------------------------+
                     │
                     │  docker run
                     ▼
        +-----------------------------+
        |        Docker 容器          |
        | 镜像的运行实例(带可写层)  |
        +-----------------------------+

一个镜像可以创建多个容器:

docker run -d -p 8080:80 --name web1 nginx
docker run -d -p 8081:80 --name web2 nginx

这两个容器都基于同一个 nginx 镜像运行,但互不影响。


⚙️ 五、操作对比示例

操作镜像相关命令容器相关命令
查看列表docker imagesdocker ps -a
拉取docker pull(无)
删除docker rmidocker rm
构建docker build(无)
创建(无)docker create
运行(无)docker run
导出docker savedocker export
导入docker loaddocker import

🔍 六、文件层结构区别

🧩 镜像层结构(只读)

Layer 1: Ubuntu 基础系统
Layer 2: 安装 Nginx
Layer 3: 拷贝配置文件
-----------------------
Final Image = 只读层叠加结果

🧱 容器层结构(读写)

Read-only Layers (来自镜像)
Writable Layer (容器运行时产生)
-----------------------
容器运行时的文件修改都写入可写层

当容器删除时,可写层也会被清空,镜像层保持不变。


🧩 七、镜像与容器的常见问题

❓Q1:删除容器会影响镜像吗?

不会。
容器只是基于镜像的一个实例,删除容器不会影响镜像本身。


❓Q2:修改了容器内部文件,镜像会变化吗?

不会。
容器的修改只存在于“可写层”中,镜像层仍然保持只读。

如果你想保留修改结果,可以执行:

docker commit 容器名 新镜像名:tag

❓Q3:可以从一个容器创建多个镜像吗?

可以。
容器可以被多次 commit 成不同镜像版本,用于备份或打包分发。


🧭 八、总结对比表

对比项镜像(Image)容器(Container)
定义应用及环境的模板镜像的运行实例
状态静态动态
层类型只读层可读写层
数量关系一个镜像可生成多个容器基于镜像运行
修改后影响不会变化可临时修改
删除影响删除镜像会导致无法新建容器删除容器不影响镜像
创建方式docker builddocker pulldocker run

🏁 九、一句话总结

镜像是“模板”,容器是“实例”;镜像是静态的,容器是动态的。
Docker 世界里的一切运行,都是从镜像开始,以容器为载体。


📚 延伸阅读

若有转载,请标明出处:https://blog.youkuaiyun.com/CharlesYuangc/article/details/154156770

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君九@DBA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值