Stephen主梁

在申请下一份工作时,软件工程师需要准备好回答Docker面试的问题。为什么?Docker的使用近年来呈指数级增长被称为第三个最常用的平台在2019年的一项调查中,Linux和Windows之后。

Docker是一个庞大的生态系统,其中包含许多工具、关键字和需要了解的主题。为了帮助你在招聘经理面前取得好成绩,这里有20多个最常见的docker关系问题和答案,你可以为下次面试做准备。

问:Docker CLI和Docker守护进程有什么区别?

Docker CLI(命令行接口)和Docker守护进程经常混淆。守护进程是完成繁重工作的程序,充当代表服务器的Docker引擎。守护进程构建映像并管理已创建的容器。

CLI是与守护进程交互的Docker客户端。CLI接收命令并将它们提供给守护进程。

Docker和Kubernetes:完整指南

2021年8月

畅销书
  • 332课
  • 所有级别
4.7 (42905)

使用Kubernetes构建、测试和部署Docker应用程序,同时学习生产风格的开发流程|bob外围官网斯蒂芬·主梁

探索课程

问:Docker CLI中最重要的命令是什么?

最重要的命令是你一直在使用的,所以列出那些你每天都在使用的命令。

问:在容器中运行数据库有哪些注意事项?

请记住,Docker容器本质上是短暂的。当容器被移除时,您将永远丢失其中的数据。

如果要在容器中运行数据库,则需要数据持久性策略。这通常是通过在容器中装入一个卷来实现的。然后,数据库可以将其数据存储在该卷中。如果容器被删除,数据将通过卷持久化。然后,我们可以创建一个新容器,并将相同的卷挂载到其中,以重用该数据。

问:创建Docker映像的最佳方法是什么?

始终使用Dockerfile创建Docker映像。Dockerfiles是一种文本文档,它指定了守护进程创建映像时应该使用的一系列清晰的步骤。它们很容易被其他工程师阅读和修改。

不要通过创建一个容器,手动更改它,然后运行' docker commit '来创建图像。这可能会创建一个图像,但对其他工程师来说,复制该图像将是一个挑战。

问:如何调试正在运行的容器?

有一些方法可以用来调试正在运行的容器:

问:Dockerfiles是用JSON还是YAML语法编写的?

技巧的问题!Dockerfile的容器既不是JSON也不是YAML。该语法只在docker-compose文件中使用。

Dockerfile中使用的语法没有设置名称。你应该说Dockerfiles包含一系列Docker命令。

问:容器能够完全访问其主机操作系统吗?

Docker容器默认与主机操作系统隔离。容器可以通过设置“特权”标志来访问主机操作系统。当你创建一个带有“特权”标志的容器时,它将拥有对主机操作系统的完全访问权。

问:为什么要运行挂有“特权”标志的集装箱?

运行带有“特权”标志的Docker容器有几个理由。最常见的原因是,您希望容器能够自己创建容器。

问:CLI命令“stop”和“kill”有什么区别?

' stop '命令向主进程发送' SIGTERM '信号。Docker然后等待进程退出。如果进程没有退出,Docker将在十秒后发送' SIGKILL '信号。

“kill”命令立即向主进程发送一个“SIGKILL”信号。

问:“attach”和“exec”命令有什么区别?

使用' exec '命令在容器内部运行命令。您运行的命令可以在容器中启动一个新进程。

' attach '命令与主进程的流进行交互。特别是,它将与STDOUT、STDERR和STDIN流交互。

总之:当你想在容器中运行一个新命令时,使用' exec '。使用' attach '命令与主进程交互。

问:' diff '命令用于什么?

' diff '命令列出容器内所有更改过的文件。这将只列出自创建容器以来所做的更改。

问:所有项目都需要使用Docker Hub吗?

不,并不是所有项目都需要Docker Hub。我们只使用Docker Hub,如果我们需要使用托管在那里的图像。

如果我们想避免使用Docker Hub,我们可以从头开始构建每个映像。

问:如何约束容器可以使用的资源?

你可以通过在' docker run '命令中添加一些选项来限制容器使用的资源。

问:Docker容器和虚拟机是一回事吗?

不,Docker容器并不等同于虚拟机。Docker容器是一个或一组沙箱化的进程,限制了对主机文件系统的访问。但是,虚拟机是由hypervisor管理的。

问:你用Docker CLI创建的所有图像都会自动发布到一个公共注册中心,比如Docker Hub吗?

不,您构建的图像不会自动推送到公共注册中心。构建的映像仅在构建它们的机器上可用。要使该映像在其他地方可用,必须手动将其推入公共注册中心。

问题:在应用程序开发过程中使用Docker有哪些优点和缺点?bob外围官网

优点

缺点

问:在构建新映像时,如何告诉Docker CLI忽略目录中的所有文件?

创建一个”。dockerignore”文件。该文件遵循与'相同的规则。gitignore”文件。在”。dockerignore '文件,你会列出每个Docker应该忽略的文件和文件夹,当构建一个新映像。

问:为什么要Docker在构建映像时忽略目录?

在构建映像时,Docker应该处理安装所有相关依赖项。如果你给Docker一份依赖项的拷贝,它们将在映像构建期间被覆盖。通过忽略依赖关系,它确保了构建时间的快慢。

问:“create”、“start”和“run”命令有什么区别?

问:当容器的主要进程崩溃时会发生什么?

它取决于在构建容器时分配给它的重新启动策略。

问:Docker映像是如何创建的?

有两种方法可以创建Docker映像。

1.你可以使用Dockerfile命令' docker build '来创建镜像

2.镜像也可以通过在容器上运行' docker commit '命令来创建

问:什么是图像中的“图层”?

Docker映像由许多层构建而成。每一层表示一组对文件系统的更改。

创建Docker映像时,它从一个空文件系统开始。当Dockerfile的每一步运行时,另一层将被添加到图像中。

问:两个正在运行的容器可以共享同一个映像层吗?

是的!当你创建一个容器时,Docker会向底层图像添加一个新层。对容器文件系统所做的任何更改都将写入这一层。

属于底层图像的层永远不会改变。Docker将在基于该映像运行的每个容器之间共享它们。

这些原始层中的文件只能通过读操作访问。您不能通过容器对它们进行写入。

问:使用Docker CLI运行单个容器很容易。管理多个集装箱更具挑战性。什么术语指的是管理多个集装箱的过程?另外,有什么工具可以管理许多容器?

管理一个以上的容器称为“编排”。

有两种常用的容器“编排”工具:

  1. Docker Swarm, Docker官方解决方案。
  2. Kubernetes是谷歌首次引入的一个流行的开源解决方案。

这些工具中的每一个都创建容器并管理它们的生命周期。它们还用于处理不同容器之间的网络连接。

问:假设您创建了一个1GB大小的映像。然后从这个映像创建五个独立的容器。在每个映像中,创建一个大小为200MB的文件。整个操作使用了多少磁盘空间?

从映像创建的每个容器使用的磁盘空间可以忽略不计。制作一组五个容器并不会消耗大量的空间。但是,每个容器中生成的每个200MB文件消耗的都是200MB。

整个操作使用1GB的原始图像,然后每个容器使用5 * 200MB,最终总共使用2GB。

从图像创建容器不会复制底层图像的层。

问:监视运行中的容器最简单的方法是什么?

监视容器最简单的方法是使用' docker ps '命令。这将打印出所有正在运行的容器的状态。

使用' docker attach '命令也很容易监视容器。这将打印容器中的日志,显示主进程的STDOUT和STDERR流。

通过STDOUT和STDERR发出的所有过去的日志都可以使用' docker logs '命令打印出来。这对于查看容器过去做了什么很有用。

问:列出Dockerfile中出现的一些不同命令。每条命令的目的是什么?

Dockerfiles包含许多不同的命令。

页面最后更新:2020年4月

Docker的顶级课程

Devops基础-使用AWS +Docker+Ansible+Jenkins的CI/CD
拉胡尔谢蒂
4.5 (2291)
畅销书
Docker -为Java开发人员准备的工具
Richard Chesterwood,虚拟配对程序员
4.7 (1856)
与Docker和Docker撰写从一个Docker船长
Nick Janetakis, Docker Captain Program
4.4 (632)
使用Docker进行物联网和DevOps
德里克·摩根
4.7 (37)
Docker -介绍Docker的要点、容器等等
大卫·约瑟夫·卡茨
4.3 (2698)
面向Java开发人员的Docker
约翰•汤普森
4.4 (2568)
Docker精通:Kubernetes +来自Docker船长的蜂群
Bret Fisher,码头船长项目
4.6 (50518)
畅销书
Docker和Kubernetes:完整指南
Stephen主梁
4.7 (42905)
畅销书
Docker for the Absolute初学者- Hands - On - DevOps
Mumshad Mannambeth, KodeKloud Training
4.7 (28048)
畅销书
用Python和Django构建一个后端REST API -高级
马克·温特伯顿,布鲁克·卢瑟福
4.5 (4533)
畅销书
Docker for Node.js Projects From a Docker Captain
Bret Fisher,码头船长项目
4.6 (1127)

更多的码头工人的课程

Docker的学生也会学习

让你的团队。领导行业。

通过Udemy for Business订阅您组织的在线课程和数字学习工具图书馆。

请求一个演示

Stephen Grider的课程

Modern React with Redux
Stephen主梁
4.7 (71049)
畅销书
高级React和Redux
Stephen主梁
4.7 (10124)
流星和反应的实时应用程序
Stephen主梁
4.6 (1946)
畅销书
ES6 Javascript:完整的开发者指南
Stephen主梁
4.6 (10366)
完成Elixir和Phoenix训练营
Stephen主梁
4.5 (5979)
畅销书
Complete React Native + Hooks教程
Stephen主梁
4.6 (38803)
畅销书
完整的MongoDB开发者指南
Stephen主梁
4.6 (6565)
Webpack 2:完整的开发者指南
Stephen主梁
4.5 (5008)
GraphQL with React:完整的开发者指南
Stephen主梁
4.6 (8223)
畅销书
React Native:高级概念
Stephen主梁
4.4 (4907)

Stephen Grider的课程