Docker面试相关内容--2022年总结

应对面试需要,总结相关面试题

一、基础面试题

1、docker有几种网络模式,容器和容器之间怎么通信,跨主机之间怎么通信?

docker 有四种网络模式

1.none
2.bridge桥接(默认模式)
3.Host
4.container

容器之间:通过桥接模式进行通信
跨主机的容器之间:通过静态路由进行通信,A主机的容器的下一跳指向B主机,这样B主机接收到请求解包后转发给本机的容器

2、docker和核心技术是什么/容器隔离机制?

容器: Namespace + Cgroups

Namespace:帮助容器实现各种资源(PID、IPC、网络等资源)的隔离
Cgroups(control groups):主要对容器使用某种资源量的多少做一个限制

3、docker和虚拟机的区别是什么?

docker
使用宿主机的内核,启动速度快,隔离性差,docker 确切来说是一个容器引擎,轻量级的沙盒,在其中运行的只是应用

虚拟机
虚拟机使用自己的内核和额外的系统,启动速度慢,因为有自己的内核,所以隔离性好

4、Docker由哪些部分组成?docker的生命周期?

docker组成:
DockerClient 客户端
Docker Daemon 守护进程
Docker Image 镜像
DockerContainer 容器
docker生命周期:
创建容器 运行容器 暂停容器(可选) 取消暂停容器(可选) 启动容器 停止容器 重启容器 杀死容器 销毁容器

5、Docker常用命令
参数解析
pull下载镜像,没写 tag 就默认下载最新的 lastest
push将镜像推送到远程仓库
run启动并下载镜像,成为一个容器
exec进入容器
ps查看本地主机的正在运行容器,-a 查看所有的容器
images查看本地主机的所用镜像
search镜像仓库里搜索镜像
rmi删除镜像
rm删除容器
cp容器和宿主机之间拷贝数据
logs查看容器日志文件
6、Dockerfile常用命令
参数解析
FROM指定基础镜像,即构建新镜像是基于那个基础镜像,第一条指令
LABEL指定一组键值对,可用于程序化配置或布署 Docker
RUN可在映像当前层执行任何命令并创建一个新层
ONBUILD当镜像用作另一个镜像构建的基础时,ONBUILD指令向镜像添加将在稍后执行的触发指令
CMD为执行的容器提供默认值,即持续的前端命令,保持容器不被关闭
7、ENTRYPOINT 和 CMD 之间的共同和异同

共同点:
1. 指定 shell 或者 exec 函数调用的方式执行命令
2. 只有最后一条指令生效,所以一般只有一条 CMD 或 ENTRYPOINT 指令
不同点:
1. CMD 指令可以被 docker run 之后的参数覆盖
2. CMD 指令可以为 ENTRYPOINT 指定设置默认参数
3. docker run 指定的参数不会覆盖,并且 将成为ENTRYPOINT 指定命令的参数

8、DockerFile中的命令COPY和ADD命令有什么区别?

COPY的SRC只能是本地文件
ADD会自动解压tar格式的压缩文件

9、Harbor 磁盘满了之后如何删除镜像

1. 镜像内容是存储在一层虚拟文件系统(VFS)之上,由多个文件块(Blobs)、描述清单文件(Manifests)和 标签文件(tags)组成
2. 只做删除标记,而不是真删除,通过垃圾回收机制来遍历当前仓库的有向关系图(DAG),然后在删除没有被引用的文件块

10、怎么优化镜像

优化镜像
1. 只安装一些必须的软件包, 删除一些不需要的数据,镜像变动的东西放在最上层,命令放最下面最下面几行,可以有效利用缓存,加速镜像构建
2. dockerfile构建镜像时,能缩减的就尽量缩减一条命令,因为每一行命令就是一层
3. 不要将数据和日志打包进镜像,可以通过数据卷精简镜像

11、使用Docker Compose时如何保证容器A先于容器B运行

Docker Compose:docker的管理工具
B的服务中添加 depends_on: A

二、理论知识

1、Docker 中如何批量清理容器和镜像文件?

1、清理所有已经停止的容器

docker rm $(docker ps -a -q)

2、清理所有镜像

docker rmi $(docker images -q)

3、强制清理所有镜像

docker rmi -f $(docker images -q)

4、清理过滤出来的镜像

docker rmi $(docker images | grep "关键字" | awk '{print $3}')

5、如何批量清理临时镜像文件?

docker rmi $(sudo docker images -q -f danging=true)
2、docker资源限制–如何控制容器占用系统资源(CPU、内存)的份额?

使用docker [container] create命令创建容器或使用docker [con­tainer] run创建并启动容器
使用 -c | - cpu -shares[=O]参数来调整容器使用CPU的权重;
使用-m l -memory [=MEMORY]参数来调整容器使用内存的大小。

3、Docker的配置文件放在什么位置,如何修改配置?

dockerd配置文件:
[root@szb sysconfig]# cat /usr/lib/systemd/system/docker.service

docker日志:
[root@szb sysconfig]# docker inspect -f {{.LogPath}} d867a94d54a3d174612
/var/lib/docker/containers/d867a94d54a3d17461201e87e8ecfc4a849bb1d6ca98a64edaf6f30a10451c73/d867a94d54a3d17461201e87e8ecfc4a849bb1d6ca98a64edaf6f30a10451c73-json.log

docker相关的本地资源存在/var/lib/docker/目录下
1.container目录存放容器信息
2.graph目录存放镜像信息
3.aufs目录下存放具体的镜像底层文件。
4、Docker容器有几种状态?

四种状态:运行、已停止、重新启动、已退出

5、什么是docker Swarm

Docker Swarm是docker的本地集群。它将docker主机池转变为单个虚拟docker主机。Docker Swarm提供标准的docker API,任何已经与docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主机。

6、如何查看镜像支持的环境变量? 如何查看容器支持的环境变量?

镜像:

docker run IMAGEID env
[root@szb docker]# docker run 5cc90bef83b3 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=0dba888eb2a7
HOME=/root

容器:

[root@szb docker]# docker inspect d867a94d54a3d174612 -f {{.Config.Env}}
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin NGINX_VERSION=1.21.5 NJS_VERSION=0.7.1 PKG_RELEASE=1~bullseye]
7、容器退出后,通过docker ps命令查看不到,数据会丢失么?

容器退出后会处于终止(exited)状态,此时可以通过docker ps -a查看,其中数据不会丢失,还可以通过docker start来启动,只有删除容器才会清除数据。

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

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

9、Docker 安全么?

docker的安全性较弱。Docker的租户root和宿主机root等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户root权限和宿主机的root虚拟机权限是分离的,并且虚拟机利用如Intel的VT-d和VT-x的ring-1硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

10、什么类型的应用程序无状态或有状态更适合Docker容器?

状态(公共交互)信息
由请求方保存就是无状态
由响应方保存就是有状态。

Docker容器适合创建无状态应用程序。无状态应用程序比有状态应用程序更容易使用Docker容器进行扩展,有助于在不同场景中重用相同的镜像。

11、基本的Docker使用工作流程是怎样的?

下载安装Docker
镜像(image)的创建,可以从仓库中拉取或者写DockerFile脚本手动创建
容器的运行,用docker run命令实例化镜像,再用docker容器命令对其进行管理

13、Docker如何在非Linux系统中运行容器?

Docker for Mac和Windows都使用Linux VM来运行容器。Docker Toolbox用于在Virtual Box VM中运行容器。

12、构建docker镜像应该遵循哪些原则?

整体原则上,尽量保持镜像功能的明确和内容的精简
要点包括:
1.尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小。
2.清理编译生成文件、安装包的缓存等临时文件。
3.安装软件时候要指定准确的版本号,并避免引入不需要的依赖。
4.从安全的角度考虑,应用尽量使用系统的库和依赖。
5.使用dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录。

13、Docker于Vagrant有何不同?

两者的定位完全不同
1.Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境,Vagrant可以在多种系统上和虚拟机软件中运行,可以在Windows、Mac等非Linux平台上为Docker支持,自身具有较好的包装性和移植性。
2.原生Docker自身只能运行在Linux平台上,但启动和运行的性能比虚拟机要快,往往更适合快速开发和部署应用的场景。

14、仓库(Repository)、注册服务器(Regi stry)、注册索引(Index)有何关系?

仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像
注册索引则负责维护用户的账号、权限、搜索、标签等管理。
注册服务器是存放实际的镜像的地方,注册服务器利用注册索引来实现认证等管理。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值