Bootstrap

Docker面试题大全整理

第一部分

1、如何在生产中监控Docker?

Docker提供docker statusdocker事件等工具来监控生产中的Docker。我们可以使用这些命令获取重要统计数据的报告。
Docker统计数据: 当我们使用容器ID调用docker stats时,我们获得容器的CPU、内存使用情况等。它类似于Linux中top命令。
Docker事件: Docker事件是一个命令,用于查看Docker守护进程中整改再进行的活动流。一些常见的Docker事件是:attach、commit、die、datach、rename、destroy等。

2、什么是docker-compose?

简单点说就是,docker-compose就是一个编排同时管理多个容器的工具,与它配对使用的是一个docker-compose.yaml文件,docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用。且当下docker-compose命令只能管理当前目录docker-compose文件中所涉及的容器,安装在机器上的其他容器无法干扰。docker-compose的大部分命令基本和docker的命令重合,他们唯一的区别是docker命令能管理机器上所有的容器和镜像文件,而docker-compose只能管理当前docker-compose文件所涉及的容器。

3、Docker镜像联合文件系统

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分成,轻量级并且高性能的文件系统,他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统的Docker镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统进行叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

4、什么是Docker Hub?

Docker Hub是一个由Docker公司运行和管理的基于云的存储库。它是一个在线存储库,DOcker进行可以由其他用户发布和使用。

5、Docker安全么?

Docker利用了Linux内核中很多安全特性来保证不同容器之间的隔离,并且通过签名机制来对镜像进行验证。大量生产环境的部署证明,Docker虽然隔离性无法与虚拟机相比,但仍然具有极高的安全性。

6、Docker容器可扩展到多远?

诸如Foogle和Twitter之类的大型Web部署以及诸如Heroku和dotCloud之类的平台提供商都基于容器技术运行,并行运行的容器数以十万甚至至数八百计。

7、Docker容器退出时是否丢失数据?

不、当Docker容器退出时,不会丢失数据。应用程序写入磁盘的所有数据都会保留在其容器中直到您明确删除该容器为止。即使在容器停止后,该容器的文件系统仍然存在。

第二部分

1、什么是Docker

slogan:Build Ship Run Any App Anywher。关键在于Ship,通过把程序和程序运行所需要的环境一起交付。
Linux容器技术:
  Docker是在Linuk容器(Linux Containers)技术的基础上发展起来的。LUX把单个操作系统的资源划分到多个孤立的组里,在孤立的组里平衡有冲突的资源使用需求。与虚拟机相比,这种通过划分组来平衡资源冲突的方式代价更小,它不需要指令级别模拟也不需要即使编译。容器直接在本地CPU上运行。

2、为什么要使用Docker
  • 更快的交付和部署。开发人员使用镜像构建标准开发环境,运维和测试人员使用镜像来获得和开发人员相同的运行环境。开发环境和测试运维环境无缝对接,节约开发、测试、部署时间。
  • 更高效的资源利用。相较于虚拟机而言Docker不需要额外的Hypervisor支持,Docker是内核级别的虚拟化,实现更高的性能。
  • 更简单的更新管理。使用Dockerfile,通过简单的修改就可以代替大量的更新操作。
3、Docker与虚拟化

虚拟化:虚拟化是对计算机资源的抽象,是为了更好的管理计算机资源。让同时运行在一个计算机上的多个进程以为自己能够独占当前操作系统资源
Docker虚拟化与虚拟机比较

  • Docker是操作系统级的虚拟化,内核通过创建多个虚拟的操作系统实例来隔离进程。虚拟机是硬件辅助虚拟化,虚拟的是整个硬件。
  • 虚拟机需要模拟一个独立的OS Kernel而Docker不需要
  • 虚拟机需要一个虚拟机管理程序如VMware,而Docker只需要一个Docker引擎,后者的开销更小
  • Docker更快妙级,虚拟机分级别
  • Docker对系统资源需求更少
  • Docker通过类似Git理念来方便用户获取、分发更新镜像
  • Docker通过dockerfile实现灵活的创建、部署机制
      虚拟机和Docker本质的区别在于虚拟化的方式不同,虚拟机是一种硬件级别的虚拟化,通过软件去模拟硬件系统,并且虚拟机里需要虚拟OS Kernel。Docker是一种容器,是一种隔离机制,是软件级别的模拟。

第三部分

Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

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

CI功能就是在每次提交之后不断地集成所有提交到存储库的代码,并编译检查错误

  • Docker镜像?
    Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像
  • Docker容器?
    Docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行
  • Docker容器有几种状态?
    Docker容器可以有四种状态:运行、已暂停、重新启动、已退出
  • Docker使用流程
    1)创建Dockerfile后,您可以构建它以创建容器的镜像
    2)推送或拉取镜像。
  • Dockerfile中最常见的指令是什么?
    Dockerfile中的一些常用指令如下:
    FROM:指定基础镜像
    LABEL:功能是为镜像指定标签
    RUN:运行指定的命令
    CMD:容器启动时要运行的命令
  • Dockerfile中的命令COPY和ADD命令有什么区别?
    COPY与ADD的区别COPY的只能是本地文件,其他用法一致
  • docker常用命令?
    docker pull 拉取或者更新指定镜像
    docker push 将镜像推送至远程仓库
    docker rm 删除容器
    docker rmi 删除镜像
    docker images 列出所有镜像
    docker ps 列出所有容器
2、DevOps有哪些优势?

技术优势:更快地解决问题
商业利益:有更多时间可以增加价值(而不是修复/维护)

3、什么是虚拟化?

主要有三种类型的虚拟化:

  • 仿真
  • 半虚拟化
  • 基于容器的虚拟化
4、Docker与虚拟机有何不同?

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。

5、容器内部机制?

每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源。

6、什么是Docker Hub?

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

7、镜像与 UnionFS区别

Linux 的命名空间和控制组分别解决了不同资源隔离的问题,前者解决了进程、网络以及文件系统的隔离,后者实现了 CPU、内存等资源的隔离,但是在 Docker 中还有另一个非常重要的问题需要解决 - 也就是镜像。
Docker 镜像其实本质就是一个压缩包,我们可以使用命令将一个 Docker 镜像中的文件导出,你可以看到这个镜像中的目录结构与 Linux 操作系统的根目录中的内容并没有太多的区别,可以说 Docker 镜像就是一个文件。

第四部分

1、什么Docker?

答:Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

2、Docker与虚拟机的不同点在哪里?

答:Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。为此,Docker最初使用LXC驱动程序,然后移动到libcontainer现在重命名为runc。Docker主要专注于在应用程序容器内自动部署应用程序。应用程序容器旨在打包和运行单个服务,而系统容器则设计为运行多个进程,如虚拟机。因此,Docker被视为容器化系统上的容器管理或应用程序部署工具。

3、Docker容器有几种状态?

答:有四种状态:运行、已暂停、重新启动、已退出。

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

答:FROM:指定基础镜像;LABEL:功能是为镜像指定标签;RUN:运行指定的命令;CMD:容器启动时要运行的命令。

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

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

6、什么是Docker镜像?

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

7、解释基本的Docker使用工作流程是怎样的?

答:(1)从Dockerfile开始,Dockerfile是镜像的源代码;(2)创建Dockerfile后,可以构建它以创建容器的镜像。图像只是“源代码”的“编译版本”,即Dockerfile;(3)获得容器的镜像后,应使用注册表重新分发容器。注册表就像一个git存储库,可以推送和拉取镜像;接下来,可以使用该图像来运行容器。在许多方面,正在运行的容器与虚拟机(但没有虚拟机管理程序)非常相似。

8、如何在生产中监控Docker?

答:Docker提供docker stats和docker事件等工具来监控生产中的Docker。我们可以使用这些命令获取重要统计数据的报告。
Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
Docker事件:Docker事件是一个命令,用于查看Docker守护程序中正在进行的活动流。一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。

9、Docker如何在非Linux系统中运行容器?

答:通过添加到Linux内核版本2.6.24的名称空间功能,可以实现容器的概念。容器将其ID添加到每个进程,并向每个系统调用添加新的访问控制检查。它由clone()系统调用访问,该调用允许创建先前全局命名空间的单独实例。

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

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

第五部分

1.Docker常用命令

docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器

2.docker是怎么工作的

实际上docker使用了常见的CS架构,也就是client-server模式,docker client负责处理用户输入的各种命令,比如docker build、docker run,真正工作的其实是server,也就是docker demon,值得注意的是,docker client和docker demon可以运行在同一台机器上。
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。守护进程和客户端可以运行在同一台机器上。

3.docker容器之间怎么隔离

Linux中的PID、IPC、网络等资源是全局的,而NameSpace机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的NameSpace,各个NameSpace下的资源互不干扰。
虽然有了NameSpace技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用control groups技术(也就是cgroup),有了cgroup就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。
有了这两项技术,容器看起来就真的像是独立的操作系统了。

4.容器与主机之间的数据拷贝命令

Docker cp命令用于穷奇与主机之间的数据拷贝
主机到哦容器:docker cp /www 96f7f14e99ab:/www/
容器到主机:docker cp 96f7f14e99ab:/www /tmp

5.如何在生产中监控docker

Docker提供docker:stats和docker事件等工具来监控生产中的docker。我们可以使用这些命令获取重要统计数据的报告。
Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
Docker事件:docker事件是一个命令,用于查看docker守护程序中正在进行的活动流。一些常见的docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感性其的事件。

6.DockerFile中的命令COPY和ADD命令有什么区别

COPY和ADD的区别时COPY的SRC只能是本地文件,其他用法一致。

7.一个完整的Docker由哪些部分组成

1)DockerClient客户端
2)Docker Daemon守护进程
3)Docker Image镜像
D)4ockerContainer容器

8.进入容器的方法有哪些

1、使用 docker attach 命令
2、使用 exec 命令,例如docker exec -i -t 784fd3b294d7 /bin/bash

9.Docker与虚拟机有何不同

Docker不是虚拟化方法。它依赖于实际实现基于容器的虚拟化或操作系统级虚拟化的其他工具。为此,Docker最初使用LXC驱动程序,然后移动到libcontainer现在重命名为runc。Docker主要专注于在应用程序容器内自动部署应用程序。应用程序容器旨在打包和运行单个服务,而系统容器则设计为运行多个进程,如虚拟机。因此,Docker被视为容器化系统上的容器管理或应用程序部署工具。
1)与虚拟机不同,容器不需要引导操作系统内核,因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取。
由于基于容器的虚拟化为主机增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能
2)对于基于容器的虚拟化,与其他虚拟化不同,不需要其他软件。
主机上的所有容器共享主机的调度程序,从而节省了额外资源的需求。
3)与虚拟机映像相比,容器状态(Docker或LXC映像)的大小很小,因此容器映像很容易分发。
4)容器中的资源管理是通过cgroup实现的。Cgroups不允许容器消耗比分配给它们更多的资源。虽然主机的所有资源都在虚拟机中可见,但无法使用。
这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似。

10.什么是联合文件系统(UnionFS)

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。UnionFS是一种分层、轻量级并且高性能的文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

;