当前位置:主页 > 查看内容

Docker学习笔记(三):Docker镜像详解

发布时间:2021-07-29 00:00| 位朋友查看

简介:1、镜像的定义 镜像是一种轻量级、可执行的独立软件包用来打包软件运行环境和基于运行环境开发的软件它包含运行某个软件所需的所有内容其中包括代码、运行时、库、环境变量和配置文件 。通过将所有的应用和环境直接打包为docker镜像就可以直接运行。我们需要……

1、镜像的定义

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,其中包括代码、运行时、库、环境变量和配置文件。通过将所有的应用和环境直接打包为docker镜像,就可以直接运行。我们需要知道的是:Docker镜像都是只读的,在容器启动的时候,一个新的可写层被加载到镜像到的顶部,这一层就被称为容器层,处于容器层之下的称之为镜像层。当启动容器的时候,会在镜像的基础上再添加一个当前容器的专用层,这层是读写的。在删除容器的时候,这个容器的专属的这个读写层就会被删除,所以默认容器无法实现数据的持久存储。

2、镜像的获取方式

  • 从远程仓库下载。
  • 通过拷贝获取。
  • 自己制作一个镜像DockerFile。

3、镜像加载的原理

在介绍Docker镜像的原理之前,先来介绍一下UnionFS(联合文件系统),它是一种分层、轻量级且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像)可以制作各种具体的应用镜像。对于UnionFS来说,它可以一次同时加载多个文件系统,但是从外面来看只能看到一个文件系统。通过层层叠加,联合文件系统会把各层文件系统叠加起来,这样最终形成的文件系统就会包含所有底层到的文件和目录。这种方式就像千层饼一样。

Docker的镜像实际上由一层一层的文件系统组成。如下图:

观察上图:

  • bootfs主要包含bootloader和kernel,它的类型可以是btrfs、aufs、lxc。bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
  • rootfs是一个根文件系统,这里面包括很多的文件和目录,位于在bootfs之上,主要包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs指的是各种不同的操作系统发行版,比如Ubuntu,Centos等等。?

需要注意的是:在启动容器的时候,这两层都是以只读的方式来挂载的。

通过前面的介绍可以知道:镜像的设计采用了层级管理的方式,其底层的是bootfs,最上面的是rootfs,这种方式最大的好处就是共享资源,并且很大程度提高了Docker镜像的分发与存储。因为当多个镜像都是从相同的base镜像构建出来的,那么对于宿主机而言,只需要在磁盘上保存一份base镜像即可,同时在内存中也只需要加载一份base镜像,从而为所有的容器服务。如下图,这种方式更容易理解。

来看一下我们pull一个镜像的过程:

从上面的下载过程就可以看到Docker镜像的分层结构,因为下载的过程是逐步下载的。通过docker images可以看到下载之后的文件是比较小的。这是因为对于一个精简的OS来说,rootfs可以很小,里面只需要包括最基本的命令、工具和程序库,而底层直接用Host的kernel,自己只需要提供 rootfs 即可。由此可见,对于不同的linux发行版,?bootfs基本是一致的,,而rootfs会有差别,,因此不同的发行版可以共用bootfs。所以,我们拉取的镜像,大小比以前都小

4、镜像的commit操作

(1)命令

格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

参数说明:

  • -a :提交的镜像作者;

  • -c :使用Dockerfile指令来创建镜像;

  • -m :提交时的说明文字;

  • -p :在commit时,将容器暂停。

示例:

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

(2)实例

以tomcat为例:

a.从hub下载tomcat镜像——docker pull tomcat

b.运行tomcat容器——docker run -d -p 8084:8080 tomcat

c.查看当前运行的容器——docker ps

d.以交互方式运行Tomcat——docker exec -it eff0e88737be /bin/bash

e.删除webapp——rm -rf webapps/docs?

f.以当前的tomcat运行实例为模板commit一个没有doc的tomcat新镜像。

?

;原文链接:https://blog.csdn.net/weixin_47382783/article/details/115766262
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:浅谈Samba服务 下一篇:没有了

推荐图文


随机推荐