在理解什么是docker镜像之前我们需要搞懂虚拟机系统到底是怎么组成的如何实现的,docker中又是如何安装和使用虚拟机系统的,怎样可以高效灵活的切换系统发行版等问题

一、centos7系统长什么样

我们一直以来,是用Vm虚拟机安装的系统,是一个完整的系统文件,包括两部分
  • linux内核,作用是提供操作系统基本功能和机器硬件交互,读取磁盘数据,网络管理等。
  • centos7发行版,作用提供软件功能,例如yum安装包管理等。

    因此,linux内核+centos发行版,就组成一个系统,让我们用户使用。(如:centos、ubuntu...)
查看linux系统的内核和发行版
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@localhost ~]# uname -r
3.10.0-862.el7.x86_64
是否有办法可以灵活的替换发行版,让我们使用不同的【系统】?
  • docker实现了这个功能,技术手段是docker images

# 利用多次docker获取不同的发行版镜像
docker pull centos:7.8.2003 docker pull ubuntu # 确认当前的宿主机发行版
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core) # 运行centos:7.8.2003发行版
# 运行容器且进入容器内
# 参数解释 -i 交互式命令操作 -t 开启一个终端(进行命令操作) afb6fca791e0 容器id bash 进入容器后执行的命令
[root@localhost ~]# docker run -it afb6fca791e0 bash
[root@cac5c0088f69 /]# # 查看容器内的发行版本
[root@cac5c0088f69 /]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core) # 安装运行ubuntu系统查看内核参数
[root@localhost ~]# docker pull ubuntu
[root@localhost ~]# docker run -it ubuntu bash
root@1ff8d92d7c70:/# # 查看容器内的ubuntu版本
root@1ff8d92d7c70:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
#Ubuntu的包管理工具 # 安装suse系统
# 在容器内查找是否opensuse镜像
[root@localhost ~]# docker search opensuse
# 安装opensuse镜像
[root@localhost ~]# docker pull opensuse
# 运行opensuse镜像
[root@localhost ~]# docker run -it opensuse bash
# 查看的opensuset
88997e5e7b5d:/ # cat /etc/SuSE-release
openSUSE 42.3 (x86_64)
VERSION = 42.3
CODENAME = Malachite
# /etc/SuSE-release is deprecated and will be removed in the future, use /etc/os-release instead
上述总结
  • 系统是如何组成的?

    • 一个完整的系统,是由linux内核+发行版,才组成了一个完整的系统
  • docker中是如何安装和使用系统、并完成高效切换的?
    • 利用docker容器,可以获取不同的发行版镜像,然后基于该镜像,运行出各种容器去使用

二、理解什么是docker的镜像原理

在此之前我们需要先了解一下使用docker可以具体解决哪些问题?
docker images的搜索地址: https://hub.docker.com/
假设开发老王的笔记本Windows,需要安装各种软件环境去运行项目,如果你直接安装在宿主机上,那受限于宿主机的环境。

  • 有哪些限制?

    • 环境不兼容,比如软件系统不兼容,你安装的Windows,软件需要linux运行
    • 会将你当前系统的环境搞的一团糟
    • 不如你要卸载这些工具。。很麻烦。
docker解决这些问题,还是Windows系统

  • 解决了环境不兼容问题,在容器中运行linux发行版以及各种软件【windows+docker+容器1(centos)+容器2(ubuntu)】
  • 环境很干净,你安装的所有内容,都在容器里,不想要了直接删除容器
  • 比如你想吧mysql容器内的数据、配置、全部迁移到到服务器上,只需要提交该容器,生成镜像,镜像放到服务器上,直接 docker run运行就可以了
docker架构,镜像就是一个【发行版】的作用,你需要提前准备好一个linux内核,然后上层正常使用不同的发行版就好了,这样你可以自由的使用各种版本系统来兼容环境
docker镜像下载过程中我们发现他耗时是一个块一块下载的,为什么?
[root@localhost ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
a2abf6c4d29d: Already exists
c7a4e4382001: Pull complete
4044b9ba67c9: Pull complete
c8388a79482f: Pull complete
413c8bb60be2: Pull complete
1abfd3011519: Pull complete
Digest: sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
docker镜像原理示意图

既然docker是分层的那我们得到的镜像文件为什么又是一整个?
  • docker通过联合文件系统(union file system),将上图中每一层,整合为一个文件系统,为用户隐藏了多层视角。
上述总结
  1. 当通过一个image启动容器时,docker会在该image最顶层,为我们添加一个读写文件系统作为容器,然后运行该容器。
  2. docker镜像本质是基于union file System管理的分层文件系统。
  3. docker镜像为什么小?
    • 因为docker镜像只有rootfs(发行版)和其他镜像层,共用宿主机的内核,因此很小
  4. 为什么下载一个docker的nginx镜像,要比正常nginx装包大那么多?
    • 因为docker的nginx是分层的,nginx是的安装包就几M,但是一个用于运行nginx的镜像文件,依赖于父镜像(上一层)和基础镜像(发行版),所以下载的nginx镜像才会比正常安装包大

所有博客仅用于自己学习记录,如有侵权请联系删除,文章来源于公开视频资料,如有需要请移步这里:

https://www.bilibili.com/video/BV1o14y1w7b8?p=12&vd_source=6a0e07382af7c460c1a03694e4d4f4c7

docker镜像原理(一)的更多相关文章

  1. 深入分析 Docker 镜像原理

    摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...

  2. Docker镜像原理

    ⒈是什么? 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量以及配置文件等. 引用 UnionFs( ...

  3. Docker镜像原理和最佳实践

    https://yq.aliyun.com/articles/68477 https://yq.aliyun.com/articles/57126  DockerCon 2016 深度解读: Dock ...

  4. Docker基础修炼2--Docker镜像原理及常用命令

    通过前文的讲解对Docker有了基本认识之后,我们开始进入实战操作,本文先演示Docker三要素之镜像原理和相关命令. 本文的演示环境仍然沿用上一篇文章在本地Centos7中安装的环境,如果你本地没有 ...

  5. Docker 学习3 Docker镜像管理基础

    一.docker 常用操作及原理 1.docker 常用操作 2.docker 机制 1.docker client端是通过http或者https与server端通信的.个 2.docker 镜像可以 ...

  6. 004.Docker镜像管理

    一 镜像基本操作 镜像是一个包含程序运行必要依赖环境和代码的只读文件,其本质是磁盘上一系列文件的集合.它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上.镜像是容器运行的基石. 1 ...

  7. docker运行原理与使用总结

    docker运行原理概述 Client-Server架构 docker守护进程运行在宿主机上systemctl start docker daemon进程通过socket从客户端(docker命令)接 ...

  8. Docker镜像的实现原理

    Docker 镜像是怎么实现增量的修改和维护的? 每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去. 通常 Union FS 有两个用途, 一方面可以实 ...

  9. docker 10 docker的镜像原理

    镜像是什么? 镜像是一个轻量级,可执行的软件包,用来打包运行环境和基于运行环境开发的软件包,它包含某个软件运行环境的所有内容.包括代码,运行时的库,配置文件和环境变量 UnionFs(联合文件系统) ...

  10. docker学习笔记-03:docker的镜像原理

    镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件.它包含运行某个环境所需的所有内容,包括代码.库.环境变量和配置文件. 一.镜像是什么 (一).联合文件系统(Unio ...

随机推荐

  1. Spark 要点总结及优化

    Spark Components:  角色组成: Driver :  由SparkContext创建,运行在main方法,负责资源申请与调度,程序分发,接收每个分区的计算结果 Cluster mana ...

  2. qt_2d画图

    qt中如何画图? 使用Qpainter类进行2D绘画 例如以下代码进行直线的绘制 QPainter painter(this);painter.setPen(Qt::red);painter.draw ...

  3. Python实现XX短视频加密算法抓包分析及刷邀请

    Python实现XX短视频加密算法抓包分析及刷邀请 出自:https://zhuanlan.zhihu.com/p/466929667?utm_id=0 Python彳余 一个会常常更新互联网,编程的 ...

  4. Css3中有关的 @media 媒体查询相关的知识

    1,书写格式 @media语法: @media[mediatype][and|not|only]([mediafeature]){ /*css code*/ } 常用mediatype all     ...

  5. 十二、21.提交本地代码到Git仓库并推送到码云

    查看分支 运行git add . 把所有修改过后文件添加到暂存区 git commit 把当前所有的代码提交到rights分支 加-m加一个消息 到此所有的功能模块都已经提交到了rights这个分支里 ...

  6. 2021年爆出log4j漏洞修复

    (1)用户可自查系统是否引用 Apache log4j-core 依赖,没有引用则不受漏洞影响. (2)排查系统中日志配置是否采用远程动态加载模式.(3)排查系统中是否正在使用JDBCAppender ...

  7. QML笔记——MouseArea的覆盖区域

    问题摘要: 初学QML,今天发现一个奇怪的现象,调用MouseArea的位置不同,结果不同. 1.一个简单的qml示例 Rectangle { id: root width: 320 height: ...

  8. MS14-064/CVE-2014-6332漏洞复现(OLE远程代码执行漏洞、IE浏览器漏洞)

    漏洞介绍:MS14-064 Microsoft Internet Explorer Windows OLE Automation Array Remote Code Execution,主要利用IE浏 ...

  9. 使用vault配置加密

    简介 在使用ansible的过程中,不可避免的会存储一些敏感信息,比如在变量文件中存储帐号密码信息等. ansible通过ansible-vault命令行工具来提供对敏感文件的加密和解密. ansib ...

  10. 靶机练习4: SolidState

    信息收集阶段 全端口扫描,查询目标靶机开放端口和服务 sudo nmap -p- -n -v -sS --max-retries=0 172.16.33.35 进行服务版本扫描 nmap -p22,2 ...