了解了docker的由来之后,我们需要了解一下关于它的一些核心基础概念,以便于之后进行安装部署和使用时更好的理解。
首先,我们来看一下Dokcer大概工作流程,流程图如下:
镜像
- 容器的镜像实际上是一组只读文件的集合,使用的是联合文件系统,展示给用户看到的只有一层。
- 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。 bootfs(boot
file system)主要包含bootloader(引导加载程序)和kernel(内核),
bootloader主要是引导加载kernel,
Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc,
/bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
实际执行运行容器的资源组成变化,从“文件系统”变成在一个namespace下,分配对应的资源来运行进程。
查看容器的实质,我们看到的最上面的可读写层的文件系统。
创建一个容器的层文件状态变化
将容器提交为镜像的层文件状态变化
基于dockerfile来创建文件过程。
容器
- 容器使用镜像创建的运行实例。
- 每个容器之间都是相互隔离的,保证平台的安全。
- 容器运行所产生的数据如果没有进行持久化配置,删除容器时则会丢失。
- 容器和虚拟机有着本质的区别,其中包含简易版的Linux运行环境(root用户权限、进程空间、用户空间和网络空间等),和运行在其中的应用程序。
- 容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库
- 仓库(Repository)是集中存放镜像文件的场所。
- 仓库(Repository)和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
- 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
- 最大的公开仓库是DockerHub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载