Docker镜像的原理

简介: centos7系统包括2部分,linux内核,作用是提供操作系统的基本功能,和机器硬件交互,如何读取磁盘数据,管理网络,使用C编写的,由linus的开发团队,内核只提供操作系统的基本功能和特性,如内存管理、进程调度、文件管理等等。系统发行版,作用是提供软件功能,例如centos发行版,ubuntu发行版,suse发行版。centos发行版,yum安装包管理;ubuntu发行版。

centos7系统
包括2部分,

linux内核,作用是提供操作系统的基本功能,和机器硬件交互,如何读取磁盘数据,管理网络,使用C编写的,由linus的开发团队,内核只提供操作系统的基本功能和特性,如内存管理、进程调度、文件管理等等。
系统发行版,作用是提供软件功能,例如centos发行版,ubuntu发行版,suse发行版。centos发行版,yum安装包管理;ubuntu发行版。

内核都公用宿主机的内核,上层的发行版,自由替换。

使用docker,可以切换不同的发行版,内核使用的都是宿主机的内核。
docker run -it 镜像id bash
运行容器,且进入容器内,参数 解释 -i 交互式命令操作 -t 开启一个终端 bash 进入容器后执行的命令
查看容器内的发行版本。
cat /ect/redhat-release

使用宿主机的内容,使用的发行版是容器内的发行版。
下面改为使用ubuntu的发行版
docker run -it ubuntu bash
查看容器内的发行版本
cat /etc/lsb-release

进入到opensuse
docker run -it opensuse bash
cat /etc/SuSe-release

总结
1、一个完整的系统,是由linux的内核+发行版,才组成了一个可以使用的完整系统。
2、利用docker容器,可以获取不同发行版镜像,然后基于该镜像,运行出各种容器去使用。

linux的一个完整系统包括两部分一个是linux内核,主要是与底层硬件进行交互的,例如如何获取磁盘信息,管理网络。另一个是发行版。
利用docker容器可以获取不同的发行版镜像,然后基于该镜像,运行出各种容器去使用,底层还是用的相同的一个linux内核。

什么是docker镜像
docker image搜索地址
https://hub.docker.com/
1、一个完整的docker镜像可以创建出docker容器的运行,例如一个centos:7.8.2003镜像文件,或取的是centos7的发行版,这个个镜像文件不包含linux内核,所有这个镜像只有200多M
docker的架构,镜像就是一个【发行版】的作用,需要准备一个linux内核,然后上层使用不同的【发行版】就好,然后可以自由的使用各个版本系统,兼容多种环境。
image.png

Docker镜像,分层原理
第一层,依赖Linux内核,这个内核是宿主机的,镜像如果想运行是先读取宿主机的内核的,自己加载一个Bootfs。
Bootfs(boot-file-system)主要包含bootloader和kermel,bootloader主要是引导加载kermel,Linux刚启动时会加载bootfs文件系统。

第二层,当内核加载完成后,就会启动第二层,获取发行版,rootfs,完成文件系统的基本操作。
Rootfs(root-file system),在bootfs之上,包含的就是典型的Linux系统中的/dev、/proc、/bin、/etc等标准目录和文件。rootfs就是各种不同操作系统的发行版,比如Ubuntu,Centos等等。

第三层,定制化安装依赖,容器是做什么的就安装什么依赖,使用centos提供的软件管理, yum install nginx

第四层,Docker层,容器层,这一次与其他层是有区别的,上面的层都是只读层,不可以修改的,只有容器层是可修改的。
docker通过 union file system联合文件系统,将上述不同的每一层,整合为一个文件系统,

dockerfile的作用,自定义docker镜像的每一层的作用。

小结:
1、当通过一个image启动容器时,docker会在该image最顶层,添加一个读写文件系统做为容器,然后运行该容器。
2、docker镜像本质是基于UnionFS管理的分层系统
3、docker镜像为什么才几百兆
因为docker只有rootfs和其他镜像层,共用宿主机的linux内核(bootfs),因此很小。
4、为什么下载一个docker的nginx镜像,需要133MB,nginx安装才几兆
因为docker的nginx镜像是分层的,nginx安装包的确是几M,但是一个用于运行nginx的 镜像文件,依赖于父镜像(上一层),和基础镜像(发行版),所以下载的nginx镜像有100多M。

进入到正在运行的容器内,命令是docker exec

docker exec -it 容器名称 bash

如果想定义一个mysql5.6镜像,我们需要做
获取基础镜像,选择一个发行版平台(ubutu,centos)
在centos镜像中安装mysql5.6软件。

Docker为什么分层镜像

镜像分层一大好处就是共享资源,例如有多个镜像都来自同一个base镜像,那么在docker host只需要存储一份base镜像。
内存里也只需要加载一份host,即可为多个容器服务。
即使多个容器共享一个base镜像,某个容器修改了base镜像的内容,例如修改/etc/下配置文件,其他容器的/etc/下内容是不会被修改的,修改动作只限制在单个容器内,这就是容器的写入时复制特性。
改的是可写的容器层,当容器启动后,一个新的可写层被加载到镜像的顶部,这一层被成为容器层,容器层下的都称为镜像层。最上面的是可写层。下面的都是只读层。
image.png
image.png

只有当需要修改时才复制一份数据,这种特性被称作Copy-on-Write,可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

Docker镜像的内容
docker镜像层级管理的方式大大方便Docker镜像的分发和存储,Docker hub是为全世界的镜像仓库。
Docker镜像代表一个容器的文件系统内容
镜像层级技术属于 联合文件系统
容器是一个动态的环境,每一层镜像里的文件都属于静态内容
dockerfile 里的ENV VOLUME CMD 等内容都会落到容器环境里。

目录
相关文章
|
2月前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
497 90
|
11天前
|
存储 运维 应用服务中间件
Docker Image即Docker镜像
Docker 镜像是 Docker 容器的基础,包含了运行应用程序所需的一切。通过 Dockerfile 可以方便地创建自定义镜像,并且利用 Docker 提供的命令可以轻松管理和使用这些镜像。掌握 Docker 镜像的创建、管理和使用,是进行容器化应用开发和部署的基础技能。希望本文能帮助读者更好地理解 Docker 镜像的概念和操作,提高开发和运维效率。
68 13
|
24天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
145 28
|
2月前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
248 70
|
11天前
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
78 1
|
1月前
|
消息中间件 Linux 数据中心
Docker核心技术:Docker原理之Namespace
通过以上内容,您可以深入了解Docker中的Namespace机制及其在资源隔离中的应用,从而更好地理解和应用Docker技术。
79 25
|
1月前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
137 26
|
2月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
98 27
|
2月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
214 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
142 29