镜像
操作系统分为内核和用户空间。
Linux 系统在启动内核后,会mount root 文件系统为其提供用户空间支持。Docker 镜像(Image),就相当于是一个 root 文件系统,是一个静态的概念。它为容器运行提供了程序,库,配置文件等,镜像的内容在运行后也不会被改变。
镜像是分层存储的,不是由一个文件组成,而是由多层文件系统联合组成。镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。
容器
容器是运行中的镜像,类似进程和程序的关系。镜像是静态的,而容器是动态的。容器和直接运行在宿主机的进程不同,容器进程运行于属于自己的独立的命名空间。容器内的进程运行在一个隔离的环境下,对外表现的像是运行在一个独立于宿主机的操作系统一样。
容器在运行时,会以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
参考:
https://yeasy.gitbooks.io/docker_practice/content/basic_concept/