该面试题为了解内容

目录

1.docker与虚拟机的区别

2.虚拟机常用有几种网络模式?

3.什么是容器:

4.什么是Docker容器?

5.容器技术的原理:

6.容器技术都有哪些应用:

7.容器的简单安装使用过程

8.docker能干些什么?

9.docker三大核心

10.virsh命令工具是提供管理各虚拟机的命令接口

11.自定义docker镜像仓库

12.docker自定义镜像,如果写了多条CMD,那么默认执行时会执行哪一条命令呢?

13.docker如何做持久化存储

14.容器的六大命名空间

15.dockerfifile中ADD和Copy区别

16.docker命令

17.docker怎样实现容器件的独立

18.什么是ELK

19.微服务:

20.K8S架构:

21.Kubectl管理命令

22.K8S的POD

23.pod的创建过程:

24.控制器-Deployment:

25.K8S的监控


1.docker与虚拟机的区别

1)docker启动快速,属于秒级别.虚拟机启动通常需要几分钟
2)docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性 能损耗,性能优于虚拟机
3)docker更轻量级,docker的架构可以共用一个内核与共享应用程序库,占用内存极小.同样的硬件 环境,docker运行的镜像数量远多于虚拟机数量,对系统的利用率更高
4)与虚拟机相比,docker的隔离性更弱,docker属于进程之间的隔离,虚拟机可以实现系统级别的隔离
5)安全性:docker的安全性更弱,docker的租户root和宿主机root等同,一旦容器内的用户从普通用 户权限提升为root权限,他就直接具备了宿主机的root权限,进而可进行无限制的操作.虚拟机租户 root权限和宿主机的root虚拟机的权限是分离的
6)可管理性:docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,例
如:VMware等
7)高可用和可恢复性:docker对业务的高可用支持是通过快速部署实现的.虚拟机具备负载均衡,高可用,容错性,迁移和数据保护等成熟的熟的保障机制,保障业务的连续性
8)快速创建、删除:虚拟化的创建是分钟级别的,docker容器创建是秒级别的,docker的快速迭代性决定了无论是开发、测试部署都可以节约大量时间
9)交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化,docker在
dockerfifile中记录了容器的构建过程,可在集群中实现快速分发和快速部署

2.虚拟机常用有几种网络模式?

有桥接模式、隔离模式(自定义模式)、NAT模式、路由模式桥接模式:Guest与Host连接到同一个交换机上;通过桥接物理网卡,相当于直连到Host所在网
络。
隔离模式:允许Guest访问同一虚拟交换机上的其他Guest;但是不能访问Host所在的外部网络。
NAT模式(默认):将Guest虚拟机的默认网关指向Host物理机的virtbr0接口的IP地址;Guest共
享真机的网络连接,以地址转换的方式访问外网。
路由模式:由Host物理机充当路由器,开启转发;需要额外设置外网与Guest虚拟机之间互访的路由条目,Guest以路由转发的方式访问外网(需要在真机配置iptables规则)。

3.什么是容器:

容器就是将软件打包成标准户单元,用于开发、交付和部署,是应用程序封装和交付的核心技术。

4.什么是Docker容器?

Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,
在主机操作系统的用户空间中作为独立进程运行。Docker容器是Docker镜像的实例

5.容器技术的原理:

利用Cgroups和Namespace两大机制,前者是将进程分组管理的内核功能,通过Cgroups隔离进程,控制进程的资源占用(cpu,内存等)情况在操作系统底层限制物理资源,起到集装箱/容器的作用;后者是让每个进程组有独立的PID,IPC和网络空间,起到隔离的作用。

还有一个SELinux 安全

6.容器技术都有哪些应用:

1.容器化传统应用:容器不仅能提高现有应用的安全性和可移植性,还能节约成本。

2.持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署,提升交付速度

3.微服务 加速应用架构现代化进程。核心:拆分服务(nginx+php-fpm)

4.IT 基础设施优化 充分利用基础设施,节省资金。

将微服务应用放置在容器中,带来了快速与可移植性。从开发、测试、上线,实现了“一次编写,到处运行”。

总之,通过容器、微服务的有效结合应用,最终帮助企业应用演进到互联网架构,实现IT投资和收益的最优化。

7.容器的简单安装使用过程

环境准备:需要64位操作系统,centos7以上版本,关闭防火墙,开启路由转发,开放iptable的FORWARD默认规则

安装软件:docke-ce*+依赖包(多数需要连上阿里云等网络yum源安装)

导入镜像:#docker load -i  镜像.tar.gz

启动容器:#docker run -itd  +镜像名:标签  /bin/bash

8.docker能干些什么?

1)加速本地开发(通过Docker能够快速搭建好开发和运行环境,并且该环境可以直接传递给测
试和产品部署)
2)自动打包和部署应用
3)创建轻量、私有的PasS环境
4)自动化测试和持续集成部署
5)部署并扩展Web应用、数据库和后端服务
6)创建安全沙盒(使容器隔离)
7)轻量级的桌面虚拟化

9.docker三大核心

docker主要包括三大核心概念,理解了这三个核心概念,就能理解docker的整个生命周期:
1)镜像:类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统,镜像是创建Docker容器的基础。
2)容器:类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。镜像自 身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。
3)仓库:类似于代码仓库,是docker集中存放镜像文件的场所。

10.virsh命令工具是提供管理各虚拟机的命令接口

– 支持交互模式,查看/创建/停止/关闭 .. ..
格式:virsh 控制指令 [虚拟机名称] [参数]
virsh nodeinfo #//查看KVM节点(服务器)信息
virsh list #//列出正在运行的虚拟机
virsh list --all #//列出所有的虚拟机
virsh net-list--all #//列出虚拟网络
virsh dominfo 虚拟机名称 #查看挃定虚拟机的信息
运行|重启|关闭挃定的虚拟机
virsh start|reboot|shutdown 虚拟机名称

11.自定义docker镜像仓库

1)创建存放Dockerfifile的目录
2)书写Dockerfifile
FROM:基础镜像
MAINTAINER:镜像创建者的信息
EXPOSE:开放的端口
ENV:设置变量
ADD:复制文件到镜像
RUN:制作镜像时执行的命令,可以有多个
WORKDIR:容器默认的工作目录
CMD:容器启动时执行的命令,仅可以有一条CMD
3)执行docker命令创建镜像仓库
docker build 容器名:标签 .(当前)

12.docker自定义镜像,如果写了多条CMD,那么默认执行时会执行哪一条命令呢?

如果写入了多条CMD,那么执行时默认或执行最后一条命令

13.docker如何做持久化存储

1)Bind mounts:可以实现将Host中的任意路径挂载到容器中,可以存储在任意位置,非
Docker的进程或者容器可能随时对其进行修改,存在一定的风险。
在单容器情况下,使用Bind mount可以用 -v 或者 --volume,在swarm集群中,我们使用 --
mount,在Docker17.06之后,可以统一使用 --mount
2)Volumes:实现将Docker中的某一个volume挂载到容器中,存储在Docker Host文件系统的某一个路径下,默认是/var/lib/docker/volumes,由Docker进行管理,非Docker的进程不能修改该路径下的文件,比较安全。VOlumes和bind的对比:
Volumes 的备份和迁移更加容易。
可以使用 Docker CLI 或者 Docker API 管理 volumes。
Volumes 既可以在 Linux 的容器中使用,也可以在 Windows 的容器中使用。
Volumes 在多容器中共享更加的安全。
Volume drivers 允许我们把数据存储在远程主或云提供商。
不同点 bind mount volume
source位置 可以任意指定 NarlibdockerNolimes/
Host源地址为空 覆盖掉有容器的内容 容器内数据复制到volume
是否支持单个文件 支持 不支持,只能是目录
权限控制 读写或者只读 读写或者只读
移值性 弱,与host path绑定 强,无需指定host目录
3)Tmpfs:存储在Host系统的内存中,没有在磁盘上进行存储,不能实现持久化。
Tmpfs方式将数据存储在Host内存中,在容器的整个生命周期内被容器使用,不能持久化。出于安全原因,或者是提升容器的性能,比如我们的程序需要写入很多不需要存储的状态数据时,我们就会使用 tmpfs。
Key Value
type bind,volume,tmpfs,如不指定默认为volume
destination(或者dst/target) 容器中的路径
tmpfs-type(或者tmpfs-mode) 附加参数

14.容器的六大命名空间

六大命名空间:主机名空间、文件系统、用户、网络、进程、信号向量

15.dockerfifileADDCopy区别

COPY指令和ADD指令的区别在于是否支持从远程URL获取资源。
COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。COPY不能对压
缩文件进行自动解压,COPY只能对一些较小的文件进行操作,不能对大文件操作
ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。ADD可以对压缩文件进行
自动解压并安装build

16.docker命令

容器生命周期管理 — docker[run|start|stop|restart|kill|rm|pause|unpause]
容器操作运维 — docker[ps|inspect|top|attach|events|logs|wait|export|port]
容器 rootfs命令 — docker[commit|cp|diffff]
镜像仓库 — docker[login|pull|push|search]
本地镜像管理 — docker[images|rmi|tag|build|history|save|import]
其他命令 — docker[info|version]

17.docker怎样实现容器件的独立

1)pidnamespace
不同用户的进程就是通过 pidnamespace隔离开的,且不同 namespace中可以有相同pid。所有的LXC 进程在 docker中的父进程为 docker进程,每个 lxc进程具有不同的 namespace。
2)netnamespace
有了 pidnamespace,每个 namespace中的 pid能够相互隔离,但是网络端口还是共享host的端
口。网络隔离是通过 netnamespace实现的,每个 netnamespace有独立的network devices,IP
addresses,IP routing tables,/proc/net目录。这样每个container的网络就能隔离开来。docker
默认采用 veth的方式将 container中的虚拟网卡同 host上的一个 dockerbridge:docker0连接在一起。
3)ipcnamespace
container 中 进 程 交 互 还 是 采 用 linux 常 见 的 进 程 间 交 互 方 法 (interprocess
communication- IPC),包括常见的信号量、消息队列和共享内存。
container的进程间交互实际上还是host上具有相同pidnamespace中的进程间交互。
4)mntnamespace
类 似 chroot,将 一 个 进 程 放 到 一 个 特 定 的 目 录 执 行 。 mnt namespace 允 许 不 同
namespace的进程看到的文件结构不同,这样每个 namespace中的进程所看到的文件目录就被隔离开了。在 container里头,看到的文件系统,就是一个完整的 linux系统,有 /etc、/lib等,通过chroot实现。
5)utsnamespaceUTS("UNIX Time-sharing System")namespace允许每个 container拥有独立的hostname和domainname,使其在网络上可以被视作一个独立的节点而非 Host上的一个进程。
6)usernamespace
每个 container可以有不同的 user和 groupid,也就是说可以在 container内部用container内部的用户执行程序而非 Host上的用户。
有了以上 6种 namespace从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个
container就可以对外展现出一个独立计算机的能力,并且不同 container从 OS 层面实现了隔离.然而不同 namespace之间资源还是相互竞争的,仍然需要类似 ulimit来管理每个 container所能使用的资源 - -cgroup。 cgroups(Controlgroups)实现了对资源的配额和度量。

18.什么是ELK

三大组件
Elasticsearch:负责日志检索和储存
Logstash:负责日志收集和分析、处理
Kibana:负责日志的可视化
ELK可用于解决:
分布式日志数据集中式查询和管理
系统监控,包含系统硬件和应用各个组件的监控
故障排查
安全信息和事件管理
报表功能
Elasticsearch特点:
实时分析
分布式实时文件存储,将每个字段都编入索引
文档导向,所有的对象全部是文档高可用性,易扩展,支持集群(Cluster)、分片和复制(shards和Replicas)
接口友好,支持JSON
Logstash特点:
所有类型的数据集中处理
不同模式和格式数据的正常化
自定义日志格式的迅速扩展
为自定义数据源轻松添加插件
Kibana特点:
灵活的分析和可
视化平台
实时总结流量和数据的图表
为不同的用户显示直观的界面
及时分享和嵌入的仪表板

19.微服务:

微服务架构也是从Monolithic架构演进来的。Monolithic应用中按照职责的不同,拆分解耦成一个个的单独微服务(Micro Services),每个微服务都对应了一个独立的业务功能,也只定义了该功必须的一些操作。微服务独自或者共同部署在多台应用服务器上,微服务之间通过标准的Restful接口实现访问。这样当一个微服务出现问题时,并不会影响到其他的服务。而且,微服务可以基于资源的需求进行独立扩展,可以被部署在更小的主机上。各个微服务使用的开发语言也可以不同,只要保持接口协议统一。

Monolithic架构天然的不具备健壮性,因为一旦某个组件出现问题,整个服务基本上就挂了。自身不具备分布式服务能力,通常需要依赖于负载均衡器、数据库HA等来实现服务的分布化和负载分担。相对而言,互联网架构优势在于分布式、去中心化,支持弹性伸缩。其核心是轻应用、微服务。

20.K8S架构:

主要由master组件丶node节点组件丶image镜像仓库组成

​master组件又分很多组件:

api server整个系统的对外接口

​        scheduler 系统资源调度器

​        controller manager 管理控制器

​         etcd 负责节点间的服务发现和配置共享

​flannel 网络插件,实现不同主机的容器间互联互通

K8S集群管理:管理命令kubectl,启动容器服务,查看资源,查看节点状态等

POD:K8S中最小的部署单元,不是进程/程序,而是一个环境,包括容器,存储,网络,配置等.pod是临时性的.资源文件:定义了如何启动PDO,如何运行,启动副本等功能的文件,叫资源文件.可以用来创建,删除,管理资源对象.

node计算节点安装:

docker-ce

kubelet,

kube-proxy,

IPVS模式,daemon.json,master主机的token值和证书.

安装网络插件flannel:实现不同主机的容器间互联互通.

21.Kubectl管理命令

补全kubectl命令的Tab键:

\# kubectl completion bash >/etc/bash_completion.d/kubectl

\# kubeadm completion bash >/etc/bash_completion.d/kubeadm

kubectl get命令:

\#kubectl get nodes(查询节点状态)  #kubectl get deployment(查询资源名称)

\#kubectl get pods -o wide #查询pod容器资源和主机信息

kubectl exec命令:

\#kubectl exec -it 容器id /bin/bash  #启动新命令,进入一个正在运行的容器中

kubectl describe命令:

\#kubectl describe 资源类型 资源名称  #查询资源详细信息(多用于拍错)

kubectl logs和attach命令:

\#kubectl logs 资源名称   #输出操作日志信息

kubectl delete命令:

\#kubectl delete 资源类型 资源名称  #删除资源(直接删除pod会自动创建pod,删除资源则不会)

集群扩容命令:

\#kubectl scale 资源名称 --replicas=1/2/3   #pod伸缩

查看K8S日志命令:

22.K8S的POD

k8s中的最小部署单元,不是一个程序/进程,而是一个环境(包括容器、存储、网络ip:port、容器配置)。

其中可以运行1个或多个容器(docker或其他容器),在一个pod内部的容器共享所有资源,包括共享pod的ip:port和磁盘。

pod是临时性的,用完即丢弃的,当pod中的进程结束、node故障,或者资源短缺时,pod会被干掉。基于此,用户很少直接创建一个独立的pods,而会通过k8s中的controller来对pod进行管理。

23.pod的创建过程:

1)kubectl 向api server(提供各种资源对象)发起一个create pod 请求

2)api server接收到pod创建请求后,生成一个包含创建信息的yaml

3)api server将刚才的yaml信息写入etcd数据库

4)scheduler(资源调度器) 查看 api server,类似于通知机制

5)kubelet(node节点架构之一,监控容器的) 通过监测etcd数据库,发现api server 中有了个新的Node;调用node中的docker api,创建容器

24.控制器-Deployment:

支持扩容/收缩,支持应用服务更新与回滚

25.K8S的监控

metrics-server:监控系统资源使用的插件,监控node节点上cpu,内存使用率等,启用监控需要kubelet证书

Dashboard:基于网页的Kubernetes用户界面,可以对容器应用拍错,管理集群资源,展示了K8S集群中的资源状态信息和所有报错信息.

Prometheus:监控系统和时间序列数据库,目前常用里监控K8S容器管理系统.

docker与k8s面试题基础相关推荐

  1. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读

    目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...

  2. 解惑篇|Docker和 K8s 到底啥关系?想学K8s,必须得先学 Docker 吗?

    想学K8s,必须得先学会 Docker 吗?这是很多网友在开始琢磨着想要学 K8s 的时候都会冒出来的想法.那么今天我们就跟大家说说这个话题,要回答这个问题,我们需要先搞清楚 Docker 和 K8s ...

  3. Docker和K8s的区别

    随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗? k8s 是kubernets的缩写,'8'代表中间的八个字符. 其实 ...

  4. Docker与k8s

    前言 随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗? k8s 是kubernets的缩写,'8'代表中间的八个字符. ...

  5. 刘华:戏说Docker和K8s,一文让你成为懂王

    " 一文让你成为Docker和K8s的懂王!" 最近,K8s和Docker的离婚案闹得大伙心慌慌的.两位改变世界的神仙打架,咱码农会不会被误伤呢?万幸的是,Docker生的娃(镜像 ...

  6. Docker概述、安装及基础命令

    Docker概述.安装及基础命令 一.Docker概述 1. docker是什么 2. docker与虚拟机的区别 3. docker使用场景 4. docker核心概念 5. docker引擎 6. ...

  7. k8s面试题大全(持续更新中)

    前言 本篇模拟面试官提问的各种docker,k8s问题,意在提高面试通过率,欢迎在评论区探讨,同步进步. docker的工作原理是什么,讲一下 docker是一个Client-Server结构的系统, ...

  8. Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...

  9. 云计算openstack、kvm以及docker和k8s

    云计算openstack.kvm以及docker和k8s 云计算 概念 为什么需要云计算 云计算服务模式 云计算应用 OpenStack 简介 组件介绍 DNS解析过程 Docker 为什么有dock ...

最新文章

  1. linux应用程序跑飞,linux 试题
  2. 类的实质——类成员public、private属性的另类解释
  3. 老司机们都是怎么学习STM32的?
  4. 制作html5谭木记页面,北斗区域地理配套练习答案
  5. mybatis通用mapper_全网最全Mapper解析,附实操代码帮你更好理解
  6. javax.ws.rs.NotSupportedException: Cannot consume content type
  7. 知乎高赞:有哪些值得刻意练习的心态?
  8. 设置环境变量ANDROID_SDK_HOME有什么用?
  9. 测试Flex代码覆盖率工具---FlexCover
  10. 模拟器显示空白图片_网吧模拟器下载:小游戏礼包
  11. 【白皮书分享】2022年新品营销白皮书-阿里妈妈.pdf(附下载链接)
  12. 区块链相关名词解释(一)
  13. 《Android 第1行代码》读后感—第1章【开始启程,你的第一行Android代码】
  14. 《图解算法》第11章之 接下来如何做
  15. Python可视化:python画图颜色设置
  16. 我的世界Java种子大全_种子(世界生成)
  17. 下载安装typora
  18. 安卓版本客户端2.1
  19. 结构体初始化的四种方法
  20. transforms的使用方法

热门文章

  1. 鸟哥的Linux私房菜(基础篇)- Red Hat 6.x旧文件
  2. 视觉直观感受7种常用排序算法
  3. Atcoder Beginner Contest 124 解题报告
  4. VS2015 MFC属性页孙鑫笔记
  5. SQLServer 大小写敏感配置
  6. 【干货】浅谈分布式数据库中间件之分库分表
  7. 移动端banner css3(@keyframes )实现
  8. 云计算网络基础第八天
  9. 明星+本土化,vivo国际化的两大开路先锋
  10. DNS(3)- 详解DNS的资源记录