【全网最新最全】Docker面试题

2024-09-07 10:44

本文主要是介绍【全网最新最全】Docker面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Docker是什么?为什么要使用Docker? 

二、Docker常用命令有哪些?

三、什么是Dockerfile?

四、Dockerfile有哪些常见语法?

五、什么是数据卷?有哪些命令?

六、什么是Docker Compose?

七、有了Docker为什么还需要K8s?


一、Docker是什么?为什么要使用Docker? 

Docker 是一个高效的轻量级容器化解决方案,可以让你的应用快速部署,安全运行,并且使其更容易跨越环境迁移和管理。Docker 可以为你的应用提供一个可重复使用的容器,从而可以在同一操作系统中和不同操作系统中部署应用,实现跨平台应用开发。它可以简化应用程序的部署,提高性能,确保应用程序的完整性和可靠性,以及降低运行和管理环境的成本。

相比于传统的虚拟化方式,Docker有以下优势:

  1. 节约资源:通过分割物理机的硬件资源,将其抽象出来,在需要的时候为不同的容器提供资源,这样就能减小磁盘和内存的开销;
  2. 轻量级:Docker容器本身只有几百兆的大小,而且不需要安装宿主操作系统,能够极大地缩小应用程序启动时间;
  3. 灵活性:Docker支持跨平台的部署,可以更灵活地部署应用程序和服务;
  4. 弹性:Docker可以更加简单地增加节点,并能够实现服务的弹性扩容和缩容;
  5. 安全性:根据容器隔离,可以避免恶意攻击,提高应用程序的安全性;
  6. 可重复性:docker容器可以在任何地方重复利用,从而大大减少了管理和成本;
  7. 可移植性:Docker容器可以在开发环境和生产环境中更加容易地移置。

比如我们Linux上部署MYSQL,很多很多步骤,而且可能安到最后,还会报错,简直是绝望啊!

但如果我们使用Docker来安装MYSQL,只需要一条命令,就可以顺利安装,简单吧!

二、Docker常用命令有哪些?

docker run:启动一个新的容器

docker ps:列出正在运行的容器

docker ps -a:列出所有容器

docker stop:停止正在运行的容器

docker start:启动已停止的容器

docker rm:删除容器

docker images:列出本地镜像

docker pull:从镜像仓库拉取或更新指定的镜像

docker build:使用Dockerfile构建镜像

docker logs:查看日志

docker logs -f <container-id or container-name>:实时跟踪日志输出

docker logs --tail 50 <container-id or container-name>:查看最新的50行日志

docker logs --since 30m <container-id or container-name>:查看最近30分钟的日志

三、什么是Dockerfile?

举个例子,我们要从0部署一个Java应用,大概流程是这样:

  • 准备一个linux服务(CentOS或者Ubuntu均可)
  • 安装并配置JDK
  • 上传Jar包
  • 运行jar包

那因此,我们打包镜像也是分成这么几步:

  • 准备Linux运行环境(java项目并不需要完整的操作系统,仅仅是基础运行环境即可)
  • 安装并配置JDK
  • 拷贝jar包
  • 配置启动脚本

上述步骤中的每一次操作其实都是在生产一些文件(系统运行环境、函数库、配置最终都是磁盘文件),所以镜像就是一堆文件的集合。

由于制作镜像的过程中,需要逐层处理和打包,比较复杂,所以Docker就提供了自动打包镜像的功能。我们只需要将打包的过程,每一层要做的事情用固定的语法写下来,交给Docker去执行即可。

而这种记录镜像结构的文件就称为Dockerfile。

四、Dockerfile有哪些常见语法?

FROM - 设置基础镜像,每个 Dockerfile 至少需要一条 FROM 指令作为镜像的基础。

FROM openjdk:11-jdk

LABEL - 添加元数据到镜像,如作者、版本、描述等。

LABEL maintainer="clay@clay.com"

ENV - 设置环境变量。

ENV SPRING_PROFILES_ACTIVE=prod \JAVA_OPTS="-Xmx512m -Xms256m"

WORKDIR - 为 RUN, CMD, ENTRYPOINT, COPY 和 ADD 设置工作目录。

WORKDIR /app

ADD 和 COPY - 将文件从构建环境复制到镜像。COPY 是推荐的方法,因为它更透明。ADD 除了复制本地文件还可以直接解压压缩和从 URL 下载。

COPY target/my-spring-boot-app.jar /app/my-app.jar

EXPOSE - 声明容器运行时监听的端口

EXPOSE 8080

五、什么是数据卷?有哪些命令?

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。

以Nginx为例,我们知道Nginx中有两个关键的目录:

  • html:放置一些静态资源
  • conf:放置配置文件

如果我们要让Nginx代理我们的静态资源,最好是放到html目录;如果我们要修改Nginx的配置,最好是找到conf下的nginx.conf文件。

但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。

六、什么是Docker Compose?

比如我们部署一个简单的java项目,至少其中包含3个容器:

  • MySQL
  • Nginx
  • Java项目

而稍微复杂的项目,其中还会有各种各样的其它中间件,需要部署的东西远不止3个。如果还像之前那样手动的逐一部署,就太麻烦了。

而Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。

利用Docker Compose,可以实现以下常见功能:

  1. 服务定义:可以在一个文件中定义一组相互关联的服务(如数据库、后端应用、前端应用等),这些服务将被同时管理。
  2. 一键部署:通过一个简单的命令docker-compose up,可以同时启动或停止所有定义的服务。
  3. 环境隔离:每个项目可以使用单独的隔离环境,通过在不同的项目中使用不同的Docker Compose文件来实现。
  4. 简化配置:通过YAML文件配置服务,使得配置过程标准化且易于理解和维护。

七、有了Docker为什么还需要K8s?

Docker是一个容器编排工具,可以帮助我们管理应用程序。但是,如果想要管理大量的容器,就需要更为强大的编排工具,而 Kubernetes(K8s)就是这样一种工具。

K8s由多个容器组成,并且能够自动检测、部署和扩展容,它提供了资源管理、服务发现、多租户支持等功能,从而管理和调度大量容器,让整个编排更加高效、可靠、稳定。因此,K8s不仅可以让Docker容器能够更好地运行,而且它可以用于管理任何容器化的部署。

相比于Docker,K8s在以下几个方面做得更好:

  • 高可用性:Kubernetes可提供高可用性,可以设置Pod的副本数,保证服务的良好运行。
  • 自动伸缩:Kubernetes可根据实际情况自动伸缩,自动添加或减少节点,可以有效地根据负载情况调整Pod实例数。
  • 容易管理:Kubernetes提供了一个完整的系统来管理Docker容器,可以使DevOps开发更加高效。
  • 完善的安全性:Kubernetes可以提供完善的安全性,包括限制访问,配置安全策略等。
  • 更好的传输:Kubernetes使用Service和Ingress提供了一个容器化的感知和管理层来实现对网络的透明性。

这篇关于【全网最新最全】Docker面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144846

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

禅道Docker安装包发布

禅道Docker安装包发布 大家好, 禅道Docker安装包发布。 一、下载地址 禅道开源版:   /dl/zentao/docker/docker_zentao.zip  备用下载地址:https://download.csdn.net/download/u013490585/16271485 数据库用户名: root,默认密码: 123456。运行时,可以设置 MYSQL_ROOT_P

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体