09月23日
2019 DevOps 必备面试题——容器化和虚拟化

原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3
原文作者:Saurabh Kulshrestha
翻译君:CODING 戴维奥普斯

让我们看看你对容器和虚拟机的了解程度。

Q1. 什么是容器?

容器提供了从开发人员的笔记本电脑到测试环境、从类生产环境到生产环境一致的运行环境。

接下来给出容器的定义,容器由一个完整的运行环境组成:将一个应用程序,以及它所有的依赖项、库和其他二进制文件,以及运行它所需的配置文件打包到一起。将应用平台及其依赖项容器化,可以消除操作系统版本和底层基础架构间的差异。

图片

Q2. 容器化相比虚拟化有哪些优势?

以下是容器化相对于虚拟化的优势:
* 容器提供实时资源调配和可拓展性,虚拟机提供的资源调配速度较慢
* 与虚拟机相比,容器是轻量级的
* 与容器相比,虚拟机的性能有限
* 与虚拟机相比,容器具有更好的资源利用率

Q3. 容器(在我们的例子中指 Docker)与管理程序虚拟化(vSphere)有何不同?有哪些好处?

以下是一些不同之处。请确保在你的回答中包含这些差异:

图片

Q4. 什么是 Docker 镜像?

Docker 镜像是 Docker 容器的来源,换句话说,Docker 镜像用于创建容器。使用 build 命令创建镜像,当开始运行时,它们将生成一个容器。镜像存储在 Docker 注册表中,如 registry.hub.docker.com,因为它们可能变得非常大,镜像被设计成由其他镜像层组成,允许在通过网络传输镜像时发送最小的数据量。

提示:请关注 Dockerhub,以便回答有关预可用镜像的问题。

Q5. 什么是 Docker 容器?

这是一个非常重要的问题,所以请确保回答不偏离主题,我建议你遵循以下格式:
Docker 容器包括应用程序及其所有依赖项,但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。Docker 容器不绑定于任何特定的基础架构:它们可以在任何计算机、任何基础架构和任何云上运行。

现在解释如何创建 Docker 容器:可以通过创建 Docker 镜像然后运行它来创建 Docker 容器,也可以使用 Dockerhub 上已存在的 Docker 镜像。
Docker 容器基本上是 Docker 镜像的运行时实例。

Q6. 什么是 Docker Hub?

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

Q7. Docker 与其他容器技术有何不同?

据我所知,你的答案应该包括以下几点:
Docker 容器易于在云上部署。与其他技术相比,它可以在相同硬件上运行更多应用程序,使开发人员可以轻松地快速创建可立即运行的容器化应用程序,并使管理和部署应用程序变得更加容易。你甚至可以与你的应用程序共享容器。

你也可以补充更多要点,但要确保上述内容在你的回答中。

Q8. 什么是 Docker Swarm?

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

我还建议你提及一些支持的工具:
* Dokku
* Docker Compose
* Docker Machine
* Jenkins

Q9. Dockerfile 的用途是什么?

Docker 可以通过从 Dockerfile 中读取指令来自动构建镜像。

Dockerfile 是一个配置文件,其中包含用户可以在命令行上调用以组合镜像的所有命令。使用 Docker 构建用户可以创建一个连续执行多个命令行指令的自动构建。

现在可能会有几个问题来测试你在 Docker 使用上的经验。

Q10. 我可以在 Docker 中使用 json 替代 yaml 来作为我的 compose 文件吗?

你可以使用 json 替代 yaml 来作为你的 compose 文件,使用带有 compose 的 json 文件,请指定文件名,例如:
docker-compose -f docker-compose.json up

Q11. 你在过去的职位中是如何使用 Docker 的?

这里需要解释你如何使用 Docker 来帮助进行快速部署,以及如何编写 Docker 脚本,并配合其他工具如 Puppet、Chef 或 Jenkins 等来使用 Docker。如果你在 Docker 方面缺乏以往的实践经验,但是在类似的领域中有过使用其他工具的经验,请诚实地告知并解释相同的内容。在这种情况下,如果您可以将其他工具与 Docker 在功能方面进行比较,这是有意义的。

Q12. 如何创建 Docker 容器?

关于这个我建议你给出一个直观的回答——可以使用以下命令使用 Docker 镜像创建 Docker 容器:
docker run -t -i
此命令将创建并启动容器。

你还应该提到,如果要检查主机上所有状态为正在运行的容器的列表,需要使用以下命令:
docker ps -a

Q13. 如何停止并重新启动 Docker 容器?

要停止 Docker 容器,可以使用以下命令:
docker stop

现在重新启动 Docker 容器,可以使用以下命令:
docker restart

Q14. Docker 容器可以扩展到什么程度?

像 Google 和 Twitter 这样的大型网络部署,以及像 Heroku 和 DotCloud 这样的平台供应商都运行在容器技术上,规模达到几十万甚至数百万个容器并行运行。

Q15. Docker 在什么平台上运行?

首先,我会说 Docker 通常在 Linux 和云平台上运行,然后我会提到以下 Linux 供应商:
* Ubuntu 12.04、13.04 等
* Fedora 19/20+
* RHEL 6.5+
* CentOS 6+
* Gentoo
* ArchLinux
* openSUSE 12.3+
* CRUX 3.0+

Q16.当 Docker 容器退出时,我会丢失数据吗?

你可以这样回答:当 Docker 容器退出时,我不会丢失我的数据。在你明确删除容器前,应用程序写入磁盘的任何数据都将保留在其容器中。即使在容器停止后,容器的文件系统仍然存在。

以上就是全部内容,我希望这些问题能帮助你破解 DevOps 面试!

coding2460