目录

1.镜像

1.1分层的镜像

1.2UnionFS(联合文件系统)

1.3Docker镜像加载原理

1.4为什么 Docker 镜像要采用这种分层结构呢

2.Docker镜像commit操作案例

1.docker commit 提交容器副本使之成为一个新的镜像

2.案例演示ubuntu安装vim

3.安装完后,commit我们自己的新镜像 (上面有命令)​

4.启动我们的新镜像并和原来的对比

3.本地镜像发布到阿里云

3.1将本地镜像推 送到阿里云

3.2将阿里云上的镜像下载到本地

4.本地镜像发布到私有库

4.1是什么

4.2将本地镜像推送到私有库

4.3演示步骤​

1.镜像

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
 只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

1.1分层的镜像

以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载

1.2UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

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

1.3Docker镜像加载原理

Docker镜像加载原理:
   docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
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等等。 

 平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??

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

1.4为什么 Docker 镜像要采用这种分层结构呢

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;
同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

2.Docker镜像commit操作案例

1.docker commit 提交容器副本使之成为一个新的镜像

 docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

2.案例演示ubuntu安装vim

下载ubuntu镜像到本地并成功运行,  原始的默认Ubuntu镜像是不带着vim命令的

docker容器内执行上述两条命令:

3.安装完后,commit我们自己的新镜像 (上面有命令)

4.启动我们的新镜像并和原来的对比

1 官网是默认下载的Ubuntu没有vim命令
 2我们自己commit构建的镜像,新增加了vim功能,可以成功使用。

3.本地镜像发布到阿里云

3.1本地镜像发布到阿里云流程

3.2将本地镜像推 送到阿里云

阿里云开发者平台 开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

控制台--->左侧横杠--->找到容器服务下面的 容器镜像服务 --->创建命名空间(类似包名)

--->创建仓库--->选择本地仓库

仓库生成的命令,直接使用

3.3将阿里云上的镜像下载到本地

4.本地镜像发布到私有库(和上面相似)

4.1是什么

1 官方Docker Hub地址:https://hub.docker.com/,中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。
 
2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。
 
    Docker Registry是官方提供的工具,可以用于构建私有镜像仓库

4.2将本地镜像推送到私有库

4.3演示步骤

默认情况,仓库被创建在容器的 /var/lib/registry目录下,建议自行用 容器卷映射,方便于宿主机联调

Dooker镜像详解,文件系统分层,本地镜像的发布 (阿里云和私有库)commit (安装vim ),详细演示相关推荐

  1. Docker镜像发布到阿里云和私有库

    目录 一.Docker镜像 (一)概述 (二)Docker镜像加载原理 (三)镜像分层结构优势 (四)重点理解 (五)docker commit操作实例 (六)总结 二.本地镜像发布到阿里云 三.本地 ...

  2. Docker镜像推送阿里云和私有库

    原文地址:http://www.linzichen.cn/article/1592190934097854464 当公司有新同事入职时,我们常常会让其从git或svn上拉代码下来,并在本地跑通.若公司 ...

  3. 华三交换机配置多个镜像口_配置本地端口镜像详解(多个镜像口:多个观察口)...

    一.组网需求"" 公司研发一部.研发二部和市场部通过Switch与外部Internet通信,监控设备Server1.Server2与Switch直连. 现在希望将研发一部.研发二部 ...

  4. 图形化管理工具Portaniner安 以及 Docker镜像详解(三)

    文章目录 图形化管理工具Portaniner安装 Docker镜像详解 1 什么是镜像 2 Docker镜像加载原理 3 分层理解 提交镜像 常用容器部署 Nginx部署 图形化管理工具Portani ...

  5. java访问本地文件_详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相 ...

  6. Windows Server 2008终端服务详解系列5:用ISA 发布SH-TSG

    Windows Server 2008终端服务详解系列5:用ISA 发布SH-TSG 前言: 本系列将全面的介绍Windows Server 2008终端服务,从概念到功能,从安装到配置都会以通俗易懂 ...

  7. 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装

    详解linux系列之字符界面下MySQL+apache+php的源代码安装 在前面介绍了linux和在字符下安装,下面我来介绍一下程序包的安装. 大家也许都知道在linux安装程序的时候后用rpm包安 ...

  8. Docker专题(六)-Docker镜像详解

    1.Docker镜像(images)概念 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件 ...

  9. 云原生 · 镜像详解

    镜像简介 Docker 镜像(Image)是用于创建 Docker 容器的模板.Docker 镜像相当于一个 root 文件系统,比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubunt ...

最新文章

  1. CentOS7下Docker Storage Pool扩容
  2. python安装numpy-如何为python安装numpy和scipy?
  3. 【LeetCode从零单排】No21.MergeTwoSortedLists
  4. SpringCloud之RestTemplate,几种常见的请求方式
  5. 如何使用CSS实现居中
  6. 如何使用HTML5嵌入视频
  7. Docker安装Mysql(docker-compose.yml)
  8. jzoj4313 电话线铺设(最小生成树+最近公共祖先)
  9. 一个 Accept-Encoding 引发的 requests 爬虫乱码问题
  10. IEEE754标准浮点格式
  11. paip..net 程序多语言切换开发的流程总结
  12. 【深度剖析】小米CyberDog四足机器人的AI运动系统的实现
  13. 电影社交网络中Facemash女生评比算法Java实现
  14. devenv.exe应用程序错误——可能原因之一
  15. 真牛皮!wsl安装位置
  16. 一名2012计算机应届毕业生的求职之路
  17. itest英语考试bug_【写给德语同行的】iTest非官方食用指南(上)
  18. EVM源码解读(1):amplify_spatial_lpyr_temporal_iir函数
  19. mac下更新自带的PHP版本到5.6或7.0
  20. nginx的全局配置和HTTP相关配置

热门文章

  1. Go语言学习之6 反射详解
  2. “零余额”账户为何从来不曾零
  3. android 屏蔽 广播,Android中使用BroadcastReceiver打开和关闭WIFI
  4. Linux C编程常用的API函数
  5. UI设计师如何自学?
  6. 做社群运营,你知道用社群管理工具可以实现哪些功能吗?
  7. 27家大数据企业入驻京玖大厦
  8. java教程:JTextField(文本框)组件使用实例|方法
  9. 猎头与人才沟通会涉及哪些问题呢?
  10. 二进制转换为十进制c语言编程,将二进制IP地址转换成十进制(C语言程序实现)