Java SpringCloud Docker面试题

2024-03-05 1219阅读

温馨提示:这篇文章已超过385天没有更新,请注意相关的内容是否还可用!

Java SpringCloud Docker面试题

  • 前言
  • 1、什么是 Docker 容器?
  • 2、一个完整的Docker由哪些部分组成?
  • 3、Docker常用命令?
  • 4、描述 Docker 容器的生命周期?
  • 5、Docker的工作原理是什么?
  • 6、Docker 与 虚拟机 有何不同?
  • 7、进入容器的方法有哪些?
  • 8、如何临时退出一个正在交互的容器的终端,而不终止它?
  • 9、如何在生产中监控 Docker?
  • 10、为什么docker镜像要采用这种分层结构呢?
  • 11、如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如/etc下的文件,这时其他容器的/etc是否也会被修改?
  • 12、什么是 DockerFile?
  • 13、什么是Docker Swarm?
  • 14、Docker在后台的标准运行过程是什么?
  • 15、什么是Docker的数据卷?
  • 16、Docker的镜像是什么?
  • 17、Docker和虚拟机有什么区别?
  • 18、接⼝限流⽅法?
  • 19、什么是漏桶算法?
  • 20、什么是令牌桶算法?
  • 总结

    前言

    最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

    Java SpringCloud Docker面试题
    (图片来源网络,侵删)

    如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

    1、什么是 Docker 容器?

    • Docker 是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 服务器上,也可以实现虚拟化。

      容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。

      2、一个完整的Docker由哪些部分组成?

      • Docker Client 客户端:负责处理用户输入的命令与 Docker 的守护进程通信;
      • Docker Daemon 守护进程:负责和Docker client交互;
      • Docker Image 镜像:是创建容器的模板,同一个镜像可以创建多个不同的容器,如果把镜像比作程序里面的类,那么容器就是对象。可使用build 命令创建镜像。一个镜像是一个可执行的包,其中包括运行应用程序所需要的代码,依赖库、环境变量、和配置文件。
      • Docker Container 容器: 是通过镜像生成的运行实例,不同容器之间是相互隔离、独立运行的,拥有自己的ip和文件目录;运行容器前需要本地存在对应的镜像,如果本地不存在该镜像则会去镜像仓库下载;
      • Docker Registry 仓库:用来保存镜像,比如 DockerHub,可以将自己的镜像上传上去,每个镜像可以有不同标签(tag),可以理解为代码控制中的代码仓库。

        3、Docker常用命令?

        • 查看本机的所用镜像:docker images;
        • 搜索镜像:docker search mysql;
        • 下载拉取镜像:docker pull mysql,没写 tag 就默认下载最新的 lastest;
        • 将镜像推送至远程仓库:docker push mysql
        • 清理一个或多个镜像:docker rmi -f 镜像id 镜像id 镜像id;
        • 创建(并运行)容器:docker create(run), 通常一个容器就是一个应用或一个服务,也是我们常说的微服务;
        • 启动/停止/杀死已有的容器:docker start/stop/kill ;
        • 查看运行中/全部的容器:docker ps/ps -a;
        • 导入/导出容器:docker import/export;
        • 查看和配置仓库:cat /etc/docker/daemon.json;
        • 容器与主机之间的数据拷贝:docker cp。

          4、描述 Docker 容器的生命周期?

          • Docker 容器经历以下阶段:

            创建容器、运行容器、启动容器、停止容器、重启容器、杀死容器、销毁容器。

            5、Docker的工作原理是什么?

            • Docker是一个C/S架构的系统,docker守护进程运行在宿主机上,它从客户端接受命令并管理运行在主机上的容器,容器是一个运行时环境,也就是我们说的集装箱。

              6、Docker 与 虚拟机 有何不同?

              • 1、传统虚拟机是需要安装整个操作系统的,然后再安装应用,启动应用,通常需要几分钟,而docker是直接使用镜像来运行业务容器的,只需要几秒钟就可以启动了;
              • 2、Docker消耗的资源更少,Docker容器和内核交互,几乎没有性能损耗,而虚拟机运行着整个操作系统,占用物理机的资源就比较多;
              • 3、Docker更轻量,Docker的架构可以共用一个内核与共享应用程序库,所占内存极小;同样的硬件环境,Docker运行的镜像数远多于虚拟机数量,对系统的利用率非常高;
              • 4、Docker隔离性会弱一些,Docker属于进程之间的隔离,而虚拟机是系统级别的隔离; Docker通过签名机制来对镜像进行验证隔离,并采用了cgroup技术(control groups),可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。
              • 5、Docker安全性也弱一些,,Docker的租户root和宿主机root相同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,可以随意的操作。但虚拟机租户root和宿主机的root是分开的。

                7、进入容器的方法有哪些?

                • 1、使用docker attach 784fd3b294d7,attach是直接进入容器启动命令的终端,不会启动新的进程;
                • 2、使用 docker exec -it 784fd3b294d7 /bin/bash,exec则是在容器里面打开新的终端,会启动新的进程;

                  一般建议用exec进入容器。

                  8、如何临时退出一个正在交互的容器的终端,而不终止它?

                  • 按Ctrl+p,后按Ctrl+q

                    如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。

                    9、如何在生产中监控 Docker?

                    • Docker 提供 docker stats 和 docker events等命令来监控生产中的 Docker。
                    • Docker stats:可以获得容器的CPU,内存使用情况等。它类似于 Linux 中的 top 命令。
                    • Docker events:可以实时输出 Docker 服务器端的事件,包括容器的创建、启动、关闭等。

                      10、为什么docker镜像要采用这种分层结构呢?

                      最大的一个好处是:共享资源。

                      比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享。

                      11、如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如/etc下的文件,这时其他容器的/etc是否也会被修改?

                      不会,在容器中修改已存在的文件时,Docker会从上往下依次在各镜像层中查找此文件,一旦找到,立即将其复制到容器层,然后修改它,这就是容器的copy-on-write特性;

                      所有对容器的改动,无论添加、删除、还是修改文件,都只会发生在容器层中,因为只有容器层是可写的,容器层下面的基础镜像都是只读的,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

                      (如果不同层中有一个相同路径的文件,那么上层的会覆盖下层的,也就是说用户只能访问到上层中的文件)。

                      12、什么是 DockerFile?

                      • Dockerfile 是一个文本文件,其中包含我们需要运行以构建 Docker镜像的所有命令。

                        我们可以用docker build来自动构建镜像。

                        13、什么是Docker Swarm?

                        • Docker Swarm 是一个容器编排工具,它允许我们跨不同主机管理多个容器。

                          使用 Swarm,我们可以将多个 Docker 主机变成单个主机,以便于监控和管理。

                          14、Docker在后台的标准运行过程是什么?

                          当使用docker run来创建容器时,运行过程大概是:

                          • 1、检查本地是否存在指定的镜像。当镜像不存在时,会从镜像仓库下载;
                          • 2、利用镜像创建并启动一个容器;
                          • 3、分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
                          • 4、从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;
                          • 5、分配一个地址池中的 IP 地址给容器;
                          • 6、执行用户指定的应用程序,执行完毕后容器被终止运行

                            15、什么是Docker的数据卷?

                            数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

                              如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

                              容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息。

                            16、Docker的镜像是什么?

                            • Docker镜像是Docker容器运行所需的一切,是一个独立的软件包,包含了应用程序、本地库、其他依赖项和预配置设置等。
                            • Docker镜像可以轻松地创建、部署、共享和存储,可以通过Docker Hub或私有仓库共享给其他用户或团队。

                              17、Docker和虚拟机有什么区别?

                              Docker与传统虚拟机的不同之处在于,虚拟机模拟了整个操作系统,而Docker只是模拟了容器。

                              这种容器化技术可以避免虚拟机的资源浪费和分布式环境下难以部署的问题,容器在系统层面上隔离,运行在同一系统内,但是不会干扰到其他容器和主机。

                              18、接⼝限流⽅法?

                              限制总并发数(⽐如:数据库连接池、线程池)

                              • 1、限制 瞬时并发数(如 nginx 的 limit_conn 模块,⽤来限制 瞬时并发连接数)
                              • 2、限制 时间窗⼝内的平均速率(如 Guava 的 RateLimiter、nginx 的 limit_req模块,限制每秒的平均速率)
                              • 3、限制 远程接⼝调⽤速率
                              • 4、限制 MQ 的消费速率
                              • 5、可以根据 ⽹络连接数、⽹络流量、CPU或内存负载等来限流。

                                19、什么是漏桶算法?

                                规则接口是IRule

                                漏桶算法思路很简单,请求先进入到漏桶里,漏桶以固定的速度出水,也就是处理请求,当水加的过快,则会直接溢出,也就是拒绝请求,因此漏桶算法能够限制请求调用的速率。

                                20、什么是令牌桶算法?

                                从某种意义上讲,令牌桶算法是对漏桶算法的一种改进,令牌桶算法能够限制请求调用的速率,同时还能防止一定程度的突发调用。在令牌桶算法中,存在一个桶,用来存放固定数量的令牌,以一定的速率往桶中放令牌,每次调用需要先获取令牌,只有拿到令牌,才有机会继续执行,否则只能进行等待或者直接拒绝。

                                如果桶中令牌数达到上限,就丢弃令牌,比如设置qps为100,那么限流器初始化完成后,桶中就已经有100个令牌了,等启动完成对外提供服务时,该限流器可以抵挡瞬时的100个请求,从而避免服务挂掉。

                                • 实现思路:可以准备一个队列,用来保存令牌,另外通过一个线程池定期生成令牌放到队列中,每来一个请求,就从队列中获取一个令牌,从而实现限流。

                                  总结

                                  都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]