【Docker基础】Docker核心概念:容器(Container)与镜像(Image)的区别与联系

目录

引言

1 Docker镜像(Image)

1.1 镜像的定义

1.2 镜像的特点

1.3 镜像的创建

1.4 镜像的结构

1.5 镜像结构描述

2 Docker容器(Container)

2.1 容器的定义

2.2 容器的特点

2.3 容器的创建与运行

2.4 容器的生命周期流程

2.5 容器生命周期流程描述

3 镜像与容器的区别与联系

3.1 区别

3.2 联系

3.3 镜像与容器的关系

4 总结


引言

随着容器化技术的快速发展,Docker已经成为开发和运维领域中不可或缺的工具。Docker 的核心概念包括容器(Container)和镜像(Image),这两个概念虽然紧密相关,但有着本质的区别。理解它们的区别与联系,对于深入掌握Docker技术至关重要。

1 Docker镜像(Image)

1.1 镜像的定义

Docke镜像是一个 只读模板,用于创建Docker容器。
镜像包含了运行某个软件所需的所有文件系统、库、环境变量和配置文件。可以将其类比为传统虚拟机中的“快照”或“模板”,但镜像更加轻量级,因为它只包含必要的文件,而不是整个操作系统。

1.2 镜像的特点

  • 只读性:镜像一旦创建,就不能被修改。任何修改都需要通过创建一个新的镜像来实现
  • 分层结构:镜像由多个只读层组成,每一层代表了对前一层的一个修改(如添加文件、修改配置等),这种分层结构使得镜像的构建和分发更加高效
  • 可复用性:镜像可以在不同的环境中复用,确保了应用在不同环境中的一致性

1.3 镜像的创建

镜像通常通过Dockerfile定义并构建,Dockerfile是一个文本文件,包含了一系列指令,用于自动化构建镜像,例如:
# 使用官方 Ubuntu 基础镜像
FROM ubuntu:20.04# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive# 安装软件包
RUN apt-get update && apt-get install -y \curl \wget \&& rm -rf /var/lib/apt/lists/*# 复制文件到镜像中
COPY app.py /app/app.py# 暴露端口
EXPOSE 80# 设置容器启动时执行的命令
CMD ["python", "/app/app.py"]
  • 通过docker build命令,可以基于Dockerfile构建镜像:
docker build -t my-image .

1.4 镜像的结构

1.5 镜像结构描述

  • Base Image:基础镜像,通常是官方提供的操作系统镜像(如Ubuntu)
  • Layer 1:安装软件包层,包含所有通过RUN指令安装的软件包
  • Layer 2:文件复制层,包含通过COPYADD指令复制到镜像中的文件
  • Layer 3:环境配置层,包含通过ENVWORKDIR等指令设置的环境变量和配置
  • Final Image:最终构建的镜像,由所有层叠加而成

2 Docker容器(Container)

2.1 容器的定义

Docker容器是镜像的 运行实例。
容器是轻量级的、独立的、可执行的应用包,包含了运行应用所需的所有东西:代码、运行时、系统工具、系统库和设置
容器可以看作是一个隔离的进程,运行在宿主机的操作系统之上

2.2 容器的特点

  • 可运行性:容器是镜像的运行实例,可以启动、停止、重启和删除
  • 隔离性:容器提供了进程级别的隔离,每个容器都有自己的文件系统、网络栈和进程空间
  • 可移植性:容器可以在任何支持 Docker 的环境中运行,确保了应用的一致性

2.3 容器的创建与运行

  • 容器可以通过docker run命令基于镜像创建并运行,例如:
docker run -d -p 8080:80 --name my-container my-app
  • -d:后台运行容器
  • -p 8080:80:将宿主机的8080端口映射到容器的80端口
  • --name my-container:为容器指定名称
  • my-image:使用的镜像名称

2.4 容器的生命周期流程

2.5 容器生命周期流程描述

  • Create Container:基于镜像创建容器,但此时容器并未运行
  • Start Container:启动容器,使其进入运行状态
  • Container Running:容器正在运行,可以执行应用逻辑
  • Stop Container:通过docker stop命令停止容器,容器进入退出状态
  • Kill Container:通过docker kill命令强制终止容器,容器进入退出状态
  • Container Exited:容器已退出,可以重新启动或删除
  • Restart Container:通过docker restart命令重新启动已退出的容器
  • Remove Container:通过docker rm命令删除容器,释放资源

3 镜像与容器的区别与联系

3.1 区别

维度

镜像(Image)

容器(Container)

存在形式

静态模板

动态实例

存储特性

只读分层

可写层+只读层

生命周期

长期存储

临时运行

创建方式

docker build

docker run/create

数量关系

1:N

1:1

磁盘占用

较大(包含完整环境)

较小(增量存储)

修改影响

创建新镜像

实时生效

3.2 联系

  • 镜像与容器的关系:容器是镜像的运行实例,没有镜像就无法创建容器,镜像为容器提供了运行环境,容器则是镜像的具体执行
  • 镜像的复用性:同一个镜像可以创建多个容器实例,每个容器实例都是独立的,互不影响
  • 容器的可变性:容器在运行过程中可以修改文件系统、环境变量等,但这些修改不会影响原始镜像,如果需要将容器的修改保存为新的镜像,可以使用docker commit命令

3.3 镜像与容器的关系

4 总结

Docker镜像和容器是Docker技术的核心概念,理解它们的区别与联系对于掌握Docker至关重要。
  • 镜像是一个只读模板,用于创建容器
  • 容器是镜像的运行实例,具有生命周期和可变性,通过Dockerfile可以自动化构建镜像,而docker run命令则用于基于镜像创建并运行容器
掌握镜像和容器的概念,可以帮助开发者更高效地打包、分发和运行应用,提高开发和运维的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/84827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零到一:构建企业级 Vue.js 3 组件库

前言:为何要构建组件库? 在现代前端工程化体系中,组件库已不再是大型团队的专属。它是一个团队设计规范、开发模式和技术沉淀的核心载体。构建一个组件库,能够带来诸多优势: 提升效率:提供可复用的高质量…

【2025 CVPR-Backbone】Building Vision Models upon Heat Conduction

摘要 利用注意力机制的视觉表示模型在追求大感受野时面临着巨大的计算开销。在本研究中,我们通过引入基于物理热传导原理的热传导算子(Heat Conduction Operator, HCO)来缓解这一挑战这么高级咩(⊙o⊙)!。HCO将图像块视为热源&am…

Rust编写Shop管理系统

Rust编写Shop管理系统 Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架。编写Shop管理系统 HelloKeny 首先是先编写最简单的例子,类似hello World可以检查环境 Actix Web 是一个功能强大、实用且速度极快的 Rust Web 框架。 命令 cargo new hellokenycd hell…

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…

快速幂算法详解:从暴力到优雅的数学优化

文章目录 一、朴素幂运算的问题二、快速幂的数学原理三、快速幂的递归实现四、快速幂的迭代实现五、模运算下的快速幂六、快速幂的应用场景七、总结 快速幂是一种高效计算幂运算的算法,能够将时间复杂度从朴素的 O (n) 降低到 O (log n)。本文将深入探讨快速幂的原理…

HTML+CSS 动态菜单和登录框

摘要 实现了一个现代化的登录/注册界面,包含导航栏和弹窗表单。 HTML结构采用了响应式设计,包含Logo、导航链接和登录按钮。 CSS样式实现了背景图片、导航栏悬浮效果和表单美化,使用伪元素实现链接下划线动画。 JavaScript实现了弹窗切换…

抖音AI数字人对口型软件LatentSync最新版整合包,音频驱动口型讲话

本次和大家分享一个字节跳动开发的强大的音频驱动口型数字人视频制作软件LatentSync,我以前也分享过不少类似软件了,比如:EchoMimic、VideoReTalking、hallo。字节的推出的这个效果稍微更好一点,我制作了最新版的一键启动整合包。…

深入理解 PyTorch:从基础到高级应用

在深度学习的浪潮中,PyTorch 凭借其简洁易用、动态计算图等特性,迅速成为众多开发者和研究人员的首选框架。本文将深入探讨 PyTorch 的核心概念、基础操作以及高级应用,带你全面了解这一强大的深度学习工具。​ 一、PyTorch 简介​ PyTorch…

Java 中的 synchronized 与 Lock:深度对比、使用场景及高级用法

💡 前言 在多线程并发编程中,线程安全问题始终是开发者需要重点关注的核心内容之一。Java 提供了多种机制来实现同步控制,其中最常用的两种方式是: 使用 synchronized 关键字使用 java.util.concurrent.locks.Lock 接口&#xf…

Notepad++如何列选

在 Notepad 中,你可以通过 列模式(Column Mode) 进行垂直选择文本(列选),以下是具体操作方法: 方法 1:键盘 鼠标列选 按住 Alt 键(或 Alt Shift)。 按住鼠…

华为OD机考-水仙花数Ⅰ-逻辑分析(JAVA 2025B卷)

import java.util.*; public static Integer get(int count,int c){if(count<3||count>7){return -1;}//存储每位数的最高位……最低位int[] arr new int[count];List<Integer> res new ArrayList<>();for(int i(int) Math.pow(10,count-1);i<(int) Math…

基于 STL+VMD 二次分解的 Informer-LSTM 并行预测模型详解与案例

一、背景与动机 在时间序列预测中,如电力负荷、风速、交通流量等复杂数据常表现为: 非线性:趋势+季节+突变+噪声 多尺度:高频扰动与低频变化共存 长时依赖:远期信息也影响当前预测 传统模型(如 ARIMA、LSTM)往往无法兼顾全局趋势建模与局部扰动感知,因此我们提出一种 …

【Linux Learning】SSH连线出现警告:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

问题&#xff1a;WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is al…

轻量级密码算法PRESENT的C语言实现(无第三方库)

一、PRESENT算法介绍 PRESENT是一种超轻量级分组密码算法&#xff0c;由Bogdanov等人在2007年提出&#xff0c;专门为资源受限环境如RFID标签和传感器网络设计。该算法在硬件实现上仅需1570个门等效电路(GE)&#xff0c;在保持较高安全性的同时实现了极小的硬件占用空间。PRES…

if的简化书写,提高执行效率

很多时候可能有下面判断 if(a0) {b1;} else if(a1) {b0;} 就是ba的反向值&#xff1a; a0;b1&#xff1b; a1;b0; 这时&#xff0c;可以简化如下&#xff1a; ba^1 使用异或&#xff0c;程序更简洁&#xff0c;执行效率也更高 其他的也可以类似使用按位异或优化代码

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…

bash挖矿木马事件全景复盘与企业级防御实战20250612

&#x1f427; CentOS “-bash 挖矿木马” 事件全景复盘与企业级防御实战 ✍️ 作者&#xff1a;Narutolxy | &#x1f4c5; 日期&#xff1a;2025-06-12 | &#x1f3f7;️ 标签&#xff1a;Linux 安全、应急响应、运维加固、实战复盘 &#x1f4d8; 内容简介 本文是一场真实…

「Linux中Shell命令」Shell命令基础

知识点详细解析 Shell简介 Shell是Linux操作系统系统中用户与操作系统内核交互的接口。它既是命令解释器,负责接收用户输入的命令并将其转换为内核能够理解的指令,也是一种脚本编程语言。作为Linux操作系统的重要组成部分,Shell扮演着用户与系统内核之间的"中间人"…

202557读书笔记|《梦里花落知多少(轻经典)》——有你在的地方才最美

《梦里花落知多少&#xff08;轻经典&#xff09;》作者三毛&#xff0c;物极必反&#xff0c;阴晴圆缺&#xff0c;小满即万全么&#xff1f;因为幸福过于满溢。所以幸福被收走了。 没有看过太多三毛的作品&#xff0c;给我的感觉她是很敏感&#xff0c;多愁善感及没有安全感…

对象映射 C# 中 Mapster 和 AutoMapper 的比较

Mapster和AutoMapper是C#领域两大主流对象映射库&#xff0c;各具特色。Mapster以高性能著称&#xff0c;使用表达式树实现零反射映射&#xff0c;首次编译后执行效率极高&#xff0c;适合对性能敏感的场景&#xff1b;AutoMapper则提供更丰富的功能集&#xff0c;如条件映射和…