Docker镜像讲解

概述

Docker镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、库、环境变量、配置文件、运行时环境等。
所有的应用,直接打包成Docker镜像,然后通过镜像创建出容器,然后就可以直接跑起来。

如何得到镜像:

  • 从远程仓库下载,比如docker hub、阿里云的镜像仓库等。
  • 朋友拷贝给你。
  • 自己制作一个镜像DockerFile。
  • 通过对原有的镜像创建的容器进行一些修改(也可以不修改),然后通过Commit命令提交一个新的镜像。
Docker镜像加载原理
UnionFS(联合文件系统)

我们在下载某个镜像的时候,可能会看到下载了一层一层的多个镜像。
在这里插入图片描述
联合文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,联合文件系统是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像的镜像)比如centos镜像,可以制作出各种具体应用的镜像,比如mysql镜像。一个成型的应用进行都是由若干个镜像一层层组成的。

Docker镜像加载原理

docker镜像实际上是由一层层的文件系统组成,这种层级文件系统就是联合文件系统。

bootfs(boot file system)主要包含BootLoader和kernel,BootLoader主要负责引导加载kernel,Linux刚启动时会加载bootfs文件系统来引导内核的加载,Docker镜像的最底层就是bootfs。这一层与我们典型的unix系统是一样的,包含boot引导器和内核,当boot加载完成后整个内核就在内存中了,此时内存的使用权已经由bootfs转交给内核,此时系统会卸载bootfs。

rootfs(root file system)在bootfs之上,包含的就是典型的unix系统的/dev、 /proc、 /etc等标准目录和文件和一些命令,rootfs就是不同unix系统的发行版,比如Ubuntu、centos等。

我们平时安装的虚拟机centos镜像好几个G,Docker安装的才200多m,因为对于一个精简的OS,rootfs可以很小,只需包含最基本的命令,工具和程序库就行了,因为底层直接使用宿主机的内核,自己只需提供rootfs(相当于操作内核的客户端)就可以,由此可见不同发行版的bootfs基本是一致的,roorfs有差别,因此不同的发行版可以公有bootfs。

在这里插入图片描述
第一个图仅仅是bootfs+rootfs,然后如果要制作一个emacs环境的镜像,就在这个基础上新加一层emacs镜像,如图二。如果要在添加一个Apache环境,那就再图二基础上加一个apache镜像。如图三。图中的每一层镜像都能进行复用。

比如:上面的redis镜像。使用docker inspect redis镜像的ID 命令查看镜像的元信息,找到layer信息。
在这里插入图片描述
由上图可以看到下载的redis镜像是由6个镜像一层层组成的。
在这里插入图片描述
这些镜像都是一个个独立可复用的镜像,如果下载其他镜像是,某一层镜像是已经存在本地的了,就不用在下载,直接复用该镜像,节省空间。比如上面下载redis镜像时,提示某个镜像已经存在。
在这里插入图片描述

注意:

Docker镜像都是只读的,用镜像创建容器启动时,实际上是在原本的镜像上新建了一层可写层到原本镜像的顶部,这一层我们叫作容器层,容器层之下的叫作镜像层。

在这里插入图片描述
如上图,使用Tomcat镜像创建容器后,会在Tomcat镜像的基础上新建一个可写层,容器的写入是在可写层进行记录,然后使用commit命令把该容器创建一个新的镜像,实际上新的镜像是tomcat镜像+可写层镜像,以tomcat镜像为基础。通过下面介绍使用容器构建镜像,可以更好地理解。

commit镜像

命令:

docker commit -m="信息,类似git提交的信息" -a="作者" 容器Id  目标进行名:tag

以nginx镜像为例:

  1. 下载nginx镜像(最新版):
docker pull nginx   

在这里插入图片描述
2. 使用该镜像创建并启动一个容器:

docker run -it 4bb46517cac3 /bin/bash

在这里插入图片描述
3. 修改该容器,比如添加一个文件
在这里插入图片描述
4. 退出该容器,可以停止退出,也可以不停止退出
在这里插入图片描述
5. 使用该容器提交一个镜像

docker commit -m="提交nginx容器,创建aaa.txt文件" -a="Yehaocong" 85fa4134c40a nginx1:1.0

在这里插入图片描述
打印的是新建的进行Id。

  1. 查看新建的镜像
    在这里插入图片描述
    这个就是新建的镜像,使用该镜像创建的容器,会有aaa.txt文件在里面。

此步骤结合上面的 Docker镜像是只读的那部分文件理解更佳。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值