Docker镜像原理

镜像的介绍

Docker 镜像含有启动容器所需要的文件系统及其内容,镜像采用分层构建机制,最底层为Bootfs,其之为rootfs
在这里插入图片描述

  • bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源
  • rootfs:(如图也就是一些/dev /proc /bin)位于bootfs之上表现为docker容器的根文件系统,传统模式中,系统启动之时,内核挂载rootfs时会将其挂载为只读模式,完整性自检完成后,将其挂载为读写模式。docker中rootfs由内核挂载只读模式,而后通过联合挂载技术额外挂载一个可写层(写时复制)
    在这里插入图片描述

其中位于上层的是父镜像层,最下面一层是基础镜像,最上层的是“可读写层(容器层)” 其余层都是“只读层(镜像层)”,删除容器后可写层一定会被删除(所以一般会把数据挂载宿主机上),所以容器的改动,都只会发生在容器层,其他层都是可读的

一些细节:
1、添加文件:新文件会添加在容器层中
2、读取文件:从上往下找,在镜像层找到后,会复制到容器层
3、修改文件:与读文件类似,在下层找到后复制到容器层才能修改
4、删除文件:同上

一些问题:
为什么要分层?
答:共享资源,删少服务器存储大量镜像时占用大量资源
修改了一个容器的一层,其他容器会不会有影响?
答:不会,因为写时复制机制

联合挂载技术

AUFS:高级多层统一文件系统用于为linux文件系统实现联合挂载,aufs是unionfs的重新实现(貌似是unionfs的代码写的太烂了),Docker 最初用aufs作为容器文件系统层,不过不同的linux系统会有不同的存储后端,如btrfs,devicemapper,overlayfs,devicemapper(性能很差)

ps:目前推荐overlay2也是默认的,之前是使用aufs

Docker Registry

Docker Registry 是存放镜像仓库的的地方,包括镜像的层次结构和元数据,在启动时docke daemon 会试图从本地获取,本地找不到就会从Registry(可配置)中下载该镜像
在这里插入图片描述

Docker Registry 分类

  • Sponsor Registry:第三方 registry供客户和Docker社区使用
  • Mirror Registry: 第三方 registry只让客户使用
  • Vendor Registry: 由发布镜像的供应商提供
  • Prvate Registry: 私有仓库

私有仓库的优势:快,不占带宽,私有性,方便定制

私有仓库快,不占带宽,方便定制

Docker Registry 分类的构成

Respository:

  • 某个特定镜像的所有版本组成
  • 一个Registry 可以存储多个Repository仓库名 = "用户名/仓库名"也分为用户名和仓库名,每个残酷又可以与多个tag,每个标签对应一个镜像

Index:

  • 维护用户账户,镜像的校验以及公共命名空间信息
  • 为Registry提供了一个完成用户认证等功能的检索接口

Docker Registry

  • 仓库中的仓库通常由开发人员制作,然后推送到registry 中一些基础镜像是由工作人员制作的
    在这里插入图片描述

默认从docker hub 拉取镜像

docker hub 一些特性:
  • 镜像仓库:提供社区或者企业镜像,可以推送你的镜像,也可以拉取镜像
  • 自动构建:改变仓库源码的时候自动构建镜像
  • Webhooks:和自动构建配合使用
  • 组织:组织权限管理

其他的镜像仓库:
quay.io
默认是dockerhub

制作镜像的途径

镜像的生成途径

  • Dockerfile
  • 基于容器制作
基于容器制作镜像

都知道容器在退出是不会保存,容器层上的数据的,但是我们可以通过commit 命令对容器层的改变创建一个新的镜像,因为在创建的过程中容器的数据可能会改变所以我们要使用 -p 参数来暂停容器

docker commit 命令修改默认运行的命令

在这里插入图片描述

导入导出

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值