常见Docker面试问题


DevOps有哪些优势?

技术优势:

  • 持续的软件交付
  • 修复不太复杂的问题
  • 更快地解决问题

商业利益:

  • 更快速地传递功能
  • 更稳定的操作环境
  • 有更多时间可以增加价值(而不是修复/维护)


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

CI服务器功能是不断地集成所有正在进行的更改并由不同的开发人员提交到存储库,并检查编译错误。它需要每天多次构建代码,最好是在每次提交之后,以便它可以检测在问题发生时是哪个提交Bug了。


容器内部机制?

大约在2006年,包括Google的一些员工在内的人们实现了名为命名空间的新的Linux内核级功能(不过这个想法早在FreeBSD中就已存在)。操作系统的一个功能是允许将全局资源(如网络和磁盘)共享到进程。如果将这些全局资源包装在命名空间中,以使它们仅对在同一命名空间中运行的那些进程可见,该怎么办?比如说,你可以获得一大块磁盘并将其放在命名空间X中,然后在命名空间Y中运行的进程无法查看或访问它。类似地,名称空间X中的进程无法访问分配给名称空间Y的内存中的任何内容。当然,X中的进程无法查看或与名称空间Y中的进程通信。这为全局资源提供了一种虚拟化和隔离。

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


什么是Docker?

  • Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在开发,测试或生产的任何环境中无缝运行。
  • Docker容器,将一个软件包装在一个完整的文件系统中,该文件系统包含运行所需的一切:代码,运行时,系统工具,系统库等可以安装在服务器上的任何东西。
  • 这可以保证软件始终运行相同,无论其环境如何。


如何使用Docker构建与环境无关的系统?

有三个主要功能有助于实现这一目标:

  • Volumes
  • 环境变量注入
  • 只读文件系统


什么是Docker镜像?

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


什么是Docker容器?

Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。Docker容器不依赖于任何特定的基础架构:它们可以在任何计算机,任何基础架构和任何云中运行。


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

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


解释基本的Docker使用流程

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


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

  • FROM:我们使用FROM为后续指令设置基本镜像。在每个有效的Dockerfile中,FROM是第一条指令
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外界暴露出的端口
  • WORKDIR:(默认在/根目录)终端登录进去的落脚点
  • ENV:构建镜像过程中的环境变量
  • ADD:拷贝+解压功能
  • COPY:直接拷贝
  • VOLUME:自建容器卷
  • CMD:容器启动时需要运行的命令。可能有多个CMD,但只有最后一个生效,CMD会被docker run之后的参数替换
  • ENTRYPOINT:目的和CMD一样,但命令行加参数不会替换
  • ONBUILD:触发器,当镜像用作另一个镜像构建的基础时,ONBUILD指令向镜像添加将在稍后执行的触发指令。
镜像:Docker镜像是由一系列只读层构建的
层:每个层代表镜像Dockerfile中的一条指令。




如何在生产中监控Docker?

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

  • Docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
  • Docker事件:Docker事件是一个命令,用于查看Docker守护程序中正在进行的活动流。一些常见的Docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件。


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。

全部评论

相关推荐

06-05 22:16
已编辑
门头沟学院 Java
项目拷打: 1. 遇到的最大困难?是怎么解决的?2. 行人重识别算法的技术选型,是否要训练,怎么创新的?3. 聊一下docker,你是怎么理解docker的4. Dockerfile, docker compose1. 秒杀实现过程2. 讨论订单id的生成(答时间戳+当日订单数,问高qps下时间戳应该用毫秒级?微秒级?又答还可以通过uuid这样的自动生成算法)3. 秒杀的优惠券是存在哪里的?缓存预热4. 你这个redis消息队列出来的订单为什么在异步下单的过程中还要判断是否是同一用户?(答消费者组可以重复消费,讨论也可以一个消费者为一组,保证同一条消息只被同一个线程消费)(反问那你在这里用消费者组是不是不合适)5. 是用同一个lua脚本吗?如果高qps,怎么保证库存一致,怎么下单?不是很懂,大概意思是多台服务器同时下单6. RabbitMQ八股:1. redis里面还有哪些数据结构?分别适用于什么场景2. redis高可用怎么实现?主从+哨兵3. redis集群模式下怎么保证数据一致?4. springboot开启事务的方式?(@transactional 和什么,不知道)5. spring事务的底层原理(提示aop)6. spring是支持循环依赖的吗?7. rpc了解吗?rpc使用的协议知道吗?8. 垃圾回收g1的特点9. mysql四种隔离级别10. 幻读和脏读的区别?11. 如何防止幻读?12. 单库、分库、主从库三者的关系、各自缺点13. 有用过什么阿里云的产品吗?oss和百度网盘的区别在哪里(提示oss的名字 对象序列化啥的)14. 监督学习 无监督学习 强化学习的区别15. 在你训练的过程中遇到过什么报错?口述算法题:二叉树叶子节点的公共祖先
查看26道真题和解析
点赞 评论 收藏
分享
数据人的面试交流地
点赞 评论 收藏
分享
06-17 15:22
已编辑
郑州大学 测试工程师
base郑州(6.13)1自我介绍2你的专业有和测试相关的吗3 给你一个登录界面如何测试4.看你深入学习过数据库,说一下索引的作用和分类5.看你写了jmeter 能介绍一下怎么使用的吗6.jmeter你如何管理你的登录用户数据7.http和https的区别8.git用过吗,怎么用的9.说一下git的命令10.远程下载分支的命令是什么11.Linux用过吗12.应该是问了一个和他们业务相关的技术栈,没记住是什么13.反问3.刚开始只说了功能测试点,后来面试官提醒了一下,又补充了界面,性能,兼容性,易用性的测试点5讲了一下jmeter实现多用户访问界面6面试官以为我实现了多用户登录界面,我解释了一下只是单纯的并发访问,就没在追问8介绍了一下自己构建了个本地仓库和gitee远程仓库,存储自动化的项目11我大概讲了一下基础的命令能记住,平时做实验使用的Linux命令都是现查的,因为太长没记住,面试官没有追问面完后hr通知6.16二面二面(6.16)1.自我介绍2.你学的信息安全,为什么选择测试3.你认为测试的目的是什么4.你的项目上写覆盖率提高到95%,是如何得出来的5.登录界面测试点6.测试用例的要点,包括什么7.git的命令8.你的项目上说通过数据驱动实现测试框架,能说一下具体实现吗9.pytest框架实现数据驱动的装饰器叫什么10.你个人感觉你写的自动化框架给你带来了什么,有什么提高11.个人规划是什么...(剩下的就是一些基础的询问)面试官介绍了他们的业务和实习生的工作反问二面和一面的问题有些许重复,整体不难。6.git命令,这次的回答相比一面多了分支的操作
一笑而过2222:git fetch  仅从远程仓库拉取最新代码到本地的远程分支缓存区,不会自动合并到本地工作分支,需手动使用  git merge  或  git rebase  完成合并,适合在不确定远程仓库状态时,先获取代码并谨慎处理合并冲突;而  git pull  相当于  git fetch  与  git merge  的结合,在拉取远程仓库代码后会自动将其合并到当前本地分支,操作更高效但风险更高,若本地存在未提交的修改,直接执行可能因代码冲突导致本地修改被覆盖或丢失,适用于本地分支干净且确定远程代码可直接合并的场景 。
查看21道真题和解析
点赞 评论 收藏
分享
评论
2
31
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务