Loading

常见 Docker 面试题整理汇总附答案

常见 Docker 面试题整理汇总附答案

全部面试题答案,更新日期:12月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

Docker

题1:Docker 中什么是 Image?

image即镜像。image相当于container的模板,container创建后里面有什么软件完全取决于它使用什么image。

image可以通过container创建,相当于把此时container的状态保存成快照,也可以通过Dockerfile来创建。其中通过Dockerfile创建的方法能让环境配置和代码一起被版本库一起管理。

题2:生产环境中如何监控 Docker?

1、Docker提供docker:stats和docker事件等工具来监控生产中的docker。我们可以使用这些命令获取重要统计数据的报告。

2、Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。

3、Docker事件:docker事件是一个命令,用于查看docker守护程序中正在进行的活动流。

一些常见的docker事件:attach、commit、die、detach、rename、destroy等。还可以使用各种选项来限制或过滤我们关注的事情。

题3:Docker 如何临时退出正在交互容器终端?

使用快捷键Ctrl+p,后Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。

题4:构建 Docker 镜像应该遵循哪些原则?

整体原则上, 尽量保待镜像功能的明确和内容的精简, 避免添加额外文件和操作步骤, 要点包括:

  • 尽量选取满足需求但较小的基础系统镜像, 例如大部分时候可以选择 debian:wheezy或debian:jessie镜像, 仅有不足百兆大小;

  • 清理编译生成文件、 安装包的缓存等临时文件;

  • 安装各个软件时候要指定准确的版本号, 并避免引入不需要的依赖;

  • 从安全角度考虑, 应用要尽量使用系统的库和依赖;

  • 如果安装应用时候需要配置一些特殊的环境变量, 在安装后要还原不需要保持的变量值;

  • 使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录;

  • 区分编译环境容器和运行时环境容器, 使用多阶段镜像创建。

题5:Docker 容器中如何启动 Nginx 服务?

启动nginx服务,端口映射随机,并挂载本地文件目录到容器html的命令。

docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx

题6:什么是Docker Hub?

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

题7:如何控制容器占用系统资源(CPU、内存)的份额?

使用docker [container] create命令创建容器或使用docker [con­tainer] run创建并启动容器的时候,可以使用-c | - cpu -shares[=O]参数来调整容器使用CPU的权重;使用-ml-memory[=MEMORY]参数来调整容器使用内存的大小。

题8:DockerFile中 COPY 和 ADD 命令有什么区别?

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。

COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中,而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。

题9:Docker 中如何查看镜像支持环境变量?

方式一:docker inspect

通过docker inspect命令不仅能查看环境变量,还能查看容器其它相关信息,非常丰富,以Json格式输出。

docker inspect centos

可读性还可以,但也不算很高,可以通过grep命令过滤一下:

$ docker inspect centos | grep SERVER "SERVER_PORT=80"

或者可以解析一下Json文本:

$ docker inspect -f '{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' centosPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

方式二:doecker exec env

这种方式获取的环境变量就跟我们平时获取linux环境变量是一样的了。只是在容器跑了个env命令而已。如下:

$ docker exec centos envPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binHOSTNAME=f8b489603f31HOME=/root

题10:Docker 容器和虚拟机有什么区别?

相同点

1、容器和虚拟机一样,都会对物理硬件资源进行共享使用。

2、容器和虚拟机的生命周期比较相似(创建、运行、暂停、关闭等等)。

3、容器中或虚拟机中都可以安装各种应用,如redis、mysql、nginx等。也就是说,在容器中的操作,如同在一个虚拟机(操作系统)中操作一样。

4、同虚拟机一样,容器创建后,会存储在宿主机上:linux上位于/var/lib/docker/containers下

不同点

1、虚拟机的创建、启动和关闭都是基于一个完整的操作系统。一个虚拟机就是一个完整的操作系统。而容器直接运行在宿主机的内核上,其本质上以一系列进程的结合。

2、容器是轻量级的,虚拟机是重量级的。首先容器不需要额外的资源来管理(不需要Hypervisor、Guest OS),虚拟机额外更多的性能消耗;其次创建、启动或关闭容器,如同创建、启动或者关闭进程那么轻松,而创建、启动、关闭一个操作系统就没那么方便了。

也因此,意味着在给定的硬件上能运行更多数量的容器,甚至可以直接把Docker运行在虚拟机上。

大厂面试题

大厂面试题

大厂面试题

posted @ 2023-01-09 10:37  RuoVea  阅读(260)  评论(0编辑  收藏  举报