在理解什么是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. 新的学习历程-python3 基本运算

    1 print(5 / 2) # 2.5 2 print(5 // 3) #1 取整除 3 print(5 % 3) #2 取余数(取模) 4 print(5 ** 2) #25 5的2次方 5 pr ...

  2. 让自己的笔记本变wifi,如何设置呢?

    让自己的笔记本变wifi,如何设置呢?   笔记本变wifi,居然有这样的好事,没错,就是这样的,我也是才知道,哈哈.果然,世上无奇不有,只是你不知罢了.   以win10笔记本为例,亲试有效,附上链 ...

  3. 关于el-popover的箭头颜色

    因为会从四个方向不定弹出 所以需要写入4个方向: 注意弹出框是动态插入body中的,需写入根部样式中 如果有多个地方用到且颜色都不一样,可以用类名区分,elm提供了 然后把前面的 .el-popper ...

  4. vue学习 第三天css基础

    1.emment语法(作用:提升html和css书写速度) 2. 复合选择器 1)由两个或多个基础选择器,通过不同的方式组合而成的,可以更准确.更高效的选择目标元素(标签) 2)后代选择器.子元素选择 ...

  5. css - content-visibility

    css - content-visibility content-visibility:实现可见网页只加载可见区域内容 介绍 content-visibility是一个css属性,它控制一个元素是否呈 ...

  6. linux挂载磁盘步骤

    一.查看需要挂载设备,如下sda(默认路径/dev/sda) 二.新建分区,执行如下命令进入操作 fdisk /dev/sda 1.m 查看可操作的命令 2.键入 n ,根据需要新建分区 3.键入 d ...

  7. ENGG1340 Computer Programming II

    课程内容笔记,自用,不涉及任何 assignment,exam 答案 Notes for self use, not included any assignments or exams Module ...

  8. 【QT+MSVC2015】不安装VS2015,QT配置MSVC2015编译环境

    本文介绍不安装VS2015的情况下在QT5.10中配置MSVC2015编译器. 系统:windows系统 QT版本:5.10.1 所需文件: QT安装程序--qt-opensource-windows ...

  9. WOW事件大全(翻译对照)

    魔兽世界(WOW)插件开发事件大全 ACHIEVEMENT_EARNED 取得的成就 ACHIEVEMENT_SEARCH_UPDATED 已更新成就搜索 ACTIONBAR_HIDEGRID 动作条 ...

  10. Java语言打印空心菱形

    打印空心菱形如果一开始觉得比较困难的话,那么不妨分成几个步骤走完成菱形的打印. 1.先打印一个直角三角形(都是由星星组成的) 代码如下: import java.util.Scanner;//导入Sc ...