Docker的基本组成
- Docker Client客户端
- Docker Daemon 守护进程
- Docker Image 镜像
- Docker Container 容器
- Docker Registry 仓库
Docker客户端将命令发送给守护进程,守护进程将结果传给客户端,通过客户端来查看命令运行的结果。
什么是Docker镜像
Docker镜像是Docker容器的基石,容器基于镜像启动和运行,镜像就好比是容器的源代码
Docker镜像是一个层叠的只读文件。最底端是一个引导文件系统(bootfs)。当一个容器启动后,会移动到内存中。而引导文件系统则会被卸载。Docker镜的第二层是root文件系统(rootfs),它位于引导文件系统之上。在Docker里root文件系统永远, 只能是只读状态。Docker利用联合加载技术,又会在root文件系统之上加载更多的只读文件系统(add emacs)
联合加载指的是一次加载多个文件系统,但是在外面看起来只能看到一个文件系统。联合加载会将各层文件系统叠加到一起,让最终的文件系统包含所有的底层文件和目录。
Docker将这样的文件系统称为镜像
多个镜像
一个镜像可以放到另一个镜像的底部,位于下面的镜像称为副镜像,可以以此类推,知道镜像占到最底部。最。 底部的镜像称为基础镜像,也就是root文件系统。
什么是Docker Container 容器
通过镜像来启动,是Docker的执行单元。容器是启动执行阶段。那么容器是怎么样来通过镜像来启动的呢。当一个容器启动时,Docker会在该镜像的最顶层加载一个读写文件系统,也就是一个可写的文件层,我们在Docker中运行的程序,就是在这个层中运行和执行的,当Docker第一次启动一个容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上。比如:如果想修改一个文件,文件首先会从该读写层下面的只读层, 复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。这就是Docker中的一个重要的技术-写时复制(copy on write)
Docker Registry 仓库
分为公有和私有。用来保存镜像
我们通过客户端来访问
我们通过客户端来访问Docker的守护进程,从而操作Docker 容器。而容器是通过镜像来创建的。而镜像又保存在仓库中。
Docker 在线演示地址:
https://www.docker.com/tryit/