06-Docker镜像

简介: 镜像是轻量级、可执行的独立软件包,包含运行程序所需的代码、库、环境变量等。Docker通过联合文件系统(如UnionFS)实现镜像分层,底层为bootfs和rootfs,上层叠加只读镜像层,容器启动时新增可写容器层,所有修改仅作用于容器层,实现资源隔离与共享,提升复用性与效率。

镜像


镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好行程一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。


Docker 镜像加载原理


联合文件系统


Docker 中的文件存储驱动叫做 storage driver。


Docker 最早支持的stotage driver是 AUFS,它实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFS。


联合文件系统(UnionFS):Union 文件系统,是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite serveral directories into a single virtual filesystem)。


Union文件系统是Docker镜像的基础。镜像可以通过分层来进行集成,基于基础镜像可以制作具体的应用镜像。


特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。


后来出现的docker版本中,除了AUFS,还支持OverlayFS、Btrfs、Device Mapper、VFS、ZFS等storage driver。


bootfs和rootfs


bootfs(boot file system)主要包含 bootloader 和 kernel,bootloader主要是引导加载 kernel,Linux刚启动时会加载bootfs文件系统。


在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已经由 bootfs 转交给内核,此时系统也会卸载 bootfs。


rootfs(root file system),在bootfs之上,包含的就是典型Linux系统中的 /dev/proc/bin/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu、CentOS等。


docker镜像底层层次:



对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接使用Host的Kernel,自己只需要提供rootfs就可以。所以,对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,不同的发行版可以共用bootfs。


有差别的rootfs:



镜像分层


Docker支持扩展现有镜像,创建新的镜像。新镜像是从base镜像一层一层叠加生成的。


例如:


# Version: 0.0.1
FROM debian  # 直接在debain base镜像上构建
MAINTAINER mylinux
RUN apt-get update && apt-get install -y emacs # 安装emacs
RUN apt-get install -y apache2 # 安装apache2
CMD ["/bin/bash"] # 容器启动时运行bash


镜像创建过程:



镜像分层的优势


镜像分层的一个最大好处就是共享资源,方便复制迁移,方便复用。


容器层


当容器启动时,一个新的可写层将被加载到镜像的顶部,这一层通常被称为容器层,容器层之下的都叫镜像层


所有对容器的改动,无论添加、删除、还是修改文件都只会发生在容器层中。


只有容器层是可写的,容器层下面的所有镜像层都是只读的。


如图:


目录
相关文章
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
474 5
|
2天前
|
存储 开发工具 git
05-Gitlab容器环境搭建
本文介绍如何通过Docker搭建Gitlab CE(社区版)环境。包含拉取镜像、创建持久化目录、运行容器并映射配置、数据和日志卷,以及访问Gitlab并初始化项目的方法。详细说明了SSH与HTTP访问配置、初始密码获取,并提供本地代码上传的两种方式,帮助快速部署并使用私有代码仓库。
11 1
|
2天前
|
JavaScript 前端开发 Java
04-Dockerfile示例
本文介绍了三个模块的Docker镜像构建方式:app-web模块打包为war,基于Tomcat镜像;system-server模块为SpringBoot jar包,使用OpenJDK镜像;vue项目则通过Nginx或旧版httpd镜像部署,实现前端静态文件服务。
14 1
|
2天前
|
jenkins Java 持续交付
01-Jenkins前置配置
本文介绍Jenkins与GitLab集成的完整配置流程,包括在GitLab创建Jenkins账号、配置SSH密钥与API Token、Jenkins端的凭据管理、全局安全设置中禁用host key验证,并配置Git用户信息。同时详述节点服务器环境搭建,如JDK、Maven、Node.js安装与环境变量配置,以及通过SSH方式将节点接入Jenkins,实现远程构建与持续集成。
14 1
|
2天前
|
人工智能 网络安全
SSH拉取失败解决方案
导入前后端工程文件(zxyf-management.zip、zxyf-vue.zip),结合本地开发环境快速搭建项目,后续可借助Cursor等AI编程工具提升开发效率。
8 0
 SSH拉取失败解决方案
|
2天前
|
存储 Java 开发工具
4.1 服务端(DevBox)-项目创建
通过Sealos登录并使用Devbox创建SpringBoot项目,结合Cursor智能工具完成云端开发与一键启动,快速实现项目搭建与本地运行,提升开发效率。
11 0
|
2天前
|
存储 监控 数据库
16-CIG重量级监控
CIG(CAdvisor+InfluxDB+Grafana)是一套容器监控解决方案。CAdvisor采集资源数据,InfluxDB存储时序数据,Grafana可视化展示,实现对CPU、内存、网络等指标的持久化监控与分析,支持预警与多源图表展示,适用于Docker环境的全面监控需求。
8 0
 16-CIG重量级监控
|
3天前
|
存储 NoSQL 算法
10-Docker安装Redis
本文介绍Docker安装Redis单机与集群部署,涵盖配置映射、数据持久化及3主3从集群搭建。深入解析Redis集群存储算法:哈希取余、一致性哈希与哈希槽,重点说明槽位分配机制及16384个槽的设计原理,并演示主从扩缩容操作流程。
35 0
|
2天前
|
网络协议 关系型数据库 MySQL
08-云上nacos集群搭建
本文介绍在CCE上使用nacos/nacos-server:2.3.2镜像搭建Nacos集群的完整流程,包括创建数据库、初始化表结构、配置StatefulSet有状态应用、设置headless service及Ingress路由,实现Nacos集群的高可用部署与访问。
5 0
|
2天前
|
存储 关系型数据库 MySQL
07-Mysql容器环境搭建
本文介绍了MySQL的Docker环境搭建全过程,因CPU兼容性问题选用8.4.0-oraclelinux8镜像,详细说明了容器卷映射、配置文件设置、容器启动及数据库导入方法,并涵盖用户权限配置、数据备份与恢复、程序连接配置等关键操作,助力高效部署与管理MySQL数据库。
7 0