13. Interview-Docker&k8s

2020-07-24  本文已影响0人  allen锅

1 什么是虚拟化?

虚拟化允许您在相同的硬件上运行两个完全不同的操作系统。每个客户操作系统都经历了引导,加载内核等所有过程。您可以拥有非常严格的安全性,例如,客户操作系统无法完全访问主机操作系统或其他客户端并搞砸了。

可以基于虚拟化方法如何模仿客户操作系统的硬件并模拟客户操作环境来对虚拟化方法进行分类。主要有三种类型的虚拟化:

2 物理机、虚拟机与容器有何不同?

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。为此,Docker最初使用LXC驱动程序,然后移动到libcontainer现在重命名为runc。Docker主要专注于在应用程序容器内自动部署应用程序。应用程序容器旨在打包和运行单个服务,而系统容器则设计为运行多个进程,如虚拟机。因此,Docker被视为容器化系统上的容器管理或应用程序部署工具。

虚拟机&Docker image.png 物理机 虚拟机 容器

3 容器内部机制?Docker底层实现原理?Docker架构?Docker网络实现?

大约在2006年,包括Google的一些员工在内的人们实现了名为命名空间的新的Linux内核级功能(不过这个想法早在FreeBSD中就已存在)。操作系统的一个功能是允许将全局资源(如网络和磁盘)共享到进程。如果将这些全局资源包装在命名空间中,以使它们仅对在同一命名空间中运行的那些进程可见,该怎么办?比如说,你可以获得一大块磁盘并将其放在命名空间X中,然后在命名空间Y中运行的进程无法查看或访问它。类似地,名称空间X中的进程无法访问分配给名称空间Y的内存中的任何内容。当然,X中的进程无法查看或与名称空间Y中的进程通信。这为全局资源提供了一种虚拟化和隔离。

这就是Docker的工作原理:每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源。

Docker底层实现原理

Docker架构

Docker架构 Docker架构2 Docker架构3

Docker网络实现

4 什么是Docker?Docker常用概念?

Docker概念

5 什么是Docker容器?

Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。Docker容器不依赖于任何特定的基础架构,可以在任何计算机,任何基础架构和任何云中运行。

6 什么是Docker镜像?

Docker镜像是Docker容器的源代码。换句话说,Docker镜像用于创建容器。使用build命令创建映像,并且在使用run启动时它们将生成容器。镜像存储在Docker注册表中,因为它们可能变得非常大,镜像被设计为由其他镜像层组成,允许在通过网络传输镜像时发送最少量的数据。镜像是类,容器是对象。

7 如何使用Docker构建与环境无关的系统?

有三个主要功能有助于实现这一目标:

8 什么是仓库(Repository)、仓库注册服务器(Registry)、Docker Hub?

9 什么是Docker Swarm?

Docker Swarm是Docker的本机群集。它将Docker主机池转变为单个虚拟Docker主机。Docker Swarm提供标准的Docker API,任何已经与Docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主机。

10 Docker容器有几种状态?

我们可以通过运行命令来识别Docker容器的状态:

docker ps –a

这将依次列出所有可用的docker容器及其在主机上的相应状态。从那里我们可以很容易地识别感兴趣的容器,以相应地检查其状态。

11 什么类型的应用程序更适合Docker容器?​​​​​​​

最好为Docker Container创建无状态应用程序。我们可以从应用程序中创建一个容器,并从应用程序中取出可配置的状态参数。现在我们可以在生产和具有不同参数的QA环境中运行相同的容器。这有助于在不同场景中重用相同的图像。使用Docker Containers比使用有状态应用程序更容易扩展无状态应用程序。

12 解释基本的Docker使用流程

  1. 一切都从Dockerfile开始。Dockerfile是镜像的源代码。
  2. 创建Dockerfile后,您可以构建它以创建容器的镜像。镜像只是“源代码”的“编译版本”,即Dockerfile。
  3. 获得容器的镜像后,应使用注册表重新分发容器。注册表就像一个git存储库 - 你可以推送和拉取镜像。
  4. 使用该镜像来运行容器。在许多方面,正在运行的容器与虚拟机(但没有管理程序)非常相似。

13 Dockerfile中最常见的指令是什么?​​​​​​​

14 Dockerfile中的命令COPY和ADD命令有什么区别?

15 解释一下dockerfile的ONBUILD指令?

当镜像用作另一个镜像构建的基础时,ONBUILD指令向镜像添加将在稍后执行的触发指令。如果要构建将用作构建其他镜像的基础的镜像(例如,可以使用特定于用户的配置自定义的应用程序构建环境或守护程序),这将非常有用。

16 Docker镜像和层有什么区别?

下面的Dockerfile包含四个命令,每个命令都创建一个层。

FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py

重要的是,每个层只是与之前一层的一组差异层(相同的就不再放到新层中)。

17 如何在生产中监控Docker?

Docker提供docker stats和docker事件等工具来监控生产中的Docker。我们可以使用这些命令获取重要统计数据的报告。

一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件。

18 Docker如何在非Linux系统中运行容器?

通过添加到Linux内核版本2.6.24的名称空间功能,可以实现容器的概念。容器将其ID添加到每个进程,并向每个系统调用添加新的访问控制检查。它由clone()系统调用访问,该调用允许创建先前全局命名空间的单独实例。

如果由于Linux内核中可用的功能而可以使用容器,那么显而易见的问题是非Linux系统如何运行容器。Docker for Mac和Windows都使用Linux VM来运行容器。Docker Toolbox用于在Virtual Box VM中运行容器。但是,最新的Docker在Windows中使用Hyper-V,在Mac中使用Hypervisor.framework。

19 如何在多个环境中使用Docker?

因此,您可能希望定义一个额外的Compose文件,例如production.yml,它指定适合生产的配置。此配置文件只需要包含您要从原始Compose文件中进行的更改。

20 为什么Docker Compose不会等待容器准备就绪,然后继续以依赖顺序启动下一个服务?

21 项目中怎么用Docker的?

结合云厂商系统

22 Docker常用命令

Docker命令

23 虚拟管理层(Hypervisor)是什么?

hypervisor -- 虚拟管理层(程序)-- 负责创建客户虚拟机系统运行所需虚拟硬件环境。它监管客户虚拟操作系统的运行,并为客户系统提供必要的运行资源,保证客户虚拟系统的运行。虚拟管理层(程序)驻留在物理主机系统和虚拟客户系统之间,为虚拟客户系统提供必要的虚拟服务。如何理解它,它侦听运行在虚拟机中的客户操作系统的操作并在主机操作系统中模拟客户操作系统所需硬件资源请求。满足客户机的运行需求。

虚拟化技术的快速发展,主要在云平台,由于在虚拟管理程序的帮助下,可允许在单台物理服务器上生成多个虚拟服务器,驱动着虚拟化技术快速发展及广泛应用。诸如,Xen,VMware,KVM 等,以及商业化的处理器硬件生产厂商也加入在硬件层面支持虚拟化技术的支持。诸如,Intel 的 VT 和 AMD-V 。

24 什么是孤儿卷及如何删除它?

孤儿卷是未与任何容器关联的卷。在 Docker v1.9 之前的版本中,删除这些孤儿卷存在很大问题。

25 什么是半虚拟化(Paravirtualization)?

Paravirtualization,也称为第 1 类虚拟机管理(层)程序,其直接在硬件或 裸机(bare-metal)上运行,提供虚拟机直接使用物理硬件的服务,它帮助主机操作系统,虚拟化硬件和实际硬件进行协作以实现最佳性能。这种虚拟层管理技术的程序一般占用系统资源较小,其本身并不需要占用大量系统资源。这种虚拟层管理程序有 Xen, KVM 等。

26 Docker与k8s关系?

k8s,Kubernetes,中文意思是舵手或导航员,k8s是一个容器集群管理系统,主要职责是容器编排(Container Orchestration):启动容器、回收容器、自动化部署、扩展和管理容器应用。

Docker&k8s

27 k8s与Docker Swarm区别?

Docker&k8s

28 k8s架构

k8s架构图 k8s架构-1个master2个node

一个K8S集群由两部分构成 master节点和node节点。master节点和node节点一般不要部署在一台机器上。

29 k8s优势

上一篇下一篇

猜你喜欢

热点阅读