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

【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.dtcms.com/a/360852.html

相关文章:

  • Centos安装unoconv文档转换工具并在PHP中使用phpword替换word模板中的变量后,使用unoconv将word转换成pdf
  • openharmony之sandbox沙箱机制详解
  • Docker一键快速部署压测工具,高效测试 API 接口性能
  • datax将数据从starrocks迁移至starrocks
  • Java比较器
  • golang 14并发编程
  • 20250828的学习笔记
  • Socket-TCP 上位机下位机数据交互框架
  • 深入理解 HTTP 与 HTTPS:区别以及 HTTPS 加密原理
  • UART-TCP双向桥接服务
  • Flutter WebAssembly (Wasm) 支持 - 实用指南Flutter WebAssembly (Wasm) 支持 - 实用指南
  • 解决爬虫IP限制:Selenium隧道代理完整解决方案
  • 聚焦智慧教育新趋势:AI+虚拟仿真技术加速未来学习转型
  • 算法面试题(上)
  • 【Java后端】Spring Boot 全局域名替换
  • Azure AI Search构建RAG的优化点
  • 接口自动化测试之设置断言思路
  • 大模型应用开发面试实录:LLM原理、RAG工程与多Agent场景化落地解析
  • mysql实例是什么?
  • 产品月报|睿本云8月产品功能迭代
  • Topaz Video AI:AI驱动的视频增强与修复工具
  • 嵌入式实时操作系统(二十五)-实时性
  • 从 “能用” 到 “好用”:生成式 AI 落地三大核心痛点与破局路径
  • nt5inf.hash排序后前后两个共五个和nti5nf.cat文件用asn.1editor打开后导出后部分内容的对比--重要
  • Unity中多线程与高并发下的单例模式
  • 结构体成员大小及内存对齐练习
  • Electron使用WebAssembly实现CRC-16 CCITT校验
  • 9.1C++——类中特殊的成员函数
  • 安卓悬浮球-3566-测试报告
  • vue社区网格化管理系统(代码+数据库+LW)