当前位置: 首页 > news >正文

docker常见面试题

目录

1.什么是docker?什么是docker镜像?

2.docker与虚拟机有何不同?docker常用命令?docker使用流程?

3.什么是docker容器?docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录?

4.Dockerfile中最常见的指令是什么?Dockerfile中的命令COPY和ADD命令有什么区别?

(1)常见指令:FROM + RUN + CMD + WORKDIR + ONBUILD + VOLUME + EXPOSE + LABEL与MAINTAINER + CPOY/ADD

(2)COPY与ADD的区别:?COPY:直接拷贝; ?ADD:拷贝+解压功能

5.如何在生产中监控docker?

6.docker如何在非Linux系统中运行容器?

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

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

9.什么是Docker Swarm

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


1.什么是docker?什么是docker镜像?

docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
是docker容器的源代码,用于创建容器。使用build命令创建镜像。

2.docker与虚拟机有何不同?docker常用命令?docker使用流程

(1)docker与虚拟机的不同:

特性

Docker

虚拟机

启动速度

秒级

分钟级

交付/部署

开发、测试、生产环境一致

无成熟体系

性能

近似物理机

性能损耗大

体量

极小(MB)

较大(GB)

迁移/扩展

跨平台,可复制

较为复杂

(2)常见命令:
docker pull:拉取或者更新指定镜像; docker push:将镜像推送至远程仓库; docker images:列出所有镜像; docker rmi:删除镜像;
docker ps:列出所有容器; docker rm:删除容器
(3)使用流程:a.创建Dockerfile后,docker build创建容器的镜像; b.推送或拉取镜像

3.什么是docker容器?docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录?

(1)docker容器:docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。
(2)docker容器4种状态:运行+已暂停+重新启动+已退出
(3)docker容器内部机制:每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源。
【操作系统的一个功能是允许将全局资源(如网络和磁盘)共享到进程。如果将这些全局资源包装在命名空间中,以使它们仅对在同一命名空间中运行的那些进程可见】
(4)主机copy到容器:docker cp /www 96f7f14e99ab:/www/ 容器copy到主机:docker cp 96f7f14e99ab:/www /tmp/
(5)启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令:
docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
docker run解读相见:https://www.jianshu.com/p/ea4a00c6c21c

4.Dockerfile中最常见的指令是什么?Dockerfile中的命令COPY和ADD命令有什么区别?

(1)常见指令:FROM + RUN + CMD + WORKDIR + ONBUILD + VOLUME + EXPOSE + LABEL与MAINTAINER + CPOY/ADD

FROM:指定基础镜像;
运行指令(RUN & CMD & ENTRYPOINT)详见:https://www.cnblogs.com/javazhiyin/p/12955024.html(dockerfile常见面试题)
RUN:运行指定的命令;CMD:容器启动时要运行的命令
WORKDIR:(默认在/根目录)终端登录进去的落脚点。类似于cd,如果无该目录,则自动创建后再cd进去; ENV:设置环境常量,方便下文引用
ONBUILD:触发器,当镜像用作另一个镜像构建的基础(例如可使用特定于用户的配置自定义的应用程序构建环境或守护程序)时,ONBUILD指令向镜像添加将在稍后执行的触发指令。
VOLUME:自建容器卷
EXPOSE:当前容器对外界暴露出的端口
LABEL:为镜像指定标签;MAINTAINER:镜像维护者的姓名和邮箱地址

(2)COPY与ADD的区别:COPY:直接拷贝; ADD:拷贝+解压功能

a.二者都是只复制目录中的文件,而不包含目录本身。
b.COPY能干的事ADD都能干,甚至还有附加功能。
c.ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件),COPY的只能是本地文件
d.只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。
e.docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建更多的镜像层。镜像层的size也大。

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.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。

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

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

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

三个功能来实现: Volumes + 环境变量注入 + 只读文件系统

9.什么是Docker Swarm

Docker Swarm是Docker的本机群集。它将Docker主机池转变为单个虚拟Docker主机。Docker Swarm提供标准的Docker API,任何已经与Docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主机。

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

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

相关文章:

  • 第09章 MyBatisPlus实现查询功能
  • 第06章 MyBatisPlus概述
  • C语言-结构体
  • GlusterFS基本概念
  • Java 键盘输入n个数进行排序输出
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第10章 Vuex状态管理 10.7 Vuex实例之登录退出
  • SpringBoot基础篇 (2)— REST讲解
  • 一次JAVA频繁写大文件的记录
  • 第16章大数据定制篇-Shell编程
  • 【Push Kit】推送返回80100016错误
  • 《三叶虫与其他故事》我的恐惧如涟漪扩散,荡漾过百万年的时光
  • 阿里云maven仓库地址
  • 【ENOVIA】MBOM经理概述 | 达索系统百世慧®
  • Gradle使用教程
  • 3dmax的Corona的渲染器材质要如何完全转换VRay材质?
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • docker-consul
  • dva中组件的懒加载
  • JS函数式编程 数组部分风格 ES6版
  • Mac转Windows的拯救指南
  • scrapy学习之路4(itemloder的使用)
  • SpiderData 2019年2月25日 DApp数据排行榜
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 测试开发系类之接口自动化测试
  • 从PHP迁移至Golang - 基础篇
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 猴子数据域名防封接口降低小说被封的风险
  • 前端知识点整理(待续)
  • 浅谈web中前端模板引擎的使用
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 一些css基础学习笔记
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (C语言)球球大作战
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (篇九)MySQL常用内置函数
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三)uboot源码分析
  • (一)为什么要选择C++
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)jdk与jre的区别
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)一些感悟
  • .md即markdown文件的基本常用编写语法
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET 事件模型教程(二)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @AliasFor注解
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [20160807][系统设计的三次迭代]
  • [ACM] hdu 1201 18岁生日