云原生--核心组件-容器篇-3-Docker核心之-镜像
1、定义与作用
-
定义:
Docker镜像是一个只读的模板,包含运行应用程序所需的所有内容,包括代码、依赖库、环境变量、配置文件等。简单来说,Docker镜像是一个轻量级、独立、可执行的软件包,它包含了运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件等。可以看作是应用程序或服务的“快照”。 -
核心目标:
确保应用在不同环境中(开发、测试、生产)的行为一致,实现“一次构建,随处运行”。 -
作用:
- 环境一致性:避免因环境差异导致的“在我的机器上能运行”问题。
- 快速部署:通过镜像快速创建容器,缩短应用部署时间。
- 版本管理:通过标签(Tag)管理不同版本(如 nginx:latest, python:3.9-slim)。
2、核心特性
(1)、分层存储(Union File System)
镜像由多个只读层(Layer)叠加而成,每一层都是基于前一层进行修改的结果。每一层都对应为Dockerfile中的一条指令(如RUN, COPY)。
- 优势:
- 高效存储:多个镜像可共享相同的基础层(如多个镜像共享FROM ubuntu层)。
- 快速构建:仅需更新修改的层,而非整个镜像。
dockerfile示例:
FROM ubuntu:20.04 # 基础层
RUN apt-get update # 第二层
COPY . /app # 第三层
(2)、只读性(不可变)
- 镜像本身不可修改
若需更新,需通过Dockerfile重新构建新镜像。 - 容器可写层
容器启动时,在镜像顶层添加一个可写层(Writable Layer),所有修改(如文件写入)仅在此层生效,原始镜像不变。
(3)、版本管理
- 标签(Tag)
通过标签区分不同版本,如nginx:latest(最新版)、nginx:1.21(特定版本)。 - 多标签支持
一个镜像可同时拥有多个标签(如my-app:1.0和my-app:stable)。
(4)、轻量高效
- 资源占用低
镜像仅包含应用运行所需的最小文件系统,远小于传统虚拟机镜像。 - 快速拉取
由于分层存储和缓存机制,镜像下载仅需获取未缓存的层。
(5)、可移植性
镜像是自包含应用运行必须的所有产物,因此可以在任何支持Docker的环境中运行,无论是在开发者的笔记本电脑上还是在生产服务器上。
3、镜像的生命周期
(1)、构建镜像
- 方法1:Dockerfile构建
- 步骤:
- 编写Dockerfile(定义镜像构建步骤)。
- 运行docker build 命令构建镜像。
- 步骤:
Dockerfile示例:
# 使用官方的Python基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 将当前目录下的所有文件复制到工作目录
COPY . /app
# 安装应用所需的依赖
RUN pip install --no-cache-dir -r requirements.txt
# 暴露应用运行的端口
EXPOSE 8000
# 定义容器启动时执行的命令
CMD ["python", "app.py"]说明:
Dockerfile是一个文本文件,包含了一系列的指令,用于描述如何构建镜像。
bash示例:
docker build -t my-python-app:1.0 .
- 方法2:基于容器提交(docker commit)
可以将一个运行中的容器的状态保存为一个新的镜像。- 步骤:
- 运行容器并修改其内容。
- 使用docker commit将容器提交为新镜像。
- 步骤:
bash示例:
# 启动一个容器
docker run -it ubuntu bash
# 在容器中进行一些操作,如安装软件等
apt-get update
apt-get install -y vim
# 退出容器
exit
# 将容器保存为镜像
docker commit <容器ID> my-ubuntu-with-vim
(2)、存储与管理
- 本地存储:
镜像存储在Docker守护进程的镜像仓库中,可通过docker images查看。 - 远程仓库:
- Docker Hub:公共仓库,存储官方和社区镜像。
- 私有仓库:如企业内部的Harbor、AWS ECR,用于存储敏感或私有镜像。
(3)、分发与共享
- 推送镜像:
bash示例:
docker tag my-python-app:1.0 registry.example.com/my-python-app:1.0
docker push registry.example.com/my-python-app:1.0
- 拉取镜像:
bash示例:
docker pull nginx:latest
4、常用Docker镜像命令
5、Docker镜像的应用场景
(1)、开发环境一致性
- 问题:不同开发者环境配置差异导致的Bug。
- 解决方案:通过镜像统一开发环境,例如:
bash示例:
docker run -it -v $(pwd):/app my-python-dev-env
(2)、CI/CD流水线
- 流程:
- 构建镜像并推送至仓库。
- 在CI/CD工具(如Jenkins、GitLab CI)中自动部署镜像。
yaml示例:(GitLab CI 配置片段)
build:script:- docker build -t my-app:$CI_COMMIT_SHA .- docker push registry.example.com/my-app:$CI_COMMIT_SHA
(3)、微服务部署
- 场景:每个微服务独立打包为镜像,通过Kubernetes管理。
yaml示例:(Kubernetes Deployment配置)
apiVersion: apps/v1
kind: Deployment
spec:template:spec:containers:- name: frontendimage: registry.example.com/frontend:1.0- name: backendimage: registry.example.com/backend:2.0
6、进阶特性与最佳实践
(1)、多阶段构建(Multi-stage Build)
- 目的:减少镜像体积,提升安全性。
dockerfile示例:
# 第一阶段:编译代码
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp# 第二阶段:运行时镜像
FROM alpine:3.16
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
(2)、内核无关性
- 说明:镜像不包含内核,仅包含用户空间文件系统(如/bin, /etc)。
- 优势:容器直接使用宿主机内核,实现轻量级虚拟化。
(3)、安全扫描
- 工具:Trivy、Clair等。
bash示例:
trivy image my-app:latest # 检查镜像漏洞
7、其他问题
(1)、查看镜像的详细信息
bash示例:
docker inspect my-image:tag # 查看元数据和配置
docker history my-image:tag # 查看层历史
(2)、删除未使用的镜像
bash示例:
docker image prune -a # 删除所有未被容器使用的镜像
(3)、镜像与容器的关系
- 类比:
- 镜像:类似“类(Class)”,定义容器的模板。
- 容器:类似“对象(Object)”,是镜像的运行实例。
8、总结
- Docker镜像是容器化的核心,通过分层存储和版本管理技术,实现了高效、一致的应用部署。
- 关键价值:
- 环境一致性:避免依赖冲突。
- 快速迭代:通过CI/CD自动化构建和推送。
- 轻量高效:仅打包必要文件,资源占用低。
逆风前行,Dare To Be!!!
相关文章:
云原生--核心组件-容器篇-3-Docker核心之-镜像
1、定义与作用 定义: Docker镜像是一个只读的模板,包含运行应用程序所需的所有内容,包括代码、依赖库、环境变量、配置文件等。简单来说,Docker镜像是一个轻量级、独立、可执行的软件包,它包含了运行某个软件所需的所有…...
Dify与n8n深度对比:AI应用开发与自动化工作流的双轨选择
Dify与n8n深度对比:AI应用开发与自动化工作流的双轨选择 在数字化转型加速的2025年,Dify和n8n作为两大主流工具,分别代表了AI应用开发与自动化工作流领域的顶尖解决方案。本文将从核心定位、功能特性、使用场景等维度展开对比,为…...
AI算法优化建筑形态与能耗管理 实现方案和技术架构
以下是基于AI算法优化建筑形态与能耗管理的实现方案与技术架构,结合行业实践与前沿技术趋势,分层次解析核心要素及实施路径: 一、技术架构设计 1. 数据采集与感知层 多源数据融合 传感器网络:部署温湿度、CO₂浓度、光照、人流密度等传感器,构建实时数据采集体系(如北京…...
【互联网架构解析】从物理层到应用层的全栈组成
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现(Python网络请求)运行结果验证 三、性能对比测试方法论量化数据对比结果分…...
Redis和MQ的区别
redis是一个高性能的key-value数据库,支持消息推送功能,可以当做一个轻量级的队列服务器使用。 redis只是提供一个高性能的、原子操作内存键值队,具有高速访问能力,虽然可以做消息队列的存储,但不具备消息队列的任何功…...
多系统安装经验,移动硬盘,ubuntu grub修改/etc/fstab 移动硬盘需要改成nfts格式才能放steam游戏
笔记本一个系统,移动硬盘两个系统,当前系统sda4.jpg 移动硬盘需要再装一个linux会有boot/efi,启动的时候grub界面才能识别,单linux没有efi别的电脑识别不到 没efi甚至启动不了grub 按下f6.jpg 看看笔记本grub能不能识别得到移动硬…...
4.26学习——web刷题
把攻防世界的web做了20道左右,挑了几道学到东西的题目记录一下 攻防世界warmup 进到环境中读取源代码发先有个提示:source.php,进去看看 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$wh…...
Go 语言中的实时交互式编程环境
在 Go 语言中,确实有几种方法可以实现类似 Python REPL 的实时交互式编程体验,让你可以实时编写代码并查看输出,而无需每次都编译运行整个程序。 但是需要注意的是,由于 Go 是编译型语言,完全的实时交互体验不如解释型…...
动态规划求解leetcode300.最长递增子序列(LIS)详解
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#…...
冯·诺依曼和哈佛架构两种架构的总线组成及核心特点
在计算机体系结构中,哈佛架构和冯诺依曼架构是两种不同的存储与总线设计范式,它们的总线组成和访问方式有显著差异。以下是两种架构的总线组成及核心特点的详细分析: 1. 冯诺依曼架构(Von Neumann Architecture) 核心…...
7.学习笔记-Maven进阶(P75-P89)-进度(p75-P80)
1.MAVEN-01-分模块开发的意义 (一)分模块开发意义 模块可以按功能划分,也可以按团队划分,所以把domain的方法抽取出来,进行共享,从而提高开发 的效率。 (1)分模块开发的意义…...
Java——令牌技术
目录 一、何为令牌 JWT令牌 介绍 JWT组成 二、JWT用于验证用户登录 三、JWT令牌生成和校验 简单用法 1.创建生成密钥的方法 2.接着添加过期时间,密钥,BASE64解码密钥的属性以及生成token的方法,合并上面生成密钥的方法,下面…...
【含文档+PPT+源码】基于Python校园跑腿管理系统设计与实现
项目介绍 本课程演示的是一款基于Python校园跑腿管理系统设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.…...
Spring AI Alibaba - Milvus 初体验,实现知识库效果
先看效果 数据被存储在 milvus 中,包括原始数据和向量数据。 大模型使用向量化数据的回答: 环境准备 安装 milvus Milvus 是一款专为向量相似性搜索设计的高性能开源数据库。 本地测试环境可以直接 Standalone 模式安装,需要用到 docke…...
arcpy列表函数的应用
arcpy.ListDatasets() 该函数用于列出指定工作空间中的所有数据集(如要素数据集、栅格数据集等)。 语法: python arcpy.ListDatasets(wild_cardNone, feature_typeNone) • wild_card:用于筛选数据集名称的通配符。 • feat…...
上位机知识篇---时钟分频
文章目录 前言 前言 本文简单介绍了一下时钟分频。时钟分频(Clock Division)是数字电路设计中常见的技术,用于将高频时钟信号转换为较低频率的时钟信号,以满足不同模块的时序需求。它在处理器、FPGA、SoC(片上系统&am…...
Redis的两种持久化方式:RDB和AOF
Redis持久化概述 Redis作为内存数据库,数据存储在内存中。为了保证数据在服务器重启或宕机时不丢失,Redis提供了两种持久化方案: RDB(Redis Database):定时生成内存快照 AOF(Append Only File&…...
1位的推理框架bitnet.cpp
源码:https://github.com/microsoft/BitNet bitnet.cpp 技术解析 bitnet.cpp 是专为 低精度大语言模型(如 BitNet b1.58) 设计的官方推理框架,其核心特性如下: 一、架构优势 全栈优化引擎 提供高度优化…...
教育领域的AIGC革命:构建多模态智能教学系统
一、智能教育系统技术架构 1.1 教育场景技术需求 教学环节 传统痛点 AIGC解决方案 课程设计 耗时耗力,创新不足 跨学科教案自动生成 课堂互动 单向传授,参与度低 多模态交互式虚拟教师 作业批改 重复劳动,反馈延迟 全自动批改与个性化评语 学…...
Simulink 数据存储机制:Base Workspace、Model Workspace 与 Data Dictionary 的核心区别
1. 核心定位与设计目标 存储方式本质核心设计目标Base WorkspaceMATLAB全局内存空间临时数据交互,快速原型开发Model Workspace模型私有数据容器模型数据隔离,防止命名冲突Data Dictionary专业数据管理文件(.sldd)复杂系统数据治理,支持团队…...
TI---UART通信
一、SysConfig 中 UART 配置的核心参数与生成逻辑 1. 基础参数配置(图形化界面) 配置项功能说明生成代码影响模式选择主机模式(Master)/ 从机模式(仅部分芯片支持,如 UART 作为 I2C 桥接)生成…...
spark总结
文章目录 一 spark简介1.1 什么是spark1.2 spark运行过程1.2.1 组成1.2.2 过程1.2.3 事例(词频统计WordCount程序) 1.3 spark运行模式1.4 pyspark 二 SparkCore2.1 RDD介绍2.2 RDD编写2.3 RDD算子2.4 RDD的持久化2.4.1 为什么需要缓存和检查点机制&#…...
【随笔】地理探测器原理与运用
文章目录 一、作者与下载1.1 软件作者1.2 软件下载 二、原理简述2.1 空间分异性与地理探测器的提出2.2 地理探测器的数学模型2.21 分异及因子探测2.22 交互作用探测2.23 风险区与生态探测 三、使用:excel 一、作者与下载 1.1 软件作者 作者: DOI: 10.…...
补码底层逻辑探讨
在计算机里面以二进制进行存储,二进制并不能区分正负数 为了处理负数,人们想了很多办法 1.原码 首先,很直观的区分方法就是设置一个flag 在二进制前面加一个符号位,0是正、1是负 但是在电路里面处理这样的信号却很复杂&#…...
第二大脑-个人知识库
原文链接:https://i68.ltd/notes/posts/20250407-llm-person-kb/ Quivr-第二大脑一样的个人助手,利用AI技术增强个人生产力 将 GenAI 集成到您的应用程序中的个性化 RAG,专注于您的产品而非 RAG项目仓库:https://github.com/QuivrHQ/quivr Star:37.7k官网:https:/…...
泰勒展开概念解释(图优化SLAM中非线性系统的线性处理)
1. 泰勒展开 泰勒展开是一种用多项式近似复杂函数的数学方法,其核心思想是通过函数在某一点的各阶导数信息,构建一个多项式来逼近原函数,即通过函数在某一点x0的各阶导数值,构造一个多项式 P(x),使得该多项式在 x0 附近与原函数 f(x) 的值及其导数尽可能匹配,数学形式为…...
CANape与MATLAB数据接口技术详解
目录 CANape与MATLAB数据接口技术详解 一、数据互操作背景与意义 1.1 汽车电子开发中的测量需求 1.2 技术标准演进分析 二、CANape数据导出深度解析 2.1 MDF文件结构说明 2.2 转换流程优化建议 三、MATLAB数据处理进阶技术 3.1 数据质量评估脚本 3.2 数据可视化增强方…...
per-task affinity 是什么?
Per-Task Affinity(任务级CPU亲和性)详解 Per-Task Affinity 是 Linux 调度器提供的一种机制,允许将单个任务(进程/线程)绑定到特定的 CPU 核心(或核心集合)上运行,从而优化性能、减…...
基于先进MCU的机器人运动控制系统设计:理论、实践与前沿技术
摘要:随着机器人技术的飞速发展,对运动控制系统的性能要求日益严苛。本文聚焦于基于先进MCU(微控制单元)的机器人运动控制系统设计,深入剖析其理论基础、实践方法与前沿技术。以国科安芯的MCU芯片AS32A601为例…...
Network.framework 的引入,不是为了取代 URLSession
Network.framework 的引入,不是为了取代 URLSession 如果你感觉 Network.framework 的引入, 可能是为了取代 URLSession, 那你就大错特错了!这里需要非常准确地区分一下: 🔵 Network.framework 不是为了取代 URLSession。 &…...
gradle-缓存、依赖、初始化脚本、仓库配置目录详解
1.启用init.gradle文件的方法 在命令置顶文件,例如gradle --init-script yourdir/init.gradle -q taskName,你可以多次输入此命令来制定多个init文件把init.gradle文件放到USER_HOME/.gradle/目录下把以.gradle结尾的文件放到USER_HOME/.gradle/.init.d/目录下把以…...
提示词的神奇魔力——如何通过它改变AI的输出
一、引言:初识AI的惊艳与迷茫 最近这段时间,我像很多人一样,一头扎进了生成式AI的世界,尝试使用各种工具,从文字助手到图像生成器。一开始,我被它们的能力深深震撼,感觉就像突然拥有了一个无所…...
零基础上手Python数据分析 (24):Scikit-learn 机器学习初步 - 让数据预测未来!
写在前面 在前面的学习中,我们已经掌握了使用 Python、Pandas、NumPy、Matplotlib 和 Seaborn 进行数据处理、分析和可视化的全套核心技能。我们学会了如何从数据中提取信息、清洗数据、整合数据、探索数据模式并将其可视化呈现。 现在,我们站在了一个新的起点。数据分析不仅…...
React 与 Vue 虚拟 DOM 实现原理深度对比:从理论到实践
在现代前端开发中,React 和 Vue 作为最流行的两大框架,都采用了虚拟 DOM(Virtual DOM) 技术来优化渲染性能。虚拟 DOM 的核心思想是通过 JavaScript 对象模拟真实 DOM,减少直接操作 DOM 的开销,从而提高页面…...
结合五层网络结构讲一下用户在浏览器输入一个网址并按下回车后到底发生了什么?
文章目录 实际应用第一步:用户在浏览器输入 www.baidu.com 并按下回车1. 浏览器触发域名解析(DNS查询) 第二步:DNS请求的逐层封装与传输1. 应用层(DNS协议)2. 传输层(UDP协议)3. 网络…...
关于Code_流苏:商务合作、产品开发、计算机科普、自媒体运营,一起见证科技与艺术的交融!
Code_流苏 🌿 名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 🌟 欢迎来到Code_流苏的CSDN主页 —— 与我一起&…...
Webpack模块打包工具
1. 认识webpack的基本用法步骤创建项目->下载webpack webpack-cli -> npm init -y -> package.json的scripts中配置webpack默认打包入口:src/index.js默认打包出口: dist/main.js2. 认识webpack.config.js的基本配置loader -> 打包css,less…...
crossOriginLoading使用说明
1. 说明 此配置用于控制 Webpack 动态加载的代码块(chunk)(例如代码分割或懒加载的模块)在跨域(不同域名)加载时的行为。它通过为动态生成的 <script>标签添加 crossorigin 属性,确保符合…...
Linux系统性能调优技巧分享
在数字化时代,Linux 系统以其开源、稳定、高效的特性,成为服务器、云计算、物联网等领域的核心支撑。然而,随着业务规模的扩大和负载的增加,系统性能问题逐渐凸显。掌握 Linux 系统性能调优技巧,不仅能提升系统运行效率,还能降低运维成本。下面从多个方面介绍实用的性能调…...
在Windows11中配置Git+SSH环境,本此实践使用Gitee(码云),方法同样适用于其它绝大部分Git服务
1.下载并安装Git 进入官网下载 Git - Downloading Package 选择下载Standalone Installer安装包,看自己电脑是64-bit还是32-bit(一般都是64-bit) 双击安装包进行安装,Next 这里可以自定义安装路径 这里可以勾选添加桌面快捷方式…...
【软考-架构】14、软件可靠性基础
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 软件可靠性基本概念软件可靠性建模软件可靠性管理软件可靠性设计N版本程序设计恢复块设计(动态冗余)双机容错技术、集群技术负载均衡软件可靠性测试…...
怎样理解ceph?
Ceph 是一个开源的、高度可扩展的 分布式存储系统,设计用于提供高性能、高可靠性的对象存储(Object)、块存储(Block)和文件存储(File)服务。它的核心思想是通过去中心化的架构和智能的数据分布策…...
《AI大模型趣味实战》智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用 引言 随着人工智能技术的飞速发展,智能Agent与模型上下文协议(MCP)的应用场景越来越广泛。本报告将详细介绍如何基于Python Flask框架构建一个智能应用&…...
Pygame字体与UI:打造游戏菜单和HUD界面
Pygame字体与UI:打造游戏菜单和HUD界面 在现代游戏中,用户界面(UI)是玩家与游戏互动的重要桥梁。一个精心设计的UI不仅能够提升游戏的视觉效果,还能增强玩家的游戏体验。Pygame作为一个强大的游戏开发库,提供了丰富的工具和方法来创建和管理UI元素。本文将详细介绍如何使…...
游戏引擎学习第246天:将 Worker 上下文移到主线程创建
回顾并为今天的工作做准备 关于GPU驱动bug的问题,目前本地机器上没有复现。如果有问题,昨天的测试就应该已经暴露出来了。当前演示的是游戏的过场动画,运行正常,使用的是硬件渲染。 之前使用软件渲染时没有遇到太多问题ÿ…...
系统设计(2)—Redis—消息队列—数据库—熔限降
Redis 缓存设计 在高并发系统中,缓存是提升性能、减轻后端负载的杀手锏。Redis 作为内存级的高性能缓存数据库,被广泛应用于各类系统设计中。利用 Redis,将热点数据存储在内存中,可以加速读写并大幅降低对后端关系型数据库的直接…...
第十六届蓝桥杯大赛软件赛省赛第二场 C/C++ 大学 A 组
比赛还没有开始,竟然忘记写using namespace std; //debug半天没看明白 (平时cv多了 然后就是忘记那个编译参数,(好惨的开局 编译参数-stdc11 以下都是赛时所写代码,赛时无聊时把思路都打上去了(除了倒数第二题&#…...
HiSpark Studio如何使用Trae(Marscode)插件
引言 我现在非常喜欢使用编程辅助插件,用的最多的是Trae(以前叫Marscode)。以前华为的DevEco Device Tools是基于VSCode的,直接使用官方的插件市场就可以安装了。现在海思提供了自己的HiSpark Studio,比原来的Device …...
Netmiko连接池与长连接优化
背景与原理 在网络自动化中,频繁创建和断开 SSH 连接会带来以下问题: 性能损耗:每次连接需经历 TCP 握手、SSH 协商、用户认证等流程,耗时约 1~3 秒。资源浪费:设备端可能限制并发连接数,频繁连接易触发阈…...
10:00面试,10:08就出来了,面试问的问题太。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这…...