翻译进度
22
分块数量
3
参与人数

30 个 Docker 相关的 DevOps 面试题

这是一篇协同翻译的文章,你可以点击『我来翻译』按钮来参与翻译。


Docker

基于对应用容器市场实质增长速度的预估(来自 451 个的调查显示,市场估值从 2016 年的 7.62 亿美元增长到 2020 年的 27 亿美元),对容器技术的需求增长维持在高位。对掌握 docker 技术的软件工程师、信息架构师、DevOps 工程师等,市场需求很高。

acHao 翻译于 1周前

问题1:为什么需要 DevOps ?

题目: DevOps
难度: ⭐

在当今,软件开发公司在软件新版本发布方面,多尝试通过发布一系列以小的特性改变集为目标的新软件版本,代替发布一个大特性改变集的新软件版本的方式。这种方式有许多优点,诸如,快速的客户反馈,软件质量的保证等。也会获得较高的客户满意度评价。完成这样的软件发布模式,开发公司需要做到:

  1. 增加软件布署的频率
  2. 降低新发布版本的失败率
  3. 缩短修复缺陷的交付时间
  4. 加快解决版本冲突的问题

DevOps 满足所有这些需求且帮助公司高质完成软件无缝交付的目标

acHao 翻译于 1周前

问题2: Docker 是什么?

题目: Docker
难度: ⭐

  • Docker 是一个容器化平台,它包装你所有开发环境依赖成一个整体,像一个容器。保证项目开发,如开发、测试、发布等各生产环节都可以无缝工作在不同的平台
  • Docker 容器:将一个软件包装在一个完整的文件系统中,该文件系统包含运行所需的一切:代码,运行时,系统工具,系统库等。可以安装在服务器上的任何东西。
  • 这保证软件总是运行在相同的运行环境,无需考虑基础环境配置的改变。
acHao 翻译于 1周前

Q3: DevOps有哪些优势?

主题: DevOps
难度: ⭐⭐

技术优势:

  • 持续的软件交付能力
  • 修复问题变得简单
  • 更快得解决问题

商业优势:

  • 更快交付的特性
  • 更稳定的操作系统环境
  • 更多时间可用于创造价值(而不是修复/维护)
Autumn 翻译于 1周前

问题4:CI 服务有什么用途?

题目: DevOps
难度: ⭐⭐

CI (Continuous Integration)-- 持续集成服务 --主要用于整合团队开发中不同开发者提交到开发仓库中的项目代码变化,并即时整合编译,检查整合编译错误的服务。它需要一天中多次整合编译代码的能力,若出现整合错误,可以优异地准确定位提交错误源。

问题5:如何使用 Docker 技术创建与环境无关的容器系统?

题目: Docker
难度: ⭐⭐

Docker 技术有三中主要的技术途径辅助完成此需求:

  • 存储卷(Volumes)
  • 环境变量(Environment variable)注入
  • 只读(Read-only)文件系统
acHao 翻译于 6天前

问题6:Dockerfile 配置文件中的 COPY 和 ADD 指令有什么不同?

题目:Docker
难度: ⭐⭐

虽然 ADD 和 COPY 功能相似,推荐 COPY 。

那是因为 COPYADD 更直观易懂。 COPY 只是将本地文件拷入容器这么简单,而 ADD 有一些其它特性功能(诸如,本地归档解压和支持远程网址访问等),这些特性在指令本身体现并不明显。因此,有必要使用 ADD 指令的最好例子是需要在本地自动解压归档文件到容器中的情况,如 ADD rootfs.tar.xz

问题7: Docker 映像(image)是什么?

题目: Docker
难度: ⭐⭐

Docker image 是 Docker 容器的源。换言之,Docker images 用于创建 Docker 容器(containers)。映像(Images)通过 Docker build 命令创建,当 run 映像时,它启动成一个 容器(container)进程。 做好的映像由于可能非常庞大,常注册存储在诸如 registry.hub.docker.com 这样的公共平台上。映像常被分层设计,每层可单独成为一个小映像,由多层小映像再构成大映像,这样碎片化的设计为了使映像在互联网上共享时,最小化传输数据需求。

acHao 翻译于 6天前

问题8: Docker 容器(container)是什么?

题目: Docker
难度: ⭐⭐

Docker containers -- Docker 容器 -- 是包含其所有运行依赖环境,但与其它容器共享操作系统内核的应用,它运行在独立的主机操作系统用户空间进程中。Docker 容器并不紧密依赖特定的基础平台:可运行在任何配置的计算机,任何平台以及任何云平台上。

问题9: Docker 中心(hub)什么概念?

题目: Docker
难度: ⭐⭐

Docker hub 是云基础的 Docker 注册服务平台,它允许用户进行访问 Docker 中心资源库,创建自己的 Docker 映像并测试,推送并存储创建好的 Docker 映像,连接 Docker 云平台将已创建好的指定 Docker 映像布署到本地主机等任务。它提供了一个查找发现 Docker 映像,发布 Docker 映像及控制变化升级的资源中心,成为用户组或团队协作开发中保证自动化开发流程的有效技术途径。

acHao 翻译于 6天前

问题10: 在任意给定时间点指出一个 Docker 容器可能存在的运行阶段?

题目: Docker
难度: ⭐⭐

在任意时间点,一个 Docker 容器可能存在以下运行阶段:

  • 运行中(Running)
  • 已暂停(Paused)
  • 重启中(Restarting)
  • 已退出(Exited)

问题11: 有什么方法确定一个 Docker 容器运行状态?

题目: Docker
难度: ⭐⭐

使用如下命令行命令确定一个 Docker 容器的运行状态

$ docker ps –a

这将列表形式输出运行在主机上的所有 Docker 容器及其运行状态。从这个列表中很容易找到想要的容器及其运行状态。

acHao 翻译于 6天前

问题12 :在 Dockerfile 配置文件中最常用的指令有哪些?

题目: Docker
难度: ⭐⭐

一些最常用的指令如下:

  • FROM :使用 FROM 为后续的指令建立基础映像。在所有有效的 Dockerfile 中, FROM 是第一条指令。
  • LABEL: LABEL 指令用于组织项目映像,模块,许可等。在自动化布署方面 LABEL 也有很大用途。在 LABEL 中指定一组键值对,可用于程序化配置或布署 Docker 。
  • RUN: RUN 指令可在映像当前层执行任何命令并创建一个新层,用于在映像层中添加功能层,也许最来的层会依赖它。
  • CMD: 使用 CMD 指令为执行的容器提供默认值。在 Dockerfile 文件中,若添加多个 CMD 指令,只有最后的 CMD 指令运行。
acHao 翻译于 5天前

问题13: 什么类型的应用 - 无状态性 或 有状态性 - 的应用更适合 Docker 容器技术?

题目: Docker
难度: ⭐⭐

对于 Docker 容器创建无状态性(Stateless)的应用更可取。通过从应用项目中将与状态相关的信息及配置提取掉,我们可以在项目环境外建立不依赖项目环境的 Docker 容器。这样,我们可以在任意产品中运行同一容器,只需根据产品需要像问&答(QA)一样给其配置环境即可。 这帮助我们在不同场景重用相同的 Docker 映像。另外,使用 无状态性(Stateless)容器应用相比有状态性(Stateful)容器应用更具伸缩性,也容易创建。

问题14: 解释基本 Docker 应用流程

题目: Docker
难度: ⭐⭐⭐

  1. 初始,所有都有赖于 Dockerfile 配置文件。Dockerfile 配置文件就是创建 Docker image (映像) 的源代码。
  2. 一旦 Dockerfile 配置好了,就可以创建(build)并生成 'image(映像)' ,'image' 就是 Dockerfile 配置文件中 「源代码」的「编译」版本。
  3. 一旦有了 'image' ,就可以在 registry(注册中心) 发布它。 'registry' 类似 git 的资源库 -- 你可以推送你的映像(image),也可取回库中的映像(image)。
  4. 之后,你就可以使用 image 去启动运行 'containers(容器)'。运行中的容器在许多方面,与虚拟机非常相似,但容器的运行不需要虚拟管理软件的运行。
    +------------+  docker build   +--------------+  docker run -dt   +-----------+  docker exec -it   +------+
    | Dockerfile | --------------> |    Image     | --------------->  | Container | -----------------> | Bash |
    +------------+                 +--------------+                   +-----------+                    +------+
                                     ^
                                     | docker pull
                                     |
                                   +--------------+
                                   |   Registry   |
                                   +--------------+
acHao 翻译于 5天前

问题15: Docker Image 和 Docker Layer (层) 有什么不同?

题目: Docker
难度: ⭐⭐⭐

  • Image :一个 Docker Image 是由一系列 Docker 只读层(read-only Layer) 创建出来的。
  • Layer: 在 Dockerfile 配置文件中完成的一条配置指令,即表示一个 Docker 层(Layer)。

如下 Dockerfile 文件包含4条指令,每条指令创建一个层(Layer)。

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

重点,每层只对其前一层进行一(某)些进化。

acHao 翻译于 5天前

问题16:虚拟化技术是什么?

题目: Docker\
难度: ⭐⭐⭐

最初的构想,virtualisation(虚拟化) 被认为是逻辑划分大型主机使得多个应用可以并行运行的一种技术方案。然而,随着技术公司及开源社区的推进,现实发生了戏剧性的转变,以致产生了以一种或某种方式操作特权指令可以在单台基于 x86 硬件的系统上同时运行多个(种)操作系统的技术。

实质的效果是,虚拟化技术允许你在一个硬件平台下运行2个完全不同的操作系统。每个客户操作系统可完成像系统自检、启动、载入系统内核等像在独立硬件上的一切动作。同时也具备坚实的安全基础,例如,客户操作系统不能获取完全访问主机或其它客户系统的权限,及其它涉及安全,可能把系统搞坏的操作。

基于对客户操作系统虚拟硬件、运行环境模拟方法的不同,对虚拟化技术进行分类,主要的有如下3种虚拟化技术种类:

  • 全模拟(Emulation)
  • 半虚拟(Paravirtualization)
  • 基于容器的虚拟化(Container-based virtualization)
acHao 翻译于 5天前

问题17: 虚拟管理层(程序)是什么?

题目: Docker
难度: ⭐⭐⭐

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

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

acHao 翻译于 5天前

问题18: Docker 群(Swarm)是什么?

题目: Docker
难度: ⭐⭐⭐

Docker Swarm -- Docker 群 -- 是原生的 Docker 集群服务工具。它将一群 Docker 主机集成为单一一个虚拟 Docker 主机。利用一个 Docker 守护进程,通过标准的 Docker API 和任何完善的通讯工具,Docker Swarm 提供透明地将 Docker 主机扩散到多台主机上的服务。

问题19: 在使用 Docker 技术的产品中如何监控其运行?

题目:  Docker
难度: ⭐⭐⭐

Docker 在产品中提供如 运行统计和 Docker 事件的工具。可以通过这些工具命令获取 Docker 运行状况的统计信息或报告。

  • Docker stats : 通过指定的容器 id 获取其运行统计信息,可获得容器对 CPU,内存使用情况等的统计信息,类似 Linux 系统中的 top 命令。
  • Docker events :Docker 事件是一个命令,用于观察显示运行中的 Docker 一系列的行为活动。

一般的 Docker 事件有:attach(关联),commit(提交),die(僵死),detach(取消关联),rename(改名),destory(销毁)等。也可使用多个选项对事件记录筛选找到想要的事件信息。

acHao 翻译于 5天前

问题20 : 什么是孤儿卷及如何删除它?

题目: Docker\
难度: ⭐⭐⭐⭐

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

问题21:什么是半虚拟化(Paravirtualization)?

题目: Docker\
难度: ⭐⭐⭐⭐

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

这种虚拟层管理程序有 Xen, KVM 等。

acHao 翻译于 5天前

问题22:Docker 技术与虚拟机技术有何不同?

题目: Docker
难度: ⭐⭐⭐⭐

Docker 不是严格意义上的虚拟化硬件的技术。它依赖 container-based virtualization(基于容器的虚拟化) 的技术实现工具,或可以认为它是操作系统用户运行级别的虚拟化。因此, Docker 最初使用 LXC 驱动它,后来移至由 libcontainer 基础库驱动它,现已更名为 runc 。 Docker 主要致力于应用容器内的应用程序的自动化部署。应用容器设计用于包装和运行单一服务,而操作系统设计用于运行多进程任务,提供多种运算服务的能力。如虚拟机中等同完全操作系统的能力。因此,Docker 被认为是容器化系统上管理容器及应用容器化的布署工具。

  • 与虚拟机不同,容器无需启动操作系统内核,因此,容器可在不到1秒钟时间内运行起来。这个特性,使得容器化技术比其它虚拟化技术更具有独特性及可取性。
  • 由于容器化技术很少或几乎不给主机系统增加负载,因此,基于容器的虚拟化技术具有近乎原生的性能表现。
  • 基于容器的虚拟化,与其他硬件虚拟化不同,运行时不需要其他额外的虚拟管理层软件。
  • 主机上的所有容器共享主机操作系统上的进程调度,从而节省了额外的资源的需求。
  • 与虚拟机 image 相比,容器(Docker 或 LXC images)映像较小, 因此,容器映像易于分发。
  • 容器中的资源分配由 Cgroups 实现。 Cgroup 不会让容器占用比给它们分配的更多的资源。但是,现在其它的虚拟化技术,对于虚拟机,主机的所有资源都可见,但无法使用。这可以通过在容器和主机上同时运行top或htop来观察到。在两个环境中的输出看起来相同。
acHao 翻译于 5天前

Q23: Can you explain dockerfile ONBUILD instruction?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐

The ONBUILD instruction adds to the image a trigger instruction to be executed at a later time, when the image is used as the base for another build. This is useful if you are building an image which will be used as a base to build other images, for example an application build environment or a daemon which may be customized with user-specific configuration.

Q24: Is it good practice to run stateful applications on Docker? What are the scenarios where Docker best fits in?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐

he problem with statefull docker aplications is that they by default store their state (data) in the containers filesystem. Once you update your software version or want to move to another machine its hard to retrieve the data from there.

What you need to do is bind a volume to the container and store any data in the volume.

if you run your container with: docker run -v hostFolder:/containerfolder any changes to /containerfolder will be persisted on the hostfolder. Something similar can be done with a nfs drive. Then you can run you application on any host machine and the state will be saved in the nfs drive.

Q25: Can you run Docker containers natively on Windows?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐

With Windows Server 2016 you can run Docker containers natively on Windows, and with Windows Nano Server you’ll have a lightweight OS to run inside containers, so you can run .NET apps on their native platform.

Q26: How does Docker run containers in non-Linux systems?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐⭐

The concept of a container is made possible by the namespaces feature added to Linux kernel version 2.6.24. The container adds its ID to every process and adding new access control checks to every system call. It is accessed by the clone() system call that allows creating separate instances of previously-global namespaces.

If containers are possible because of the features available in the Linux kernel, then the obvious question is that how do non-Linux systems run containers. Both Docker for Mac and Windows use Linux VMs to run the containers. Docker Toolbox used to run containers in Virtual Box VMs. But, the latest Docker uses Hyper-V in Windows and Hypervisor.framework in Mac.

Q27: How containers works at low level?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐⭐

Around 2006, people including some of the employees at Google implemented new Linux kernel level feature called namespaces (however the idea long before existed in FreeBSD). One function of the OS is to allow sharing of global resources like network and disk to processes. What if these global resources were wrapped in namespaces so that they are visible only to those processes that run in the same namespace? Say, you can get a chunk of disk and put that in namespace X and then processes running in namespace Y can't see or access it. Similarly, processes in namespace X can't access anything in memory that is allocated to namespace Y. Of course, processes in X can't see or talk to processes in namespace Y. This provides kind of virtualization and isolation for global resources.

This is how Docker works: Each container runs in its own namespace but uses exactly the same kernel as all other containers. The isolation happens because kernel knows the namespace that was assigned to the process and during API calls it makes sure that process can only access resources in its own namespace.

Q28: Name some limitations of containers vs VM

Topic: Docker\
Difficulty: ⭐⭐⭐⭐⭐

Just to name a few:

  • You can't run completely different OS in containers like in VMs. However you can run different distros of Linux because they do share the same kernel. The isolation level is not as strong as in VM. In fact, there was a way for "guest" container to take over host in early implementations.
  • Also you can see that when you load new container, the entire new copy of OS doesn't start like it does in VM.
  • All containers share the same kernel. This is why containers are light weight.
  • Also unlike VM, you don't have to pre-allocate significant chunk of memory to containers because we are not running new copy of OS. This enables to run thousands of containers on one OS while sandboxing them which might not be possible to do if we were running separate copy of OS in its own VM.

Q29: How to use Docker with multiple environments?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐⭐

You’ll almost certainly want to make changes to your app configuration that are more appropriate to a live environment. These changes may include:

  • Removing any volume bindings for application code, so that code stays inside the container and can’t be changed from outside
  • Binding to different ports on the host
  • Setting environment variables differently (e.g., to decrease the verbosity of logging, or to enable email sending)
  • Specifying a restart policy (e.g., restart: always) to avoid downtime
  • Adding extra services (e.g., a log aggregator)

For this reason, you’ll probably want to define an additional Compose file, say production.yml, which specifies production-appropriate configuration. This configuration file only needs to include the changes you’d like to make from the original Compose file.\

docker-compose -f docker-com

Q30: Why Docker compose does not wait for a container to be ready before moving on to start next service in dependency order?

Topic: Docker\
Difficulty: ⭐⭐⭐⭐⭐

Compose always starts and stops containers in dependency order, where dependencies are determined by depends_onlinksvolumes_from, and network_mode: "service:...".

However, for startup Compose does not wait until a container is “ready” (whatever that means for your particular application) - only until it’s running. There’s a good reason for this:

  • The problem of waiting for a database (for example) to be ready is really just a subset of a much larger problem of distributed systems. In production, your database could become unavailable or move hosts at any time. Your application needs to be resilient to these types of failures.
  • To handle this, design your application to attempt to re-establish a connection to the database after a failure. If the application retries the connection, it can eventually connect to the database.
  • The best solution is to perform this check in your application code, both at startup and whenever a connection is lost for any reason.

本文章首发在 LearnKu.com 网站上。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://dev.to/fullstackcafe/30-docker-i...

译文地址:https://learnku.com/server/t/42179

参与译者:3
讨论数量: 1

简单自测了一下只有 3 星😂,个别 4 星题目也能答出来。

2周前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!