为应聘者提供20多个Docker面试问题和回答
软件工程师在申请下一份工作时,需要做好回答Docker面试问题的准备。为什么?Docker的使用近年来呈指数级增长,过去也是如此评为第三个最常用的平台排在2019年Linux和Windows之后。
码头工人是一个巨大的生态系统有很多工具,关键字和科目内它知道。为了帮助你的王牌你的时间在招聘经理的面前,这里是最常见的多克 - 关系问题和答案,以研究为您的下一次面试20+。
问:Docker CLI和Docker守护进程之间有什么区别?
泊坞窗CLI(命令行界面)和码头工人守护得到经常被混淆。该守护进程是做繁重,作为代表的服务器泊坞窗引擎运作程序。守护程序建立图像并管理创建容器。
CLI是泊坞窗客户端与后台交互。该CLI接收命令,并将其送入守护进程。
最后更新2020年8月
在学习生产风格的开发工作流|时,使用Kubernetes构建、测试和部署Docker应用程序betwayapp下载安装斯蒂芬·主梁
探索课程最重要的Docker CLI命令是什么?
最重要的命令是你用所有的时间的,所以列出这些你日常的基础上使用。
- ' build '—用于构建新映像的命令
- ' create ' -用于从已构建的映像中创建新的容器
- “PS” - 用列表说明每个容器运行
- ' exec '—在正在运行的容器中运行命令
问:关于在容器中运行数据库有哪些考虑事项?
记住,Docker容器本质上是短暂的。当容器被删除时,您将永远丢失其中的数据。
如果你要运行一个容器的数据库中,你需要一个数据持久化策略。这通常是通过安装在容器的容积来完成。然后,数据库可以存储这个量的它的数据内。如果容器删除,此数据将打通量依然存在。然后,我们可以创建一个新的容器并安装相同的体积将其重新使用该数据。
问:创建Docker镜像的最佳方法是什么?
始终创建使用Dockerfile泊坞的图像。Dockerfiles是指定一个明确的一系列步骤守护程序应该使用它来创建一个图像的文本文档。他们很容易对其他工程师读取和改变。
不要做一个容器中,用手改变它,然后运行“泊坞窗提交”创建图像。这可能会创建一个图像,但它会挑战其他工程师重现图像。
问:如何调试运行中的容器?
有一些方法可以用来调试运行中的容器:
- 使用“docker exec”命令启动容器中的shell。然后可以使用此shell在容器上下文中运行更多命令,并检查其状态。
- 使用“泊坞窗检查”命令来看一看运行的容器的配置。然后,检查给容器中的命令和环境变量。
- 运行“docker logs”命令。这将从StdOut和StdErr打印出日志。
问题:dockerfile是用JSON还是YAML语法写的?
技巧的问题!Dockerfile的容器既不是JSON也不是YAML。该语法只在docker-compose文件中使用。
Dockerfile中使用的语法没有设置名称。应该说Dockerfiles包含一系列Docker命令。
问题:你的容器可以完全访问他们的主机操作系统?
默认情况下,Docker容器与主机操作系统是隔离的。容器可以通过设置“特权”标志来访问主机操作系统。当您创建一个带有“特权”标志的容器时,它将拥有对主机操作系统的完全访问权。
问:为什么你会运行与“特权”标志的容器?
很少有理由运行带有“特权”标志的Docker容器。最常见的原因是您希望容器能够自己创建容器。
问:“停止”和“杀死”CLI命令有什么区别?
所述“停止”命令发送“SIGTERM”信号到主处理。泊坞窗然后等待进程退出。如果进程不退出,码头工人将在稍后发送“SIGKILL”信号十秒钟。
“kill”命令会立即向主进程发送一个“SIGKILL”信号。
问:“attach”命令和“exec”命令之间有什么区别?
使用' exec '命令在容器内运行命令。您运行的命令可以在容器内启动一个新进程。
“attach”命令与主进程的流交互。特别是,它将与STDOUT、STDERR和STDIN流交互。
总结:使用“EXEC”当你想运行在容器中的新命令。使用“连接”命令进行互动与主过程。
问:“diff”命令用于什么?
“diff”命令会列出容器内所有更改过的文件。这将只列出自创建容器以来所做的更改。
问:所有项目都需要使用Docker Hub吗?
不,Docker Hub不是所有项目都需要的。我们只在需要使用托管在Docker Hub上的图像时才使用Docker Hub。
如果我们想避免使用Docker Hub,我们可以从头开始构建每个映像。
问:如何约束容器可以使用的资源?
通过向“docker run”命令添加一些选项,可以限制容器使用的资源。
- 使用“-m”标志,以限制容器访问的内存量。
- 使用“-cpus”命令以限制的处理能力的容器访问的量。
- 使用“-gpus”命令使GPU的提供到容器的过程。
问:Docker容器和虚拟机是一回事吗?
不,Docker容器并不等同于虚拟机。Docker容器是沙箱化的单个进程或一组进程,它们限制了对主机文件系统的访问。然而,虚拟机是由管理程序管理的。
问:你用Docker CLI创建的所有图像都会自动发布到Docker Hub这样的公共注册中心吗?
不,您构建的图像不会自动推送到公共注册表。构建映像仅在构建它们的机器上可用。要使该映像在其他地方可用,必须手动将其推到公共注册表。
问题:在应用程序开发过程中使用Docker的优点和缺点是什么?betwayapp下载安装
优点
- 工程师可以指定我们的程序在运行的确切环境。
- 在泊坞窗每个程序运行可以使用不同的依赖性。例如,一个过程可能需要Python的2.X,而另一个需要Python 3.x的
- 可以为每个容器提供精确的处理能力和内存。然后,您可以确保程序在具有相同规格的生产机器上运行。
- 容器为测试提供了一致的环境。例如,您可能正在编写一个程序来编辑某个目录中的每个文件。要测试这一点,您可以使用一个容器,它总是在给定文件夹中以完全相同的文件启动。这节省了每次运行测试时手工创建这些文件的时间。
- 每个容器都可以有自己的一组依赖容器。例如,不同容器中的两个不同web应用程序可以获得它们自己的数据库副本。在每个web应用程序和数据库之间不会发生冲突。
缺点
- Docker是软件开发生命周期中的另一个依赖项。betwayapp下载安装每个工程师都需要在他们的机器上维护Docker的副本。工程师必须确保他们的Docker版本与他们的同事相同。
- 工程师必须了解Docker,这不是一件容易的事,因为Docker的生态系统非常庞大。使用Docker为基本的应用程序开发引入了新思想和新语法。betwayapp下载安装工程师必须了解如何使用Docker来高效地完成一个项目。
- “Mac Docker”和“Windows Docker”工具并不是100%稳定的。这些工具使开始使用Docker变得很容易,但有时会崩溃。团队使用这些工具可能会损失开发betwayapp下载安装时间。
问:当建立一个新的形象,你怎么能告诉泊坞窗CLI忽略目录中的所有文件?
创建一个”。dockerignore”文件。此文件遵循与'相同的规则。gitignore”文件。在”。dockerignore文件,你将列出Docker在构建新映像时应该忽略的每个文件和文件夹。
问:为什么你要Docker忽略一个目录时,建立一个映像?
泊坞窗应建立处理的图像时,安装所有相关的依赖性。如果你给码头工人的依赖关系的副本,他们将图像生成过程中被覆盖。由于忽略依赖关系,它确保生成时间会迅速。
问:有什么命令“创造”,“开始”和“运行”之间的区别?
- “create”命令会从一个图像创建一个新的容器,但不会启动它。
- “start”命令将在当前未运行的容器中运行主进程。
- “run”命令与在系列中运行“create”然后“start”相同。它将从一个映像创建一个容器,然后在其中运行主进程。
问:当容器的主进程崩溃时会发生什么?
这取决于对应于集装箱在构建时的重新启动策略。
- “否”策略意味着容器在崩溃后将停止运行。这是默认策略。
- 当主进程由于错误而停止时,“on-failure”策略将重新启动主进程。
- “总是”策略将导致主进程总是重新启动。如果手动停止容器,则会覆盖此内容。当Docker守护进程重新启动时,容器也将重新启动。
- 的“除非-停止”的策略是一样的“永远”。但是,当码头工人守护进程重新启动被它不会重新启动。
问:Docker映像是如何创建的?
创建Docker映像有两种方法。
1.您可以通过使用与Dockerfile的“泊坞窗构建”命令创建一个图像
2.映像也可以通过在容器上运行“docker commit”命令创建
问:图片中的“图层”是什么?
Docker图像由许多层构建而成。每一层表示对文件系统的一组更改。
当创建一个码头工人的形象,它开始与一个空文件系统。作为Dockerfile运行的每个步骤中,另一个层被添加到图像。
问:两个正在运行的容器可以共享一个映像的相同层吗?
是的!当你创建一个容器时,Docker会在底层图像中添加一个新图层。对容器文件系统所做的任何更改都将写入这一层。
属于底层图像的层永远不会改变。Docker将在基于该映像运行的每个容器之间共享它们。
这些原始层中的文件只能通过读操作访问。您不能通过容器写入它们。
问:使用Docker CLI运行单个容器很容易。管理许多容器更具挑战性。什么术语是指管理多个容器的过程?还有,有什么工具可以管理许多容器?
管理一个以上的容器被称为“编排”。
有集装箱“编排”两个流行的工具:
- Docker Swarm,官方Docker解决方案。
- Kubernetes,首先由谷歌推出了一款流行的开源解决方案。
这些工具中的每一个都创建了容器并管理它们的生命周期。它们还用于处理不同容器之间的网络连接。
问:假设您创建了一个1GB大小的映像。然后从该映像创建五个独立的容器。在每个映像中,创建一个大小为200MB的文件。整个操作使用了多少磁盘空间?
每个从映像创建的容器使用的磁盘空间微不足道。制作一组五个容器并不会占用大量空间。然而,每个容器中生成的200MB文件确实消耗200MB。
整个操作为原始映像使用1GB,然后为每个容器使用5 * 200MB,最终总计为2GB。
创建一个容器从图像中不重复的底层图像的层。
问:监视正在运行的容器的最简单方法是什么?
监视容器最简单的方法是使用' docker ps '命令。这将打印出所有正在运行的容器的状态。
通过使用“docker attach”命令也可以很容易地监视容器。这将打印来自容器的日志,显示主进程的STDOUT和STDERR流。
通过使用“docker logs”命令打印通过STDOUT和STDERR发出的所有过去的日志。这对于查看容器过去所做的工作非常有用。
问:列出Dockerfile中出现的一些不同的命令。每个命令的目的是什么?
Dockerfiles包含许多不同的命令。
- FROM - 此命令指定基本图像使用,我们正在创建的图像。
- RUN - 用于在其被内置在容器中执行一个命令或命令的系列。
- 复制——将一个或一组文件从主文件系统复制到容器中。
- 指定第一次执行容器时要运行的默认命令。
- 在Dockerfile中设置以后所有命令的工作目录。以后的所有命令都以这个工作目录作为当前工作目录执行。
- USER—以下所有命令都以该用户作为上下文执行。