1、请简单介绍Docker的工作原理?
Docker工作原理Docker是一个C/S结构的系统,Docker守护进程运行在宿主机上, 然后客户端通过Socket连接访问,守护进程(Docker Daemon)接受客户端命令并管理运行在主机上的容器。
Docker客户端(Docker Client)运行Docker的各种命令,这些命令会传递给Docker的宿主机上运行Docker的守护进程;
Docker的守护进程运行在宿主机上,负责实现Docker的各种功能;守护进程会在启动后一直在后台运行。
简单来说:客户端(发送命令) ----> 守护进程(接收命令、执行命令、管理容器)
2、Docker有哪几部分组成?
Docker主要由以下几个部分组成:
- Docker client,客户端;为用户提供一系列可执行命令,用户用这些命令实现跟 Docker Daemon 交互;
- Docker Daemon,守护进程;一般在宿主主机后台运行,等待并执行接收来自客户端的请求消息;
- Docker Image,镜像;镜像run之后就生成为Docker容器;
- Docker Container,容器,一个系统级别的服务,拥有自己的ip和系统目录结构;运行容器前需要本地存在对应的镜像,如果本地不存在该镜像则就去镜像仓库下载。
3、Docker与传统虚拟机的区别什么?
- 传统虚拟机是需要安装整个操作系统的,然后再在上面安装中间件,部署应用,通常需要几分钟去启动应用,而Docker是直接使用镜像来运行业务容器的,其容器启动属于秒级别;
- Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker容器和内核交互,几乎没有性能损耗,而虚拟机运行着整个操作系统,占用物理机的资源就比较多;
- Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小;同样的硬件环境,Docker运行的镜像数远多于虚拟机数量,对系统的利用率非常高;
- 与虚拟机相比,Docker隔离性更弱,Docker属于进程之间的隔离,虚拟机可实现系统级别隔离;
- Docker的安全性也更弱,Docker的租户root和宿主机root相同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离;
6、Docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,比如:VMware vCenter提供完备的虚拟机管理能力;
7、Docker对业务的高可用支持是通过快速重新部署实现的,虚拟化具备负载均衡,高可用、容错、迁移和数据保护等经过生产实践检验的成熟保障机制,Vmware可承诺虚拟机99.999%高可用,保证业务连续性;
8、虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节省大量时间;
9、虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化,Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。
4、docker技术的三大核心概念是什么?
- 镜像:镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
- 容器:容器是基于镜像创建的,是镜像运行起来之后的一个实例,容器才是真正运行业务程序的地方。如果把镜像比作程序里面的类,那么容器就是对象。
3)镜像仓库:存放镜像的地方,研发工程师打包好镜像之后需要把镜像上传到镜像仓库中去,然后有运行镜像仓库权限的人拉取镜像来运行容器了。
5、CentOS镜像几个G,但是Docker CentOS镜像才几百M,这是为什么?
Linux操作系统分别由两部分组成:1)内核空间(kernel);2)用户空间(rootfs);
Docker CentOS镜像是复用主机的内核环境,所以不包含内核空间(kernel)相关的文件;同时,Docker CentOS镜像删除了用户空间(rootfs)中GUI、以及非必要的依赖软件等,甚至shell都是一个精简的版本。
6、关于Docker镜像的分层结构
6.1、常用的大部分镜像是怎么创建的?
Docker采集镜像的分层架构创建。
具体来说,Docker 支持通过扩展现有镜像,创建新的镜像。
Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。
6.2、为什么要采用镜像的分层结构?
共享资源:有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
6.3、如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?
不会,因为copy-on-write特性,修改会被限制在单个容器内。
6.4、容器的容器层是什么?
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。
只有容器层是可写的,容器层下面的所有镜像层都是只读的。
容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。
6.5、为什么镜像可以被多个容器共享?
容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
6.6、什么是容器的copy-on-write特性?
只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。
6.7、容器层只有容器启动才有,容器退出后就没了?那在容器层做的各种增删改查的操作,会随容器的退出而消失?
是这样的。如果想保留修改的内容,实现持久化,需要使用volume。
6.8、比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a,是不是说下层/a的文件就找不到了?只能找到上层的/a 文件吗?
下层的/a还在镜像中,只是用户访问不到而已,用户只能访问到上层的/a
6.9、删除文件的操作也是找到之后复制到容器层,然后删除吗?
是的,下面的镜像层依然保留着被删除的文件。
7、什么是Docker?
Docker是一个开源的容器项目,是一个运行和管理容器的容器引擎。Docker未应用程序的开发、发布和运行提供一个基于容器的标准化平台。容器运行的是应用程序,Docker平台用来管理容器的整个生命周期。
8、Docker使用了哪些底层技术?
Docker使用的底层技术包括命名空间、控制组、联合文件系统和容器格式。
9、Docker命令行接口有哪些类型?
DOcker命令行接口类型包括:
1)引擎命令行接口(Engine CLI):docker主要的命令,包含docker和dockerd命令。
2)容器编排命令行接口(Compose CLI):Docker Compose提供,让用户构建并运行多容器应用。
3)机器命令行接口(Machine CLI):用来配置和管理远程docker主机。
4)DTR命令行接口:部署管理docker可信注册中心。
5)UCP命令行接口:部署和管理通用面板(universal control plane)。
10、什么是Docker镜像?
Docker镜像是按照Docker要求定制的应用程序。一个Docker镜像可以包括一个应用程序以及能够运行它的基本操作系统环境。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包括了未运行准备的一些配置参数。
11、Docker使用哪几种方式来标识镜像?
镜像可以通过镜像ID、镜像名称或者镜像摘要值来标识。
12、镜像描述文件有什么用?
Docker所用的Dockerfile文件用来描述镜像,定义了如何构建Docker镜像。Docker通过读取Dockerfile中的指令自动构建镜像。
13、什么是基础镜像?
大多数镜像都是从一个父镜像开始扩展的,这个父镜像通常是一个基础镜像。基础镜像不依赖其他镜像,而是从“零”开始构建。
14、什么是容器?
容器是指从镜像创建的应用程序运行实例。镜像是静态的定义,容器时镜像运行时的实体,基于同一镜像可以创建若干不同的容器。容器的实质是进程,但与直接在主机上执行的进程不同,容器进程在属于自己的独立的命名空间内运行。因此容器拥有自己的根文件系统、自己的网络配置、自己的进程空间、甚至自己的用户ID空间。
15、Docker使用哪几种方式来标识容器?
Docker使用容器ID或者容器名称来标识容器。
16、Docker注册中心与仓库有什么不同?
注册中心是存放仓库的地方,一个注册中心往往有很多仓库,仓库是集中存在镜像文件的地方,每个仓库集中存在某一类镜像,往往包含多个镜像文件,不同的镜像通过不同的标签来区别,并通过“仓库名:标签”格式指定特定版本的镜像。
17、Docker构建镜像有哪几种方法?
Docker提供了两中构建镜像的方法,一是将现有容器转化为镜像,二是通过Dockerfile构建镜像。
18、RUN、CMD和Entrypoint指令有何不同?
RUN指令执行命令并创建新的镜像层,经常用于安装应用程序和软件包。RUN先于CMD或Entrypoint指令在构建镜像时执行,并被固化在所生成的镜像中。
CMD和EntryPoint指令在每次启动容器时才执行,两者的区别在于CMD指令会被Docker run命令所覆盖。两个指令一起使用时,EntryPoint指令作为可执行文件,而CMD指令则为Entrypoint指令提供默认参数。
19、Docker网络驱动主要有哪几种?
常用的Docker网络驱动有bridge(桥接网络)、host(主机网络)、overlay(覆盖网络)、macvlan、none和网络插件。
20、Docker的容器支持哪几种网络模式?
bridge模式、host模式、container模式和none模式,以及自定义网络。
21、什么是Swarm集群?
Swarm本意是蜂群,Docker使用这个概念表示由多个Docker引擎组成的一个整体,也就是集群。一个Swarm集群包括多个以Swarm模式运行的Docker主机,它们充当管理器,负责管理成员和代理;或者充当工作者,负责运行Swarm服务。Swarm集群管理的对象主要是服务,而不是独立的容器。
22、什么是Swarm节点?节点按角色分为哪集中类型?
Swarm集群由一个或多个多个组成。这些节点可以是运行Docker引擎的物理机或虚拟机。节点按角色分为管理器节点和工作者节点两种类型。
22、什么是Swarm服务?什么Swarm任务?
Swarm服务用于定义要在节点上执行的任务,是整个集群系统的核心结构,也是用户与Swarm集群交互的基本单元。用户在创建服务时可以指定要使用的容器镜像和要在容器中执行的命令。Swarm服务相对于独立容器的一个关键优势是,无须重启服务就可以修改服务的配置,如要链接的网络和卷。
Swarm任务用户定于容器和要在容器中运行的命令。它是Swarm集群的原子调度单位。管理器节点根据服务规模中设置的副本数量将任务分配给工作者节点。一旦任务被分配给某个节点,就不能转移到另一个节点,只能在所分配的节点上正常运行或运行失败。
23、按顺序列出Swarm模式中调度要执行的工作任务?
1)通过docker service create命令创建一个服务。
2)请求到达管理器节点。
3)管理器节点将该服务安排在特定的节点上运行。
4)每个服务可以多个任务。
5)每个任务都有一个生命周期,都要经历新建、挂起和完成这样的状态。任务是一次性运行的执行单元。当任务终止时,就不再被执行,但是一个新的任务会取代它。
24、排空节点具有什么特点?有什么用途?
调度器不能够将任务安排给排空节点,节点处于排空状态会停止其中已存在的任务,并将这些任务分配到其他活动状态的节点中。
排空节点可用来阻止调度器将任务放置到某个节点,最典型的就是管理器。节点计划维护时,也可将其排空。
25、使用Docker栈部署和管理应用程序的基本流程?
1)准备应用程序镜像;
2)将镜像推送到Docker注册中心;
3)编写栈文件,然后使用docker stack deploy命令一键部署。
4)对于已部署应用程序的更新,应该通过修改栈文件,再用docker stack deploy命令一键更新。
26、Docker栈和Docker Compose之间的区别?
Docker Compose可以构建镜像,更适用于开发场景和多服务的单机部署。
Docker栈不支持构建指令,无法构建新的镜像,要求镜像已构建并发布到镜像注册中心,更适合生产环境和多服务的集群部署。
Docker Compose支持3.0版本以下的Compose文件格式,而Docker栈要求Compose文件格式的版本不低于3.0.
Docker Compose是一个独立的工具,需要安装,而Docker栈作为Swarm模式的一部分,无须安装。
网友评论