纯!干!货!2019年19个Docker面试问题和解答!一线大厂必看!

wechat 2019-07-24 14:47:41 408
本文来自 cloud_dev ,作者 wechat

Q1

DevOps需要什么?

主题:DevOps
难度:⭐

如今,公司不再发布大量功能,而是尝试将小的功能传输给客户。这有许多优点,如来自客户的快速反馈,更好的软件质量等,从而导致高客户满意度。为了实现这一目标,公司必须:

  1. 增加部署频率

  2. 降低新版本的故障率

  3. 缩短修复之间的准备时间

  4. 新版本崩溃时更快的平均恢复时间

DevOps满足所有这些需求,并帮助实现无缝的软件交付。

 Q2

DevOps有哪些优势?

主题:DevOps
难度:⭐⭐

技术优势:

  • 持续的软件交付

  • 需要修复不太复杂的问题

  • 更快地解决问题

商业利益:

  • 更快地提供功能

  • 更稳定的操作环境

  • 更多时间可用于增加价值(而不是修复/维护)

Q3

CI(持续集成)服务器的功能是什么?

主题:DevOps
难度:⭐⭐

CI服务器的功能是持续集成不同开发人员对存储库所做的所有更改,并检查编译错误。它需要一天构建几次代码,最好是在每次提交之后,这样它就可以检测出哪一个提交在发生破坏时造成了破坏。

Q4

什么是docker?

主题:Docker
难度:⭐

  • Docker是一个容器化平台,它将应用程序及其所有依赖项以容器的形式打包在一起,以确保应用程序在任何环境(无论是开发环境、测试环境还是生产环境)中无缝运行。

  • Docker容器,将一个软件包在一个完整的文件系统中,其中包含运行所需的一切:代码、运行时、系统工具、系统库等任何可以安装在服务器上的东西。

  • 它都将始终运行相同的程序,无论软件的环境如何。

Q5

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

主题:Docker
难度:⭐⭐

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

  • 环境变量注入

  • 只读文件系统

Q6

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

主题:Docker
难度:⭐⭐

一般而言,虽然ADD并且COPY在功能上类似,但是首选COPY。

那是因为它比ADD更易懂。COPY仅支持将本地文件复制到容器中,而ADD具有一些功能(如仅限本地的tar提取和远程URL支持),这些功能并不是很明显。因此,ADD的最佳用途是将本地tar文件自动提取到镜像中,如ADD rootfs.tar.xz /。

Q7

什么是Docker镜像?

主题:Docker
难度:⭐⭐

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

Q8

什么是Docker容器?

主题:Docker
难度:⭐⭐

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

Q9

什么是Docker Hub?

主题:Docker
难度:⭐⭐

Docker hub是一个基于云的注册表服务,允许您链接到代码存储库,构建映像并测试它们,存储手动推送的镜像以及指向Docker云的链接,以便您可以将镜像部署到主机。它为整个开发流程中的容器发现,分发和变更管理,用户和团队协作以及工作流自动化提供了集中资源。

10

Docker容器在任何给定时间点可以处于什么状态?

主题:Docker

难度:⭐⭐

在任何给定的时间点,Docker容器都可以有四种状态。如下:

  • 运行

  • 已暂停

  • 重新启动

  • 已退出


11

有没有办法识别Docker容器的状态?

主题:Docker

难度:⭐⭐

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

docker ps –a

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

12

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

主题:Docker

难度:⭐⭐

Dockerfile中的一些常见指令如下:

FROM:我们使用FROM为后续指令设置基本镜像。在每个有效的Dockerfile中,FROM是第一条指令。

LABEL:我们使用LABEL根据项目,模块,许可等组织我们的镜像。我们也可以使用LABEL来帮助实现自动化。在LABEL中,我们指定一个键值对,以后可用于以编程方式处理Dockerfile。

RUN:我们使用RUN命令在当前图像之上的新图层中执行任何指令。使用每个RUN命令,我们在图像上添加一些内容,并在Dockerfile的后续步骤中使用它。

CMD:我们使用CMD命令提供执行容器的默认值。在Dockerfile中,如果我们包含多个CMD命令,则只使用最后一条指令。

13

什么类型的应用程序 - 无状态或有状态更适合Docker容器?

主题:Docker

难度:⭐⭐

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

14

解释基本的Docker使用工作流程

主题:Docker

难度:⭐⭐⭐

  1. 一切都从Dockerfile开始。Dockerfile是镜像的源代码。

  2. 创建Dockerfile后,您可以构建它以创建容器的镜像。图像只是“源代码”的“编译版本”,即Dockerfile。

  3. 获得容器的镜像后,应使用注册表重新分发容器。注册表就像一个git存储库 - 你可以推送和拉取镜像。

  4. 接下来,您可以使用该图像来运行容器。在许多方面,正在运行的容器与虚拟机(但没有虚拟机管理程序)非常相似。

 +------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
   | Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
   +------------+                 +--------------+                   +-----------+                    +------+
                                    ^
                                    | docker pull
                                    |
                                  +--------------+
                                  |   Registry   |
                                  +--------------+

15

Docker Image和Layer有什么区别?

主题:Docker

难度:⭐⭐⭐

Image:Docker镜像是由一系列只读层构建的

Layer:每个层代表Dockerfile中的指令。

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





FROM ubuntu:15.04COPY . /appRUN make /appCMD python /app/app.py

重要的是,每个层只是与之前层的一组差异。

16

什么是虚拟化?

主题:Docker

难度:⭐⭐⭐

在其构想的形式中,虚拟化被认为是逻辑上划分大型机以允许多个应用程序同时运行的方法。但是,当公司和开源社区能够以某种方式提供处理特权指令的方法,并允许在单个基于x86的系统上同时运行多个操作系统时,情况发生了巨大变化。

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

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

  • 仿真

  • 半虚拟化

  • 基于容器的虚拟化

17

什么是管理程序?

主题:Docker

难度:⭐⭐⭐

管理程序处理创建用户虚拟机运行的虚拟环境。它监督用户系统,并确保在必要时为客户分配资源。虚拟机管理程序位于物理机和虚拟机之间,并为虚拟机提供虚拟化服务。为了实现它,它拦截虚拟机上的客户操作系统操作,并模拟主机操作系统上的操作。

虚拟化技术的快速发展(主要是在云端),通过允许在一个物理服务器上创建多个虚拟服务器,借助于管理程序(如Xen、VMware Player、KVM等),以及在商品处理器(如Intel VT AN)中集成硬件支持,进一步推动了虚拟化的使用。例如Intel VT和AMD-V。

18

什么是Docker Swarm?

主题:Docker

难度:⭐⭐⭐

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

19

您将如何监控生产中的Docker?

主题:Docker

难度:⭐⭐⭐

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

Docker stats:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。

Docker events:Docker events是一个命令,用于查看Docker守护程序中正在进行的任务。

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