04.docker分层

/ Docker / 没有评论 / 720浏览

知识回顾

镜像:是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就是Image镜像文件。

分层原理

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

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

Image加载原理

docker镜像实际上由一层层的文件系统(UnionFS)组成。bootfs(boot file system)主要包含bootloader和kernel。bootloader主要是引导加载Kernel,Linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux系统是一样的。包括boot加载器和内核。当boot加载完成之后整个内核就都在内存中了。此时内存的使用权由bootfs交给内核。此时系统也会卸载bootfs。

rootfs(root file system),在bootfs之上。包含的是典型linux中的/dev /proc /bin /etc 等标准目录和文件。rootfs是各种不同的操作系统发型版本。例如:ubuntu centos等。对于一个精简的OS,rootfs可以很小,只需要包括基本的命令、工具和程序库就可以了。因为底层直接用Host的kernel,自己只需要提供rootfs就行了。因此不同的linux发型版,bootfs基本是一致的,rootfs会有差异。

Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层(容器层)被加载到镜像的顶部。

commit

docker commit -m "提交的备注信息" -a=“作者” 容器ID 镜像名称:[标签名]

➜  ~ docker commit -m="ubuntu install vim" -a="huzd" eba4a23b97c9 ubuntuwithvim:1.0.0  #将当前容器提交为一个新的镜像
sha256:753e19c609990aabf75cfc429f4d824a427f5c853202869d77d30eda41238160
➜  ~ docker images     # 查看镜像                                                               
REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
ubuntuwithvim                 1.0.0     753e19c60999   4 seconds ago   178MB
huzd/iredis                   1.1.1     b292881e118d   25 hours ago    109MB
docker/disk-usage-extension   0.2.4     8046bf511714   2 days ago      2.97MB
kartoza/geoserver             2.20.4    2c8bec02cf4e   2 months ago    1.43GB
nginx                         latest    605c77e624dd   5 months ago    141MB
redis                         latest    7614ae9453d1   5 months ago    113MB
ubuntu                        latest    ba6acccedd29   8 months ago    72.8MB
hello-world                   latest    feb5d9fea6a5   8 months ago    13.3kB

上传镜像到阿里云

上传:

➜  ~ docker login --username=ahhzd@vip.qq.com registry.cn-qingdao.aliyuncs.com
Password: 
Login Succeeded

Logging in with your password grants your terminal complete access to your account. 
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/
➜  ~ docker tag 753e19c60999 registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0 
➜  ~ docker push registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0
The push refers to repository [registry.cn-qingdao.aliyuncs.com/huzd/test]
9df8cd7c0733: Pushed 
9f54eef41275: Pushed 
1.0.0: digest: sha256:f6aa57103c935fad34aa1fecfb738be72ab7217da711179f9264c1a4501b553c size: 741

下载:

➜  ~ docker images                                               
REPOSITORY                                   TAG       IMAGE ID       CREATED          SIZE
ubuntuwithvim                                1.0.0     753e19c60999   24 minutes ago   178MB
registry.cn-qingdao.aliyuncs.com/huzd/test   1.0.0     753e19c60999   24 minutes ago   178MB
huzd/iredis                                  1.1.1     b292881e118d   25 hours ago     109MB
docker/disk-usage-extension                  0.2.4     8046bf511714   2 days ago       2.97MB
kartoza/geoserver                            2.20.4    2c8bec02cf4e   2 months ago     1.43GB
nginx                                        latest    605c77e624dd   5 months ago     141MB
redis                                        latest    7614ae9453d1   5 months ago     113MB
ubuntu                                       latest    ba6acccedd29   8 months ago     72.8MB
hello-world                                  latest    feb5d9fea6a5   8 months ago     13.3kB
➜  ~ docker rmi -f 753                    
Untagged: ubuntuwithvim:1.0.0
Untagged: registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0
Untagged: registry.cn-qingdao.aliyuncs.com/huzd/test@sha256:f6aa57103c935fad34aa1fecfb738be72ab7217da711179f9264c1a4501b553c
Deleted: sha256:753e19c609990aabf75cfc429f4d824a427f5c853202869d77d30eda41238160
➜  ~ docker images    
REPOSITORY                    TAG       IMAGE ID       CREATED        SIZE
huzd/iredis                   1.1.1     b292881e118d   25 hours ago   109MB
docker/disk-usage-extension   0.2.4     8046bf511714   2 days ago     2.97MB
kartoza/geoserver             2.20.4    2c8bec02cf4e   2 months ago   1.43GB
nginx                         latest    605c77e624dd   5 months ago   141MB
redis                         latest    7614ae9453d1   5 months ago   113MB
ubuntu                        latest    ba6acccedd29   8 months ago   72.8MB
hello-world                   latest    feb5d9fea6a5   8 months ago   13.3kB

➜  docker pull registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0
1.0.0: Pulling from huzd/test
7b1a6ab2e44d: Already exists 
5579862b1fa8: Already exists 
Digest: sha256:f6aa57103c935fad34aa1fecfb738be72ab7217da711179f9264c1a4501b553c
Status: Downloaded newer image for registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0
registry.cn-qingdao.aliyuncs.com/huzd/test:1.0.0

➜  ~ docker images                                               
REPOSITORY                                   TAG       IMAGE ID       CREATED          SIZE
registry.cn-qingdao.aliyuncs.com/huzd/test   1.0.0     753e19c60999   29 minutes ago   178MB
huzd/iredis                                  1.1.1     b292881e118d   25 hours ago     109MB
docker/disk-usage-extension                  0.2.4     8046bf511714   2 days ago       2.97MB
kartoza/geoserver                            2.20.4    2c8bec02cf4e   2 months ago     1.43GB
nginx                                        latest    605c77e624dd   5 months ago     141MB
redis                                        latest    7614ae9453d1   5 months ago     113MB
ubuntu                                       latest    ba6acccedd29   8 months ago     72.8MB
hello-world                                  latest    feb5d9fea6a5   8 months ago     13.3kB
➜  ~