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

Docker镜像和容器有什么区别

Docker镜像和容器是Docker技术的两个核心概念,它们的关系类似于**“类与实例”“模板与运行对象”**。以下是它们的区别和联系:


1. 镜像(Image)

  • 定义:镜像是一个静态的、只读的模板,包含运行应用程序所需的一切(代码、运行时环境、系统工具、配置等)。
  • 特点
    • 不可修改:镜像一旦构建完成,内容无法直接更改(只能通过重新构建生成新镜像)。
    • 分层存储:镜像由多个只读层(Layer)堆叠而成,不同镜像可以共享相同的层,节省存储空间。
    • 可重复性:镜像是标准化的,确保在不同环境中运行一致。
  • 创建方式
    • 通过编写 Dockerfile 并使用 docker build 构建。
    • 从远程仓库(如Docker Hub)拉取(docker pull)。
    • 基于现有容器提交为镜像(docker commit,不推荐常规使用)。

2. 容器(Container)

  • 定义:容器是镜像的一个运行实例,类似于一个轻量级的虚拟机进程。
  • 特点
    • 动态可写:容器启动后,会在镜像的只读层上添加一个可写层(容器层),所有修改(如文件写入、配置变更)都保存在此层。
    • 生命周期:容器可以被启动、停止、删除,其状态是临时的(默认情况下,容器停止后数据会丢失)。
    • 隔离性:容器通过Linux内核的命名空间(Namespaces)和控制组(Cgroups)实现资源隔离(如进程、网络、文件系统等)。
  • 操作方式
    • 通过 docker run 从镜像启动容器。
    • 通过 docker start/stop/restart 管理容器状态。
    • 通过 docker rm 删除容器。

关键区别总结

特性镜像(Image)容器(Container)
状态静态、只读动态、可读写(通过容器层)
存储多层只读文件系统镜像层(只读) + 容器层(可写)
生命周期持久化存储(除非主动删除)临时性(停止后容器层默认不保留,需通过卷持久化数据)
创建方式Dockerfile构建或从仓库拉取通过 docker run 从镜像启动
数量关系一个镜像可启动多个容器每个容器基于一个镜像运行

类比理解

  • 镜像:类似操作系统的安装光盘(.iso文件),是静态的模板。
  • 容器:类似用光盘安装好的正在运行的电脑系统,可以操作、修改,但关闭后默认不保存状态(除非主动保存数据)。

示例流程

  1. 构建镜像:编写 Dockerfiledocker build -t my-app .
  2. 启动容器docker run -d --name my-container my-app
  3. 修改容器:进入容器(docker exec -it my-container bash)并修改文件。
  4. 保存状态(可选):若需要保留修改,可提交容器为新镜像(docker commit my-container my-app:v2),但更推荐通过更新 Dockerfile 重新构建。

核心总结

  • 镜像是模板,容器是实例
  • 镜像不可变,容器可变
  • 镜像用于分发和标准化,容器用于运行和隔离环境
http://www.xdnf.cn/news/491095.html

相关文章:

  • NDK19无法在AppleM芯片运行解决方案
  • 深入C++的set集合:用法、特性与应用实例
  • 2025 家用投影新标杆:雷克赛恩 CyberPro1 如何重新定义客厅观影体验
  • 新京东,正在成为一种生活方式
  • Transformer网络结构
  • 【笔记】 huggingface.co:443是连接出错吗
  • Node.js 实战二:接口参数校验与类型安全方案
  • 主打「反激进」的一汽丰田,靠稳扎稳打的技术实现突围
  • 实战记录:Java 高并发插入 MySQL 唯一索引表引发死锁的排查与解决
  • Windows 本地部署MinerU详细教程
  • 厂房气楼做法
  • [Lc] 5.16 One question a day周总结
  • 项目管理进阶:全文解读企业IT系统全生命周期管理与运营平台建设方案【附全文阅读】
  • 【RTMP】RTMP协议的详细介绍
  • SpringBoot3.4.5下Lombok的@Data注解不生效,解决方案
  • Gmsh 读取自定义轮廓并划分网格:深入解析与实践指南
  • 金格iWebOffice控件在新版谷歌Chrome中不能加载了怎么办?
  • 数字电路的发展历史
  • PT2031单触控单输出触摸IC
  • MySQL8.x新特性:窗口函数(Window Functions)
  • 【Linux】ssh命令 – 安全的远程连接服务
  • GPU Runtime Suspend 调试与验证:从 sysfs 到 perf 分析
  • ROS2学习(5)------ROS2 功能包介绍
  • 【python】直线型雷达图
  • 前端流行框架Vue3教程:18. _组件数据传递
  • 关于“集合框架底层原理”的一些问题
  • Ceisum 展示——智能巡检制作
  • Vue3封装公共图片组件
  • 深入探索 OpenSPG:下一代知识图谱构建与推理框架
  • Java(基础) day01 初识Java