1.背景
程序换台机器就运行不起来了? |
程序依赖环境运行;环境包括(操作系统+依赖库+配置) |
将环境和程序一起打包给对方运行解决问题---引申出docker工具软件 |
2. 基础镜像(base image)是什么?
环境不同会导致程序运行结果不同 |
统一环境:最重要的就是操作系统;将所有程序都跑在同一个操作系统上。 |
操作系统分为用户空间和内核空间。 |
应用程序运行在用户空间,因此我们可以阉割操作系统只需利用操作系统的用户空间部分就能构建应用所需环境 |
将操作系统的用户空间+文件系统+依赖库+程序,打包成一个类似压缩包的文件这就是基础镜像(base image) |
3.dockerfile是什么?
dockerfile是什么?一份列清楚从操作系统到应用启动需要做哪些事情的清单文件 |
4.容器镜像是什么?
dockerfile只描述了要做哪些事并没有真正做。当我们用命令docker build时,docker软件就会按照dockerfile的说明一行行 构建环境加应用程序;最终将这个环境加程序打包成一个类似压缩包的东西成为容器镜像Container image |
只要将容器镜像传到任意一台服务器上,对压缩包解压缩就能同时运行环境和程序 |
5.如何将容器镜像传到多台服务器上?
docker registry是什么? |
参考github代码仓库的做法:通常使用git push 将代码传到github,有需要的人自己通过git pull的方式将代码从github拉倒自己的机器上 docker也是;装一个镜像仓库,通过docker push将镜像推到仓库,有需要的时候再通过docker pull将镜像拉到机器上。这个负责管理镜像仓库推拉能力的服务就是docker registry |
6. 容器是什么?
现在我们知道服务器间传输容器镜像的问题:通常跑到目的服务器上执行docker pull 拿到容器镜像再执行docker run命令解压缩这个类似‘压缩包’的容器镜像, 获得一个独立的环境和应用程序并运行起来。这样一个独立的环境和应用程序就是容器container。 |
可以在一个操作系统上同时跑多个容器,且容器之间都是互相独立,互相隔离的, |
7.容器和虚拟机的关系?
容器利用一个叫Namespace的能力让它看起来像是一个独立操作系统;再利用一个叫Cgroup的能力限制它能使用的计算资源。因此容器本质是自带独立运行环境的特殊进程。底层用的是宿主机的操作系统内核。 |
8.docker的架构原理
是CS架构-client对应docker-cli ; server对应docker daemon 。我们在命令行里敲docker命令使用的就是docker-cli ,docker-cli会解析我们输入的command命 令,然后调用docker daemon守护进程提供的restful Apl (守护进程收到命令后,会根据命令创建和管理各个容器) |
docker daemon内部分为docker server 和 Engine 两层;docker server本质是http服务器,负责对外提供操作容器和镜像的API接口接收到API请求后会分发任务给engine层,engine层负责创建job,由job实际执行各种工作不同的docker命令会执行不同类型的job任务。 |
如果执行docker build命令,job则会根据dockerfile指令像包洋葱皮似的一层层构建容器镜像文件, |
如果执行docker pull/push命令镜像推拉操作,job则会跟外部的docker registry交互将镜像上传或下载 |
如果执行docker run命令,job就会基于镜像文件调用containerd组件,驱使runC组件创建和运行容器 |
9.docker周边
9.1docker compose是什么?
docker容器本身只是一个特殊进程,想要部署多个容器,且对这些容器的顺序有一定要求如何实现?通过yaml文件,写清楚部署的容器有哪些?部署顺序?以及容器占用的CPU和内存等信息。 然后通过一行docker-compose up命令解析yaml文件,将容器们一键按顺序部署 |
9.2docker swarm是什么?
docker解决的是一个容器的部署;docker compose解决的是多个容器组成的一整套服务的部署;docker swarm解决的是这一整套服务在多台服务器上的集群部署 |
9.3docker和K8S的关系是什么?
k8s 它会在多台node的服务器上调度Pod进行部署和扩缩容,每个Pod'内部可以含有多个container ,每个container 本质上就是一个服务进程。 |
其实docker swarm是K8S的竞品 |
docker部署的容器其实就是k8s调度的pod里的container;docker compose基于多个container 创建一整套服务其实就是K8S里的Pod |
而docker swarm做的事情和K8S一样,本质上就是调度Pod |
k8s 的官方定义叫容器编排引擎。将它理解为以API编程的方式管理安排各个容器的引擎 |