1 镜像是什么

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

2 UnionFS(联合文件系统)

UnionFS(联合文件系统):union文件系统(unionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加

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

3 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等。

docker 写文件系统 docker 文件系统原理_加载

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

对一个精简的os,rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供rootfs就行了。由此可见,对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。(docker为什么快,就是因为共有宿主机的内核。)

5 为什么tomcat的镜像比centos镜像还大?

[root@t-docker chenzx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat              latest              690cb3b9c7d1        7 days ago          463MB
centos              latest              5182e96772bf        3 weeks ago         200MB

    这是因为Tomcat的镜像是由kernel、centos、jdk8、tomcat组成,所以比centos镜像大。

docker 写文件系统 docker 文件系统原理_docker_02

6 为什么docker镜像要采用这种分层结构呢?

一句话, 分层最大的好处是:共享资源 。

比如,有多个镜像都是从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也只需要加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

镜像的特点: 镜像都是只读的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层被称为容器层,容器层之下的层都是镜像层。

7 阿里云镜像加速配置:

7.1 如何配置 registry 私库相关的参数涉及以下2个参数:

  "insecure-registries": [],  #这个私库的服务地址

  "registry-mirrors": [],    #私库加速器2.配置示例:

# cat /etc/docker/daemon.json 

{    

    "registry-mirrors": [       
        "https://d8b3zdiw.mirror.aliyuncs.com"    
    ],    

    "insecure-registries": [       
        "https://ower.site.com"    
    ],

}

7.2 配置与应用

7.2.1 默认没有文件,所以我们需要先创建,进入/etc/docker目录下,

记得创建的文件所有者是root(vim或touch,记得chown修改所有者)

-rw-r--r--  1 root root   71 Dec 19 17:25daemon.json

7.2.2 在文档中配置想要添加的参数:如,镜像加速器网站,私库网站

# cat /etc/docker/daemon.json 
{  

    "registry-mirrors":[        

        "https://d8b3zdiw.mirror.aliyuncs.com"   

     ],     
    "insecure-registries": [       

        "https://ower.site.com"   

     ],

}

7.2.3 创建并修改完daemon.json文件后,需要让这个文件生效

a.修改完成后reload配置文件
sudo systemctl daemon-reload

b.重启docker服务
sudo systemctl restartdocker.servicec.

查看状态
sudo systemctl status docker -ld.

查看服务
sudo docker info

7.3 总结

当我们需要对docker服务进行调整配置时,不用去修改主文件 docker.service的参数,通过daemon.json配置文件来管理,更为安全、合理。