Docker面试题

大家好,我是升仔

1、Docker中镜像和容器的区别是什么?

Docker镜像和容器的主要区别在于它们的角色和功能:

1、静态与动态: Docker镜像是一个静态的文件,它包含了运行容器所需的代码、库、环境变量和配置文件。而容器是镜像的运行实例,是一个动态的概念。

2、不可变性与可变性: 镜像是不可变的,一旦创建,内容不会改变。容器则在镜像的基础上创建,它在运行时可以改变状态,可以在其上进行读写操作。

3、构建与执行: 镜像是通过Dockerfile构建的,它定义了环境和应用的构建步骤。而容器是通过运行镜像来创建的,提供一个隔离的环境来运行应用。

4、存储与层级: 镜像使用分层存储,每一层只读,共享相同的层。容器在镜像的最上层添加一个可写层。

5、重用性与独立性: 同一镜像可以创建多个容器,实现高效的重用。每个容器都是独立的,拥有自己的运行环境和资源。

2、如何使用Dockerfile创建一个Docker镜像?

创建Docker镜像的过程通常遵循以下步骤:

1、编写Dockerfile: Dockerfile是一个文本文件,包含了创建镜像所需的所有指令。例如:

# 使用官方Python运行时作为父镜像
FROM python:3.7# 设置工作目录
WORKDIR /app# 复制当前目录内容到容器中的/app
COPY . /app# 安装requirements.txt中指定的所有依赖
RUN pip install --no-cache-dir -r requirements.txt# 让端口80可供此容器外的环境使用
EXPOSE 80# 定义环境变量
ENV NAME World# 在容器启动时运行app.py
CMD ["python", "app.py"]

2、构建镜像: 使用docker build命令来构建镜像。例如:

docker build -t my-python-app .

这个命令会根据Dockerfile中的指令创建一个新的镜像,并使用-t标签给它命名。

3、验证镜像: 使用docker images查看本地镜像列表,确保新建的镜像存在。

3、Docker容器和虚拟机的主要区别是什么?

Docker容器和虚拟机在多个方面有显著的不同:

1、资源消耗: Docker容器比虚拟机更加轻量,因为它们共享主机的核心操作系统,而不需要额外的操作系统实例。这减少了资源的消耗。

2、启动速度: 容器可以在几秒钟内启动,而虚拟机通常需要几分钟。

3、性能: Docker容器接近原生性能,因为它们直接运行在主机的操作系统上。虚拟机则有额外的性能开销,因为它们需要通过Hypervisor与主机操作系统通信。

4、隔离性: 虚拟机提供了更强的隔离性,因为每个虚拟机都有自己的完整操作系统。容器之间的隔离性较弱,但隔离性不断改进。

5、系统支持: Docker容器通常只能运行与宿主机相同的操作系统类型,而虚拟机可以运行不同的操作系统。

4、如何管理Docker容器的资源限制?

管理Docker容器的资源限制通常涉及以下几个方面:

1、内存限制: 可以在运行容器时使用-m--memory标志来限制其使用的最大内存。例如:

docker run -m 512m my-image

这将限制容器最多使用512MB的内存。

2、CPU限制: 使用--cpus标志来限制容器使用的CPU资源。例如:

docker run --cpus=1.5 my-image

这将限制容器最多使用1.5个CPU核心。

3、磁盘I/O限制: 可以使用--device-read-bps--device-write-bps来限制容器的磁盘读写速率。

4、网络带宽限制: 尽管Docker默认不提供网络带宽限制,但可以通过第三方工具或自定义脚本来实现。

5、在Docker中实现服务自动恢复的方法是什么?

在Docker中实现服务自动恢复主要依赖于容器的重启策略:

1、设置重启策略: 使用--restart标志来设置容器的重启策略。常用的策略有:

  • no:不自动重启。
  • on-failure:仅在容器非正常退出时重启。
  • always:无论退出码是什么,总是尝试重启容器。
  • unless-stopped:除非容器被手动停止,否则总是尝试重启。

例如:

docker run --restart=always my

6、Docker中如何优化镜像的大小?

优化Docker镜像大小的方法包括:

1、选择合适的基础镜像: 使用小型的基础镜像,如Alpine Linux,它比标准的Ubuntu或CentOS镜像小得多。

2、最小化层的数量: 在Dockerfile中尽可能合并RUN命令,减少镜像层的数量。

3、清理不必要的文件: 在构建镜像的过程中,移除不必要的文件和依赖,例如缓存和临时文件。

4、使用多阶段构建: 在Dockerfile中使用多阶段构建,只将必要的文件复制到最终镜像中。

5、避免安装不必要的软件包: 只安装运行应用所必需的软件包,避免冗余。

7、Docker网络模式有哪些,它们各自的特点是什么?

Docker支持多种网络模式,包括:

1、bridge模式: 默认的网络模式。容器将被连接到一个内部网络,通过网络桥接与主机通信。

2、host模式: 容器共享主机的网络命名空间,直接使用主机的网络。

3、none模式: 容器有自己的网络命名空间,但不会配置任何网络接口。

4、overlay模式: 用于Docker Swarm集群,支持不同Docker守护进程之间的容器通信。

5、macvlan模式: 允许容器具有独立的MAC地址,好像它们是物理网络上的单独的设备。

8、Docker容器与宿主机之间如何共享文件?

Docker容器与宿主机之间共享文件通常使用卷(volume)或绑定挂载:

1、使用卷(Volume): Docker管理的卷可以安全地存储数据,即使容器不再存在,数据也会保留。

2、使用绑定挂载: 将宿主机上的文件或目录直接映射到容器中。这对于开发环境特别有用。

9、Docker Compose的作用是什么?如何使用它来管理多容器应用?

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具:

1、定义服务:docker-compose.yml文件中定义应用的服务,包括容器、网络和卷。

2、一键部署: 使用docker-compose up命令来一次性启动所有定义的服务。

3、方便管理: 可以使用Docker Compose来启动、停止和重建服务,查看服务的状态和日志。

10、解释Docker Swarm的概念及其工作原理。

Docker Swarm是Docker的原生集群管理工具:

1、集群管理: 它允许多个Docker主机形成一个集群,统一管理。

2、服务调度: Swarm会自动分配容器到集群中的不同主机上。

3、负载均衡: 它可以自动对外部负载进行均衡,分发到集群内的多个容器实例。

4、高可用性: Swarm提供了容器的高可用性,如果某个容器实例失败,它会自动在另一个节点上重启该实例。

最后说一句(求关注,求赞,别白嫖)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的,7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文已收录于我的技术网站,next-java.com, 有大厂完整面经,工作技术等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注非常感激

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LaTex设置标题页、修改文字颜色和文字高亮

目录 一、标题页 1)常用的代码 2)添加脚注 二、修改文字颜色和文字高亮 1)设置文本的颜色 2)添加文本高亮 3)给文本添加有颜色的方框 一、标题页 主要的代码: \begin{titlepage} \noindent\fonts…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

Kali Linux—借助 SET+MSF 进行网络钓鱼、生成木马、获主机shell、权限提升、远程监控、钓鱼邮件等完整渗透测试(一)

社会工程学—世界头号黑客凯文米特尼克在《欺骗的艺术》中曾提到,这是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段。 SET最常用的攻击方法有:用恶意附件对目标进行 E-mail 钓鱼攻击、Java Applet攻…

nosql-redis整合测试

nosql-redis整合测试 1、创建项目并导入redis2、配置redis3、写测试类4、在redis中创建key5、访问80826、在集成测试中测试方法 1、创建项目并导入redis 2、配置redis 3、写测试类 4、在redis中创建key 5、访问8082 6、在集成测试中测试方法 package com.example.boot3.redis;…

SpringMVC之跨域请求

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 SpringMVC之跨域请求 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是同源策略…

doris基本操作,04-表结构的变更

整体思路 因为doris完全兼容mysql协议,因此操作上基本与mysql没有太大区别, 之需要注意与doris相关的关键字即可,如:预聚合,key等 当前表结构 create table table1 {siteid int default 10,citycode smallint,usern…

13章总结

一.泛型 1.定义泛型类 泛型机制语法&#xff1a; 类名<T> 其中&#xff0c;T是泛型的名称&#xff0c;代表某一种类型。 【例13.6】创建带泛型的图书类 代码&#xff1a; 结果&#xff1a; 2.泛型的常规用法 (1)定义泛型类时声明多个变量 class MyClass<T1,T2>…

HarmonyOS 签名打包Hap(s)、App(s)

1. 基本概念 HarmonyOS应用通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;来保证应用的完整性&#xff0c;数字证书和Profile文件可通过申请发布证书和Profile文件获取。   申请数字证书和Profile文件前&#xff0c;首先需要通…

渗透测试——1.2被动扫描

一、概念 目标无法觉察的情况下进行的信息收集。公开渠道可获得的信息&#xff0c;与目标系统不产生直接交互&#xff0c;尽量避免留下一切痕迹。 二、CDN&#xff08;content delivery netword内容分发网路&#xff09; 多台边缘服务器提供网络服务&#xff0c; 三、WAF&am…

【vscode插件】之插件图标设置

ChatgGPT4.0国内站点: 海鲸AI-支持GPT(3.5/4.0)&#xff0c;文件分析&#xff0c;AI绘图 在Visual Studio Code中创建插件时&#xff0c;你可以为你的插件设置一个图标&#xff0c;这个图标会在VS Code的插件市场和插件侧边栏中显示。以下是设置插件图标的步骤&#xff1a; 准备…

docker-compose 安装Sonar并集成gitlab

文章目录 1. 前置条件2. 编写docker-compose-sonar.yml文件3. 集成 gitlab4. Sonar Login with GitLab 1. 前置条件 安装docker-compose 安装docker 创建容器运行的特有网络 创建挂载目录 2. 编写docker-compose-sonar.yml文件 version: "3" services:sonar-postgre…

地图导航测试点总结

地图导航是我们经常使用的工具&#xff0c;能帮助我们指引前进的方向。 接下来&#xff0c;会从功能测试、UI测试、兼容测试、安全测试、网络测试、性能测试、易用性测试、文档和国际化语言测试8个方面来编写地图导航测试用例。 一、功能测试 1. 输入起点和终点&#xff0c;…

CSS样式斜切边

html部分 <div class"rectangle"></div> 样式一&#xff1a; .rectangle { width: 251px; height: 75px; background: linear-gradient(-135deg, transparent 52px, #ffffff 0) top right; background-size: 100% 100%; background-repeat: no-repeat; b…

Flume采集日志存储到HDFS

1 日志服务器上配置Flume,采集本地日志文件&#xff0c;发送到172.19.115.96 的flume上进行聚合&#xff0c;如日志服务器有多组&#xff0c;则在多台服务器上配置相同的配置 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1# Describe/con…

德思特分享丨V2X在做什么?连接未来智能出行的车联网(下)

来源&#xff1a;德思特测试测量 德思特分享丨V2X在做什么&#xff1f;连接未来智能出行的车联网&#xff08;下&#xff09; 原文链接&#xff1a;https://mp.weixin.qq.com/s/yEoCrLls-xuaF4CvVT2_zQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 在之前的文章中…

设计模式之-备忘录模式,快速掌握备忘录模式,通俗易懂的讲解备忘录模式以及它的使用场景

文章目录 一、快速理解备忘录模式二、备忘录模式使用场景三、代码示例四、我们再来听一个故事&#xff0c;加深一下理解五、备忘录模式的优缺点优点缺点 总结 一、快速理解备忘录模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;用于…

pytorch 踩坑

pytorch 踩坑 在pytorch中&#xff0c;如果你定义了没用的组件&#xff0c;同样也会影响你的模型(我也不知道从哪里影响的)&#xff0c;看一个例子 def _make_layer(self, block, planes, blocks, stride1, dilateFalse):norm_layer self._norm_layer#downsample Noneprevio…

外卖系统开发:构建高效、安全的外卖平台

在当今数字化时代&#xff0c;外卖系统成为了餐饮行业不可或缺的一部分。本文将介绍如何使用一些主流的技术和代码片段来开发一个简单而功能强大的外卖系统。 1. 技术选择 在开始外卖系统的开发之前&#xff0c;首先需要选择合适的技术栈。以下是一个常见的技术栈&#xff1…

新型智慧城市解决方案:PPT全文56页,附下载

关键词&#xff1a;智慧城市解决方案&#xff0c;智慧城市管理技术&#xff0c;智慧城市建设&#xff0c;数字城市建设 一、智慧城市宏观形势 1、政策支持&#xff1a;出台了一系列政策&#xff0c;鼓励和支持智慧城市的发展。这些政策为智慧城市的建设提供了政策保障和资金支…

贪心算法实现

1、概述 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而 希望导致结果是最好或最优的算法。 贪心算法的每一步都是基于当前状态下的最优解来选择下一步&#xff0c;因此它不能保证全局最优 解&#xff0c…