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

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 是卷(持久化存储网站文件)

📊 数据流向图

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

🔄 生命周期关系

Dockerfile
镜像
容器
数据持久化

💡 关键区别总结

  1. 持久性

    • 镜像:永久存在(除非删除)
    • 容器:临时存在
    • 卷:永久存在(用于数据持久化)
  2. 可写性

    • 镜像:只读
    • 容器:可写(但数据随容器删除而丢失)
    • 卷:可写(数据持久化)
  3. 用途

    • 镜像:打包应用和环境
    • 容器:运行应用
    • 卷:存储数据

🛠 最佳实践

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

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

http://www.dtcms.com/a/512167.html

相关文章:

  • 学习React-21-受控组件非受控组件
  • 银行测试学习计划
  • 电商自建站中企动力网站建设公司
  • 怎么搜 织梦的网站唐山海港经济开发区人才网
  • Qt打包工具Enigma Virtual Box
  • 【同步/异步 日志系统】--- 介绍
  • 【软考备考】 数据与文件的加解密种类详解和使用场景
  • GitLab 版本控制与管理指南
  • Python动态方法调用全解:从字符串到执行的艺术
  • Blender入门学习03
  • 网站建设龙兵科技嘉兴网站建设网站建设
  • html代码下载网站怎么优化关键词
  • Kafka面试精讲 Day 27:监控告警与故障排查
  • C++ ABI:编译报错之:gcc 4.8.1 切 gcc 6.1.0
  • OLED-on-silicon(OLEDoS)技术正成为VR/MR设备显示技术的未来大趋势
  • QML学习笔记(四十四)QML与C++交互:对QML对象设置objectName
  • 网站制作全包多少钱演出票务网站建设
  • 用 Go 手搓一个 NTP 服务:从“时间混乱“到“精准同步“的奇幻之旅
  • 如何设计一个高并发系统?
  • 仓颉语言核心技术全解析与实战教程
  • 【多维聚类算法】RQ-Kmeans 利用残差信息 捕捉细节特征
  • 【代码随想录算法训练营——Day44】动态规划——1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列
  • 北住房和城乡建设厅网站亦庄建设局网站
  • 做生鲜食品最好的网站深圳网站建设犀牛云
  • Spring—容器
  • 汉南公司网站建设山东定制版网站建设公司
  • .NET WinForms + WPF 综合学习路线:从传统到现代的.NET桌面开发
  • 怀柔做网站设计师网上接单被骗
  • Go语言实战:入门篇-4:与数据库、redis、消息队列、API
  • Go语言:一文学搞懂核心函数“make”