1、docker是什么?
将环境和程序一起打包给到 服务器运行的工具软件。
2、基础镜像base image是什么?
操作系统:用户空间、内核空间
阉割操作系统,利用其的用户空间(因为应用程序运行在用户空间),文件系统,依赖库打包成一个类似“压缩包”的文件。这就是所谓的基础镜像base image。
3、dockerfile是什么?
有了base image还不够,我们还需安装一些依赖和创建一些文件夹,最后才是运行我们的目标应用程序。因此我们将所有的要做的事情以命令行的形式分行列举出来,类似于一份todo List。像这份列清楚了从操作系统到应用服务启动需要做哪些事情的清单文件就是所谓的dockerfile。
4、container image(容器镜像)是什么
dockerfile只是描述了做哪些事情,并没开始做,用命令docker build执行的时候,docker软件就按照dockerfile说明,一行行构建环境加应用程序,最终将这个环境和应用程序打包成一个类似“压缩包”的东西,我们把它称之为容器镜像。
只要将容器镜像传到任意一台服务器对该“压缩包”进行“解压缩”,就可以同时运行环境和程序。
5、registry是什么?
服务器那么多,挨个将容器镜像传到上去,压力给到发送方的网络带宽了。
因此弄一个镜像仓库,通过docker push到镜像仓库,有需要的服务器通过docker pull将镜像拉到机器上,这个负责管理镜像仓库推拉能力的服务叫做docker registry。
6、容器是什么?
通过指令docker pull在服务器上拿到容器镜像,通过docker run,将这个类似压缩包的容器镜像进行解压缩,获得一个独立的环境和应用程序,并运行起来,这样一个独立的环境和应用程序就是所谓的容器。我们可以在一个操作系统上同时跑多个容器,且这些容器互相独立和隔离。
7、容器和虚拟机的关系
区别:容器不带操作系统,虚拟机带有一个操作系统。容器只包含核心依赖库和配置文件等必要组件,它利用一个namespace的能力,让它看起来像一个独立的操作系统。再利用一个cgroup的能力限制它能使用的计算资源。因此容器是一个自带独立运行环境的特殊进程,底层用的是宿主机的操作系统内核。
8、docker 的架构原理
经典的client-server架构。client对应docker-cli,sever对应docker daemon。我们在命令行里敲docker命令,使用的就是docker-cli,docker-cli会解析我们输入的command命令,然后调用docker daemon守护进程提供的restful-api,守护进程收到命令后,会根据命令创建和管理各个容器。
docker daemon架构:
docker daemon分成docker server和engine两层。docker server是个http服务器,负责对外提供操作容器和镜像api。接口接收到api请求后,会分发任务给engine层,engine层负责创建job,由job实际执行各种工作。
不同的docker命令会执行不同类型的job任务。
(1)docker build命令执行过程。
job根据dockerfile指令,像包洋葱皮似的一层层构建容器镜像文件。
(2)docker pull/push命令执行过程。
镜像推拉操作,job会根据外部的docker registry交互将镜像上传/下载。
(3)docker run命令执行过程。
job基于镜像文件调用containerd组件,驱使runC组件创建和运行容器。