S_lion's Studio

Centos镜像那么小能用么?

字数统计: 592阅读时长: 2 min
2021/07/11 Share

不知道大家在使用docker的过程中有没有过这种困惑,就是下载了个centos镜像,可以看到只有200多M,这和我们之前使用传统方式启一个centos系统动不动4、5个G简直有天壤之别,这么小能运行么,稳定么?

1
2
3
4
5
6
7
8
9
10
11
[root@slions_pc1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4cdc5dd7eaad 4 days ago 133MB
tomcat latest 36ef696ea43d 8 days ago 667MB
ubuntu latest 9873176a8ff5 3 weeks ago 72.7MB
busybox latest 69593048aa3a 4 weeks ago 1.24MB
centos 7 8652b9f0cb4c 7 months ago 204MB
[root@slions_pc1 ~]# docker run -it --name slions centos:7
[root@1633937d7a61 /]# ls /
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

之前我也不是很了解这块,最近又系统的看了下docker的机制,接下来就来说说Centos镜像为啥这么小。

Linux操作系统由2部分构成的,bootfs(kernel空间)和rootfs(用户空间)。

Linux启动时会加载bootfs文件系统,之后bootfs就会被卸载掉,rootfs用户空间包括了/dev,/proc,/bin…..

换句话说,bootfs就是在主机中加载下内核和物理机共用的,并不属于容器的一个部分,对于base镜像来说底层直接使用主机的kernel就够了,自己只需要提供一个rootfs就行了。对于一个精简版的OS来说,rootfs可以非常小,只需包括最基本的命令,工具还有程序的库就可以完成了。

我们可以再看下centos:7由那几层构成的。

1
2
3
4
5
6
[root@slions_pc1 ~]# docker history --no-trunc centos:7
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf 7 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 7 months ago /bin/sh -c #(nop) LABEL org.label-schema.schema-version=1.0 org.label-schema.name=CentOS Base Image org.label-schema.vendor=CentOS org.label-schema.license=GPLv2 org.label-schema.build-date=20201113 org.opencontainers.image.title=CentOS Base Image org.opencontainers.image.vendor=CentOS org.opencontainers.image.licenses=GPL-2.0-only org.opencontainers.image.created=2020-11-13 00:00:00+00:00 0B
<missing> 7 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d43b7b44a6d990cd657b63d93d6a2a9293983a30bfc1dfa53 in / 204MB

其实不同的Linux发行版本主要的区别就在rootfs上,与内核的区别不大,所以docker可以同时支持多种Linux镜像,来模拟出多种操作系统的环境。

需要注意的是docker容器的内核版本会与当前主机的内核版本一致,并且不能修改,如果存在软件对内核版本有依赖就不推荐使用docker部署。

CATALOG