Docker面试题 资料整理自网络,仅作免费交流分享,侵权删! 更多面试资料请关注微信公众号:程序员面试吧
1、什么是Docker?
Docker是一个容器化平台,它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应 用程序在任何环境中无缝运行。
2、什么是Docker镜像?
Docker镜像是Docker容器的源代码,Docker镜像用于闯将容器,使用Build命令创建镜像。
3、什么是Docker容器?
Docker容器包括应用程序及所有的依赖项,作为操作系统的独立进程运行。
4、Docker容器有几种状态?
四种状态:运行、已停止、重新启动、已退出。
5、DockerFile中最常见的指定是什么?
指令 备注 FROM 指定基础镜像 LABEL 功能为镜像指定标签 RUN 运行指定命令 CMD 容器启动时要运行的命令
6、DockerFile中的命令COPY和ADD命令有什么区别?
COPY和ADD的区别时COPY的SRC只能是本地文件,其他用法一致。
7、Docker的常用命令?
docker pull 拉去或更新指定的镜像 docker push 将镜像推送到远程仓库 docker rm 删除容器 docker rmi删除镜像 docker images 列出所有镜像 docker ps 列出所有容器
8、容器与主机之间的数据拷贝命令?
Docker cp命令用于穷奇与主机之间的数据拷贝 主机到容器:docker cp /www 96f7f14e99ab:/www/ 容器到主机:docker cp 96f7f14e99ab:/www /tmp
9、启动nginx容器(随机端口映射),并挂载本地文件目 录到容器html的命令?
Docker run -d -p --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
10、解释一下dockerfile的ONBUILD指令?
当镜像用作另一个镜像构建的基础时,ONBUILD指令像镜像添加将在稍后执行的触发指令。如果要构建 将用作构建其他镜像的基础的镜像(例如,可以使用特定于用户的配置自定义的应用程序构建环境或守 护程序),这将非常有用。
11、什么是docker Swarm?
Docker Swarm是docker的本地群集。它将docker主机池转变为单个虚拟docker主机。Docjer Swarm 提供标准的docker API,任何已经与docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主 机。
12、如何在生产中监控docker?
Docker提供docker:stats和docker事件等工具来监控生产中的docker。我们可以使用这些命令获取重要 统计数据的报告。 Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它 类似于Linux中的top命令。 Docker事件:docker事件是一个命令,用于查看docker守护程序中正在进行的活动流。一些常见的 docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限 制或过滤我们感性其的事件。
13、Docker如何在非Linux系统中运行容器?
通过添加到Linux内核版本2.6.24的名称空间功能,可以实现容器的概念。容器将其ID添加到每个进程, 并向每个系统调用添加新的访问控制检查。它由clone()系统调用访问,该调用允许创建先前全局命名 空间的单独实例。 如果由于Linux内核中可用的功能而可以使用容器,那么显而易见的问题是非Linux系统如何运行容器。 Docker for Mac和Windows都使用Linux VM来运行容器。Docker Toolbox用于在Virtual Box VM中运 行容器。但是,罪行的docker早Windows中使用Hyper-V,在MAC中使用Hypervisor.framework。
14、如何批量清理临时镜像文件?
可以使用sudo docker rmi $(sudo docker images -q -f danging=true)命令
15、如何查看镜像支持的环境变量?
使用sudo docker run IMAGE env
16、本地的镜像文件都存放在哪里?
于docker相关的本地资源存在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存 放镜像信息,aufs目录下存放具体的镜像底层文件。
17、构建docker镜像应该遵循哪些原则?
整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括: 尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小。 清理编译生成文件、安装包的缓存等临时文件。 安装哥哥软件时候要指定准确的版本号,并避免引入不需要的依赖。 从安全的角度考虑,应用尽量使用系统的库和依赖。 使用dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录。
18、容器退出后,通过docker ps命令查看不到,数据会丢 失么?
容器退出后会处于终止(exited)状态,此时可以通过docker ps -a查看,其中数据不会丢失,还可以通 过docker start来启动,只要删除容器才会清除数据。
19、如何停止所有正在运行的容器?
docker kill $(sudo docker ps -q)
20、如何清理批量后台停止容器?
docker rm$(sudo docker ps -a -q)
21、如何临时退出一个正在交互的容器的终端,而不终止 它?
按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。
22、很多应用容器都是默认后台运行的,怎么查看他们的 输出和日志信息?
使用docker logs,后面跟容器的名称或者ID信息
23、使用docker port命令映射容器的端口时,系统报错 Error:NO public port ‘80’ published for …,是什么意 思? 创建镜像时dockerfile要指定正确的EXPOSE的端口,容器启动时指定PublishAllport=true
24、可以在一个容器中同时运行多个应用进程吗?
一般不推荐在用以容器内运行多个应用进程,如果有类似需求,可以用过额外的进程管理机制,比如 supervisord来管理所运行的进程。
25、如何控制容器占用系统资源(CPU,内存)的份额?
在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|-spushares[=0]参数来调整同期使用SPU的权重,使用-m|-memory参数来调整容器使用内存的大小。
26、仓库(Repository)、注册服务器(Registry)、注 册 索引(Index)有何关系?
首先,仓库事存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器时存放实际的 镜像的地方,注册索引则负责维护用户的账号、权限、搜索、标签等管理。注册服务器利用注册索引来 实现认证等管理。
27、从非官方仓库(如:dl.dockerpool.com)下载镜像 的时候,有时候会提示”Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”? Docker自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。 DOCKER_ORTS=”-insecure-registry dl.dockerpool.com:5000”重启docker服务。
28、Docker的配置文件放在那里。如何修改配置?
Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放 在/etc/sysconfig/docker。
29、如何更改docker的默认存储设置?
Docker的默认存放位置是/var/lib/docker,如果希望将docker的本地文件存储到其他分区,可以使用 Linux软连接的方式来做。
30、docker与LXC(Linux Container)有何不同?
LXC利用Linux上相关技术实现容器,docker则在如下的几个方面进行了改进: 容器特性备注 移植性 通过抽象容器配置,容器可以实现一个平台移植到另一个平台 镜像系统基于AUFS的镜像系统为容器的分发带来了很多的便利,通是共同的镜像层只需要存储一份,实 现高效率的存储 版本管理类似于GIT的版本管理理念,用户可以更方便的创建、管理镜像文件 仓库系统仓库系统大大降低了镜像的分发和管理的成本 周边工具各种现有的工具(配置管理、云平台)对docker的支持,以及基于docker的pass、Cl等系统, 让docker的应用更加方便和多样
31、Docker于Vagrant有何不同?
两者的定位完全不同 Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境,Vagrant可 以在多种系统上和虚拟机软件中运行,可以在Windows、Mac等非Linux平台上为Docker支持,自身具 有较好的包装性和移植性。原生Docker自身只能运行在Linux平台上,但启动和运行的性能比虚拟机要 快,往往更适合快速开发和部署应用的场景。
32、开发环境中Docker与Vagrant该如何选择?
Docker不是虚拟机,而是进程隔离,对于资源的消耗很少,单一开发环境下Vagrant是虚拟机上的封 装,虚拟机本身会消耗资源.
33、如何将一台宿主机的docker环境迁移到另外一台宿主 机?
停止docker服务,将整个docker存储文件复制到另外一太宿主机上,然后调整另外一台宿主机的配置即 可。
34、Docker容器创建后,删除了/var/run/netns目录下 的网络名字空间文件,可以手动恢复它: 查看容器进程ID,比如1234 到proc目录下,把对应的网络名字空间文字链接到/var/run/netns,然后通过正常的系统命令查看操作 容器的名字空间 ———————————————— 1-17题来自原文链接:https://blog.csdn.net/qq_43286578/article/details/105160725 35、什么是Docker镜像? 答:Docker镜像是Docker容器的源代码。换句话说,Docker镜像用于创建容器。使用build命令创建镜 像,并且在使用run启动时它们将生成容器。镜像存储在Docker注册表中,registry.hub.docker.com因 为它们可能变得非常大,镜像被设计为由其他镜像层组成,允许在通过网络传输镜像时发送最少量的数 据。
36、解释基本的Docker使用工作流程是怎样的?
答:(1)从Dockerfile开始,Dockerfile是镜像的源代码;(2)创建Dockerfile后,可以构建它以创建 容器的镜像。图像只是“源代码”的“编译版本”,即Dockerfile;(3)获得容器的镜像后,应使用注册表 重新分发容器。注册表就像一个git存储库,可以推送和拉取镜像;接下来,可以使用该图像来运行容 器。在许多方面,正在运行的容器与虚拟机(但没有虚拟机管理程序)非常相似。
37、什么是docker-compose?
简单点说就是,docker-compose就是一个编排同时管理多个容器的工具,与它配对使用的是一个 docker-compose.yaml文件,docker-compose命令必须在一个包含docker-compose.yaml文件目录下 才能使用。且当下docker-compose命令只能管理当前目录docker-compose文件中所涉及的容器,安装 在机器上的其他容器无法干扰。docker-compose的大部分命令基本和docker的命令重合,他们唯一的 区别是docker命令能管理机器上所有的容器和镜像文件,而docker-compose只能管理当前dockercompose文件所涉及的容器。
38、Docker镜像联合文件系统 UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分成,轻量级并且高性能的文件系统, 他支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系 统下。Union文件系统的Docker镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应 用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把 各层文件系统进行叠加起来,这样最终的文件系统会包含所有底层的文件和目录。 Sudo docker inspect --format=’{{. State.pid}}’ $container_id 1234
39、什么类型的应用程序无状态或有状态更适合Docker容 器? 答:最好为Docker Container创建无状态应用程序。我们可以从应用程序中创建一个容器,并从应用程 序中取出可配置的状态参数。现在我们可以在生产环境和具有不同参数的QA环境中运行相同的容器。这 有助于在不同场景中重用相同的镜像。另外,无状态应用程序比有状态应用程序更容易使用Docker容器 进行扩展。
40、Docker 和虚拟机有啥不同?
Docker 是轻量级的沙盒,在其中运行的只是应用,虚拟机里面还有额外的系统。
41、Docker 安全么?
Docker 利用了 Linux 内核中很多安全特性来保证不同容器之间的隔离,并且通过签名机制来对镜像进行 验证。大量生产环境的部署证明,Docker 虽然隔离性无法与虚拟机相比,但仍然具有极高的安全性。
42、如何清理后台停止的容器? 可以使用 sudo docker rm $sudo( docker ps -a -q) 命令。
43、如何查看镜像支持的环境变量? 可以使用 docker run IMAGE env 命令。
44、当启动容器的时候提示:exec format error?如何解 决问题 检查启动命令是否有可执行权限,进入容器手工运行脚本进行排查。
45、本地的镜像文件都存放在哪里?
与 Docker 相关的本地资源都存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph 目录存放镜像信息,aufs目录下存放具体的内容文件。
46、如何退出一个镜像的bash,而不终止它?
按 Ctrl-p Ctrl-q。
47、退出容器时候自动删除?
使用 –rm 选项,例如 sudo docker run –rm -it ubuntu 48、怎么快速查看本地的镜像和容器? 可以通过docker images来快速查看本地镜像;通过docker ps -a快速查看本地容器。
49、什么是Docker Hub?
Docker Hub是一个由Docker公司运行和管理的基于云的存储库。它是一个在线存储库,DOcker进行 可以由其他用户发布和使用。
50、Docker容器可扩展到多远?
诸如Foogle和Twitter之类的大型Web部署以及诸如Heroku和dotCloud之类的平台提供商都基于容器技 术运行,并行运行的容器数以十万甚至至数八百计。
51、Docker容器退出时是否丢失数据?
不、当Docker容器退出时,不会丢失数据。应用程序写入磁盘的所有数据都会保留在其容器中直到您 明确删除该容器为止。即使在容器停止后,该容器的文件系统仍然存在。
二 系统
介绍云相关经历
遇到的难题,如何解决
场景:把系统从一个地域的数据中心迁到另外一个地域的数据中心,比如这个系统其实涉及到后端虚拟机,主从库的一些mysq!,说中间的一些redis ,然后也会带前端负载均衡 SLB。如果想让你做一套方案,用什么办法能够去把它的影响时间或者业务的 downtime 放到最小。
然后迁云的时候网络上我想要做一些打通,该怎么办呢?(比如说 VPN 或者专线,类似于这样的一些设计,或者说配置)
比如需要直接进去系统了解客户的一个架构,但是客户自己不了解,或负责这个应用的人,可能离职,或者是这个信息丢失什么的,他们自己不是很清楚。假如给你一个 SSH,或者 VNC 的一个环境让你去看一下这台实例,比如说这台实例运行的一个报告,一般会跑什么样的指令去把这些数据拿到呢?
这些指令都是具体看什么的,你可以讲一下你的思路,为什么要这么做?然后你想
要从这些东西,就是你的报告想要输出哪些相应的一些内容?
“用什么来看是否跟其他的 server 有些交互什么的?比如和 SLB,mysq!,或微服务的关系,怎么梳理?
是否有实例或物理机重启失败的问题吗?是否有做过一些什么系统内核的故障分
二 面云
网络上遇到什么的问题,怎么解决的?
云产品都用过那些?
云迁移怎么做能把影响降到最小
云和传统有啥区别←
网络方向
自我介绍,工作经历
介绍岗位:
迁云时需要的问题,技术支持,检查网络丢包,延迟,互通“有技术含量问题,疑难杂症的故障排除,
如何解决“交换机堆叠和非堆叠有什么区别?
物理网络的路由协议有了解过什么?BGP?
Esxi的虚拟分布式交换机是如何工作的?TCPIP 协议?三次握手,四次挥手?
七层网络 HTTP,和 HTTPS 有何了解?场景 HTTP 状态码,503,504,403等等代表什么?
哪方面比较擅长?
Raid3,Raid5 了解吗?
容器
1.自我介绍(项目经验)
2.接触容器的时间,对K8S 的理解,对 master\node 上基础组件功能概念的理解
3.集群内 pod 怎么通信,是通过哪个组件通信的
4.问题排査,假设 pod A pod B都是正常的,pod A访问不了 pod B,排查思路
5.网络了解的情况,简述 TCP 三次握手四次挥手
6.ingress 和ingress controller 的区别
7 编程情况,用过哪些 shelI\python\golang,具体做了什么