当前位置: 首页 > ops >正文

【Docker】Docker的容器Container、镜像Image和卷Volume对比

Docker的容器Container、镜像Image和卷Volume对比

      • 一、核心定义与角色
      • 二、关键特性对比
        • 1. 数据存储与持久性
        • 2. 管理与操作
        • 3. 技术原理
      • 三、典型使用场景
      • 四、协作关系示例
      • 五、常见误区
      • 六、总结:核心差异表

在 Docker 生态中,容器(Container)镜像(Image)卷(Volume) 是三大核心组件,它们协同工作但职责截然不同。以下是系统化对比:


一、核心定义与角色

组件本质角色生命周期
镜像只读模板应用的静态打包(如代码、依赖、配置)持久存在
容器运行时实例镜像的动态执行环境(隔离的进程)临时性(停止即销毁)
持久化存储单元独立的数据存储空间(绕过容器生命周期)永久存在

二、关键特性对比

1. 数据存储与持久性
特性镜像容器
存储内容代码、依赖、系统文件(只读运行时状态、临时文件(可写数据库、日志、用户文件(可读写
数据持久化✅ 永久存在(除非手动删除)❌ 删除容器即丢失✅ 独立存在(删除容器仍保留)
修改影响不可变(需重新构建镜像)修改仅限当前容器生命周期修改直接持久化到主机
2. 管理与操作
操作镜像容器
创建docker build / docker pulldocker run / docker createdocker volume create
查看docker imagesdocker ps / docker ps -adocker volume ls
删除docker rmidocker rmdocker volume rm
共享性✅ 可分发(推送到仓库)❌ 无法直接共享✅ 多容器可挂载同一卷
3. 技术原理
特性镜像容器
存储位置Docker 本地仓库(如 /var/lib/docker/image容器层(UnionFS 可写层)主机目录(如 /var/lib/docker/volumes
性能高效(分层复用)中等(写操作需通过 UnionFS)最高(直接读写主机文件系统)
依赖关系容器依赖镜像运行卷可独立于镜像/容器存在镜像无需感知卷的存在

三、典型使用场景

场景镜像容器
部署应用nginx:latestdocker run -d nginx❌ 无需卷(静态文件在镜像内)
运行数据库mysql:8.0docker run -d mysql✅ 挂载卷:-v mysql_data:/var/lib/mysql
开发环境node:18docker run -it node bash✅ 挂载代码目录:-v $(pwd):/app
日志收集fluentddocker run -d fluentd✅ 挂载日志卷:-v logs:/fluentd/log

四、协作关系示例

运行一个 WordPress 应用 为例:

# 1. 镜像:获取应用模板
docker pull wordpress:latest
docker pull mysql:8.0# 2. 卷:创建持久化存储
docker volume create wp_data      # 存储WordPress文件
docker volume create db_data      # 存储MySQL数据# 3. 容器:启动服务
# MySQL容器(挂载数据卷)
docker run -d --name db \-v db_data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=secret \mysql:8.0# WordPress容器(挂载代码卷 + 连接数据库)
docker run -d --name wp \-v wp_data:/var/www/html \--link db:mysql \-p 8080:80 \wordpress:latest

协作流程

  1. 镜像:提供 WordPress 和 MySQL 的静态模板。
  2. 容器:启动两个隔离的运行环境(WordPress + MySQL)。
    • wp_data 持久化 WordPress 文件(如主题、插件)。
    • db_data 持久化 MySQL 数据库(即使容器重建,数据不丢失)。

五、常见误区

误区真相
容器内修改会保存到镜像镜像是只读的!容器修改仅存在可写层,删除容器即丢失
删除镜像会删除相关容器容器依赖镜像,但删除镜像不影响已运行的容器(除非强制删除)。
卷会随容器自动删除卷需手动删除(docker volume rm),否则会持续占用磁盘空间。
所有数据都应存在卷中临时数据(如缓存)可直接存在容器内,避免卷的额外开销。

六、总结:核心差异表

维度镜像容器
本质静态模板动态实例持久化存储
可写性❌ 只读✅ 可写(临时)✅ 可写(永久)
生命周期永久(手动删除)临时(停止即销毁)永久(手动删除)
共享性✅ 可分发(仓库)❌ 不共享✅ 多容器共享
典型命令docker build/pull/rmidocker run/ps/rmdocker volume create/ls/rm

一句话总结
镜像是“蓝图”(定义应用结构),容器是“车间”(临时运行应用),卷是“仓库”(永久存放数据)。三者协作实现 不可变基础设施 + 数据持久化 的完整架构。

http://www.xdnf.cn/news/19376.html

相关文章:

  • JVM核心机制:类加载与内存结构详解
  • Axios与Ajax:现代Web请求大比拼
  • 彻底搞懂 C++ 中的 `typename`
  • datax将数据从starrocks迁移至starrocks
  • 拆解期货交易所:清算交收体系!
  • MySQL 8 窗口函数详解
  • 【LeetCode热题100道笔记+动画】单词拆分
  • 报错处理(1)激活conda环境后pip库不能安装到已经激活的这个环境
  • 小迪Web自用笔记23
  • 红帽企业 Linux 系统性能调优指南
  • mapstruct原理以及使用对比
  • nginx-realip问题解决方案
  • 算法面试题(上)
  • 前阿里专家揭秘:你对中国十大GEO专家的认知,99%都是错的
  • 吴恩达机器学习作业十二:协同过滤(电影推荐系统)
  • 使用 BayesFlow 通过神经网络简化贝叶斯推断(一)
  • 中医文化学习软件,传承国粹精华
  • 动态滑动窗口还搞不清?一文搞定动态滑动窗口 | 基础算法
  • Windows系统安装Git详细教程
  • 【Java后端】Spring Boot 全局域名替换
  • TCP实现线程池竞争任务
  • FPGA|Quartus II 中使用TCL文件进行引脚一键分配
  • 深入理解零拷贝:本地IO与网络IO的性能优化利器
  • Docker基本介绍
  • MySQL 慢查询 debug:索引没生效的三重陷阱
  • 深度学习框架与工具使用心得:从入门到实战优化
  • 动作指令活体检测通过动态交互验证真实活人,保障安全
  • 数字后端tap cell:新老工艺tap cell区别
  • 软考中级数据库系统工程师学习专篇(67、数据库恢复)
  • Linux网络socket套接字(中)