Docker 中卷、容器、镜像的区别解析

 更新时间:2025年10月22日 09:29:38   作者:nbspzs  
本文将Docker的镜像、容器和卷分别类比为面向对象编程中的类、对象和外部存储,详细分析了三者的特性、生命周期和作用,强调镜像只读、容器可写且临时、卷用于数据持久化,理解三者关系是Docker学习的关键,感兴趣的朋友跟随小编一起看看吧

🎯 核心概念比喻

想象一个面向对象编程的类比:

  • 镜像 = (模板、蓝图)
  • 容器 = 对象(类的实例)
  • = 外部存储(数据库、文件系统)

📝 详细对比

概念说明生命周期读写特性类比
镜像只读模板,包含应用和运行环境持久化存储只读软件安装包(.exe文件)
容器镜像的运行实例临时性,可随时创建/删除读写层(基于镜像)正在运行的进程
持久化数据存储独立于容器生命周期读写外接硬盘/U盘

🔍 深入详解

1.镜像- 只读的模板

# Dockerfile - 构建镜像的配方
FROM ubuntu:20.04
COPY app.py /app/
RUN pip install -r requirements.txt
CMD ["python", "/app/app.py"]

特性:

  • 只读,不可修改
  • 分层存储,每层都有唯一哈希
  • 可共享(通过 Docker Hub)
  • 可版本控制(标签)
# 相关命令
docker images              # 查看镜像
docker pull nginx:latest   # 下载镜像
docker build -t myapp .    # 构建镜像
docker rmi <image_id>      # 删除镜像

2.容器- 运行中的实例

# 基于镜像创建容器
docker run -d --name my-container nginx:latest

特性:

  • 可写(在镜像基础上添加读写层)
  • 临时性(删除后数据丢失)
  • 隔离性(有自己的文件系统、网络、进程空间)
  • 轻量级(共享主机内核)
# 容器生命周期
docker run              # 创建并启动
docker start/stop       # 启动/停止
docker exec -it bash    # 进入运行中的容器
docker rm               # 删除容器

3.卷- 持久化数据

# 创建和使用卷
docker volume create my-volume
docker run -v my-volume:/data nginx

特性:

  • 持久化(独立于容器)
  • 可共享(多个容器可挂载同一卷)
  • 高性能(不经过存储驱动)
  • 可备份迁移
# 卷管理
docker volume create     # 创建卷
docker volume ls        # 列出卷
docker volume inspect   # 查看卷详情
docker volume rm        # 删除卷

🎯 实际工作流示例

场景:部署一个 Web 应用

# 1. 获取镜像(从Docker Hub)
docker pull nginx:1.21
# 2. 创建数据卷(持久化存储)
docker volume create app-data
# 3. 运行容器(基于镜像创建实例)
docker run -d \
  --name web-server \
  -v app-data:/usr/share/nginx/html \
  -p 80:80 \
  nginx:1.21
# 此时:
# - nginx:1.21 是镜像(只读模板)
# - web-server 是容器(运行实例)
# - app-data 是卷(持久化存储网站文件)

📊 数据流向图

镜像 (只读)
    ↓
容器 (读写层) ←→ 卷 (持久化数据)
    ↓
应用运行状态

🔄 生命周期关系

💡 关键区别总结

  • 持久性
    • 镜像:永久存在(除非删除)
    • 容器:临时存在
    • 卷:永久存在(用于数据持久化)
  • 可写性
    • 镜像:只读
    • 容器:可写(但数据随容器删除而丢失)
    • 卷:可写(数据持久化)
  • 用途
    • 镜像:打包应用和环境
    • 容器:运行应用
    • 卷:存储数据

🛠 最佳实践

  • 镜像应该尽量小而精简
  • 容器应该是无状态的
  • 用于存储需要持久化的数据
  • 重要数据永远不要只存在容器层

理解这三者的关系是掌握 Docker 的关键!

到此这篇关于Docker 中卷、容器、镜像的区别解析的文章就介绍到这了,更多相关docker 卷 容器 镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process的解决方法

    Docker报错:OCI runtime exec failed: exec failed: contain

    这篇文章主要给大家介绍了关于Docker报错:OCI runtime exec failed: exec failed: container_linux.go:380: starting container process的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • docker容器的文件拷贝方式小结

    docker容器的文件拷贝方式小结

    这篇文章主要给大家介绍了关于docker容器的文件拷贝方式,在使用Docker时,我们经常需要拷贝多个容器的文件系统,文中给出了详细的解决办法,需要的朋友可以参考下
    2023-08-08
  • Docker微服务的ETCD集群搭建教程详解

    Docker微服务的ETCD集群搭建教程详解

    这篇文章主要为大家介绍了关于Docker微服务的ETCD集群搭建教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 使用Docker安装SonarQube的详细教程

    使用Docker安装SonarQube的详细教程

    这篇文章主要介绍了Docker安装SonarQube的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10
  • 详解复制备份docker容器数据的方法

    详解复制备份docker容器数据的方法

    这篇文章主要介绍了详解复制备份docker容器数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Docker 部署Go的两种基础镜像的实现

    Docker 部署Go的两种基础镜像的实现

    这篇文章主要介绍了Docker 部署Go的两种基础镜像的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Docker 教程之Docker Hub详细介绍

    Docker 教程之Docker Hub详细介绍

    这篇文章主要介绍了Docker 教程之Docker Hub详细介绍的相关资料,需要的朋友可以参考下
    2016-12-12
  • docker如何创建nginx图片服务器

    docker如何创建nginx图片服务器

    这篇文章主要介绍了docker如何创建nginx图片服务器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 使用docker安装elk的详细步骤

    使用docker安装elk的详细步骤

    这篇文章主要介绍了使用docker安装elk,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Linux安装Docker详细教程

    Linux安装Docker详细教程

    这篇文章介绍了Linux安装Docker的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论