10道不得不会的Docker面试题

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: Docker1. 什么是 Docker 容器?2. Docker 和虚拟机有什么不同?3. 什么是 DockerFile?4. 使用Docker Compose时如何保证容器A先于容器B运行?5. 一个完整的Docker由哪些部分组成?6. docker常用命令7. 描述 Docker 容器的生命周期。8. docker容器之间怎么隔离?《最少必要面试题》

以下是 Docker 面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅。

评论区见

@[toc]

Docker

以下是一些docker的基础面试题,下一篇docker进阶面试题。本系列《最少必要面试题》

  1. 什么是 Docker 容器?

Docker 是一种流行的开源软件平台,可简化创建、管理、运行和分发应用程序的过程。它使用容器来打包应用程序及其依赖项。我们也可以将容器视为 Docker 镜像的运行时实例。

  1. Docker 和虚拟机有什么不同?

Docker 是轻量级的沙盒,在其中运行的只是应用,虚拟机里面还有额外的系统。

  1. 什么是 DockerFile?

Dockerfile 是一个文本文件,其中包含我们需要运行以构建 Docker 镜像的所有命令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。Docker 使用 Dockerfile 中的指令自动构建镜像。我们可以 docker build 用来创建按顺序执行多个命令行指令的自动构建。

一些最常用的指令如下:

FROM :使用 FROM 为后续的指令建立基础映像。在所有有效的 Dockerfile 中, FROM 是第一条指令。

LABEL: LABEL 指令用于组织项目映像,模块,许可等。在自动化布署方面 LABEL 也有很大用途。在 LABEL 中指定一组键值对,可用于程序化配置或布署 Docker 。

RUN: RUN 指令可在映像当前层执行任何命令并创建一个新层,用于在映像层中添加功能层,也许最来的层会依赖它。

CMD: 使用 CMD 指令为执行的容器提供默认值。在 Dockerfile 文件中,若添加多个 CMD 指令,只有最后的 CMD 指令运行。

  1. 使用Docker Compose时如何保证容器A先于容器B运行?

Docker Compose 是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。Compose 通过一个配置文件来管理多个Docker容器。简单理解:Docker Compose 是docker的管理工具。

Docker Compose 在继续下一个容器之前不会等待容器准备就绪。为了控制我们的执行顺序,我们可以使用“取决于”条件,depends_on 。这是在 docker-compose.yml 文件中使用的示例

version: "2.4"

services:

backend:

build: . # 构建自定义镜像

depends_on:

 - db

db:

image: mysql

用 docker-compose up 命令将按照我们指定的依赖顺序启动和运行服务。

  1. 一个完整的Docker由哪些部分组成?

DockerClient 客户端

Docker Daemon 守护进程

Docker Image 镜像

DockerContainer 容器

  1. docker常用命令

命令建议在本地安装做一个实操,记忆会更深刻。也可以克隆基于docker的俩万(springboot+vue)项目练手,提供视频+完善文档。地址:https://gitee.com/rodert/liawan-vue

查看本地主机的所用镜像:docker images`

搜索镜像:docker search mysql`

下载镜像:docker pull mysql,没写 tag 就默认下载最新的 lastest

下载指定版本的镜像:docker pull mysql:5.7`

删除镜像:docker rmi -f 镜像id 镜像id 镜像id`

  1. 描述 Docker 容器的生命周期。

Docker 容器经历以下阶段:

创建容器

运行容器

暂停容器(可选)

取消暂停容器(可选)

启动容器

停止容器

重启容器

杀死容器

销毁容器

  1. docker容器之间怎么隔离?

这是一道涉猎很广泛的题目,理解性阅读。

Linux中的PID、IPC、网络等资源是全局的,而Linux的NameSpace机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的NameSpace,各个NameSpace下的资源互不干扰。

​​Namespace实际上修改了应用进程看待整个计算机“视图”,即它的“视线”被操作系统做了限制,只能“看到”某些指定的内容​​。对于宿主机来说,这些被“隔离”了的进程跟其他进程并没有区别。

虽然有了NameSpace技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用control groups技术(也就是cgroup),有了cgroup就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。

有了这两项技术,容器看起来就真的像是独立的操作系统了。

强烈建议大家实操,才能更好的理解docker。

  1. Redis是什么?

一般问这个问题你最少要答出以下几点

Redis 是一个基于内存的 key-value 存储系统,数据结构包括字符串、list、set、zset(sorted set --有序集合)和hash,bitmap,GeoHash(坐标),HyperLogLog,Streams(5.x版本以后)

  1. 你在哪些场景使用redis

你有实战经验,那就直接表演。如果没有,选几个下面的经典场景

作为队列使用,(因为是基于内存、一般不会作为消费队列、作为循环队列必要适用);

模拟类似于token这种需要设置过期时间的场景,登录失效;

分布式缓存,避免大量请求底层关系型数据库,大大降低数据库压力;

分布式锁;

基于 bitmap 实现布隆过滤器;

排行榜-基于zset(有序集合数据类型);

计数器-对于浏览量、播放量等并发较高,使用 redis incr 实现计数器功能;

分布式会话;

消息系统;

  1. 为什么Redis是单线程的?

这个问题给一个官方答案

因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。

  1. Redis持久化有几种方式?

redis 提供了两种持久化的方式,分别是快照方式(RDB Redis DataBase)和文件追加(AOF Append Only File)。

显而易见,快照方式重启恢复快、但是数据更容易丢失,文件追加数据更完整、重启恢复慢。

混合持久化方式,Redis 4.0之后新增的方式,混合持久化是结合RDB和AOF的优点,在写入的时候先把当前的数据以RDB的形式写入到文件的开头,再将后续的操作以AOF的格式存入文件当中,这样既能保证重启时的速度,又能降低数据丢失的风险。

在恢复时,先恢复快照方式保存的文件,然后再恢复追加文件中的增量数据。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
Java Go 虚拟化
【Docker 系列】docker 学习十一,docker 总结和面试题整理
【Docker 系列】docker 学习十一,docker 总结和面试题整理
|
消息中间件 Java 关系型数据库
10道不得不会的Docker面试题
10道不得不会的Docker面试题,10道不得不会的Docker面试题
6059 1
10道不得不会的Docker面试题
|
2月前
|
XML Java Docker
【面试题】2、Docker和Spring相关
【面试题】2、Docker和Spring相关
37 0
|
5月前
|
Cloud Native Linux 数据中心
[面试题~Docker] 云原生必问基础篇
[面试题~Docker] 云原生必问基础篇
158 0
|
5月前
|
存储 Kubernetes Docker
「高频必考」Docker&K8S面试题和答案
「高频必考」Docker&K8S面试题和答案
199 0
|
10月前
|
Kubernetes Java Shell
【Docker 系列】docker 学习十一,docker 总结和面试题整理
【Docker 系列】docker 学习十一,docker 总结和面试题整理
127 0
|
算法 Java 数据库
2018最新蚂蚁金服面试题:Docker+秒杀设计+RocketMQ+亿级数据设计
一面: 1 自我介绍 2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机。
9492 0
|
3天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略
|
3天前
|
监控 Kubernetes Docker
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
【5月更文挑战第9天】本文探讨了Docker容器中应用的健康检查与自动恢复,强调其对应用稳定性和系统性能的重要性。健康检查包括进程、端口和应用特定检查,而自动恢复则涉及重启容器和重新部署。Docker原生及第三方工具(如Kubernetes)提供了相关功能。配置检查需考虑检查频率、应用特性和监控告警。案例分析展示了实际操作,未来发展趋势将趋向更智能和高效的检查恢复机制。
【Docker 专栏】Docker 容器内应用的健康检查与自动恢复
|
2天前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
12 0