为什么从Docker中的映像创建容器时会创建containerID init层?新容器不能将映像作为父映像吗?
每个容器都有两层,一层(称为init层)基于图像层,另一层是包含实际容器内容的图像层的子层。init层包含一些必须始终存在于Docker容器中的文件(例如/.dokerinit)。支持的文件系统
containerIDinit层是基于映像的容器的init层。它将一些文件添加到当前容器中,包括:
"/dev/pts": "dir",
"/dev/shm": "dir",
"/proc": "dir",
"/sys": "dir",
"/.dockerenv": "file",
"/etc/resolv.conf": "file",
"/etc/hosts": "file",
"/etc/hostname": "file",
"/dev/console": "file",
"/etc/mtab": "/proc/mounts",
代码链接
<container>-init
层的存在是为了创建某些必须存在的文件/目录(通常作为装入点),这样docker就可以将装入绑定到这些装入点,而不用担心它们不存在。
注意:初始化层是RO
(READONLY),不能修改。
这些挂载点通常是空的,下面解释了它们的用途:
/proc
:进程和系统的内存数据sys
:内存系统中的文件系统/etc/hostname
:容器主机名文件,每个容器都有自己的主机名,并将装载绑定到此文件/etc/hosts
:主机文件、ip和名称映射/etc/resolv.conf
:DNS相关解析配置文件