docker常见面试题

1.什么是docker

docker是一个容器化平台,类似于一个集装箱,集装箱与集装箱之间互不影响,docker平台就是一个软件集装箱平台,我们可以构建应用程序,将其所有的依赖打包到一个容器中,然后就很方便的可以在其他机器上运行,他的优点主要就是提供一个轻量级的可隔离性的,可移植性的运行环境。

2.docker容器的几种状态

created:已创建 running:运行中 paused:暂停

exited:已退出 restarting:重启中

3.为什么要使用docker

docker和vmware相比

容器技术:占用磁盘空间小一般为KB;启动速度快,秒级启动;直接运行于宿主机的内核上,不同容器共享同一个linux内核,并发性上来看一台宿主机可以启动上百个容器,而且资源利用率高

虚拟机技术:完全与他相反,它占用磁盘空间大,启动速度慢,运行于Hypervisior上,一台主机最多可运行几十个虚拟机,且资源利用率低。

4.dockerfile中最常见的指令

FROM 指定基础镜像,用于构建新镜像

RUN 在构建运行指定命令

COPY和ADD 用于将本地文件或目录复制到容器中

ENV 设置环境命令

CMD 指定容器创建时的默认命令

EXPOSE 声明容器运行时监听的而特定网络端口(暴露端口)

5.COPY和ADD区别

COPY 指令用于简单地复制本地文件或目录到容器中,它的主要功能是文件复制。

ADD 指令除了复制本地文件和目录外,还可以执行一些额外的功能,例如解压缩文件、从 URL 复制文件、并且支持自动解压缩。

6.dockerfile的优化思路

从编译速度上进行如下优化:充分利用缓存,使用国内的软件源

镜像体积做如下优化:删除无用缓存,卸载无用软件包,使用较小的基础镜像

7.容器间的通信用什么方式

容器间可以使用link方式使荣期间相互通信,容器名称,

8.docker的网络模式总共有几种

docker网络模式主要有4中分别是
host模式 :容器和宿主机共享network namespace
container模式 :容器和另一个容器共享network namespace ,kubernetes中的pod就是多个容器共享一个network namespace

**none模式:**容器有独立的network namespace,但并没有对其进行任何网络设置,如分配veth pair和网桥连接,配置ip等
bridge模式 默认为该模式

9.docker底层如何实现

docker的底层实现依赖于多个关键技术和组件,其中最重要的是linux容器技术

主要有:namespace(命名空间),通过命名来相互隔离,cgroups(控制组)来限制和分配容器资源,确保容器之间不会相互干扰,chroot限制进程文件系统访问的工具,OverlayFS允许多个文件系统层叠加在一起,适用于docker镜像和容器管理

10.docker swarm是什么

Docker Swarm是docker的本地群集。是一种容器编排和集群管理工具,用于协调和管理多个docker容器节点,来创建高可用性的,分布式的容器应用程序集群它将docker主机池转变为单个虚拟docker主机。Docjer Swarm

提供标准的docker API,任何已经与docker守护进程通信的工具都可以使用Swarm透明地扩展到多个主

Docker Swarm 与 Kubernetes 是两个常见的容器编排工具,它们都用于管理容器化应用程序的部署和运行。Swarm 在较小规模和较简单的部署场景中可能更容易上手,而 Kubernetes 则更适用于大规模、复杂的容器编排和管理。

11.如何在生产环境中监控docker

docker自己也提供了一些基本的监控功能,可以使用docker命令docker stats和docker top命令

也可以使用一些专用的容器监控工具cAdvisor容器监控,使用prometheus采集数据,结合grafana展示数据

12.harbor仓库是如何搭建的高可用的?

harbor是一个开源的容器镜像管理系统,如果要搭建高可用的harbor仓库可采用多个harbor共享存储卷的方式、提供复制规则,同步镜像

13.docker-registry迁移到harbor如何做的?

首先备份docker registry数据(例如使用docker-save、docker-compose)或者直接备份docker镜像存储目录

然后通过scp或者docker load在目标harbor中导入镜像

14.什么是docker-compose

docker-compose是一个编排工具,同时管理多个容器,与他配对的是一个docker-compose.yaml文件,docker-compose文件必须包在一个包含docker-compose。yaml文件目录下才能使用

15.Data Volume的特点

datavolume是目录或是文件,并不是没有格式化的磁盘(块设备)

容器可以读写volume中的数据

volume数据可以被永久保存,即使使用它的容器已经销毁

16.volume,bind和tmpfs三者的相同点和区别

相同点:无论选择哪种类型去使用,数据在容器内都是相同的,他被视为容器文件系统中的目录或单个文件

不同点:

卷(volume)存储在由docker管理的主机文件系统的一部分中(/var/log/docker/volumes/)非docker的进程不应该修改这部分文件系统,卷是在docker中保留数据的最佳方式

绑定挂载(bind mount)也就是把主机的本地目录挂载到容器中某个挂载点,可以存储在主机系统的任何位置,他们甚至可能是重要的系统文件或目录。docker主机或docker容器上的非docker进程可以随时修改他们。

tmpfs挂载(tmpfs mount) 仅仅存储在主机系统的内存中,而不会写入主机系统的文件系统。

相关推荐
尘佑不尘1 小时前
kali上安装docker,并且生成centos7容器和创建apache容器后台运行
笔记·web安全·docker·容器·apache
想学习java初学者2 小时前
Docker compose部署Activemq
docker·容器·activemq
椰汁菠萝2 小时前
docker运行ActiveMQ-Artemis
docker·容器·activemq
wowocpp2 小时前
ubuntu 22.04 安装 docker 阿里云源 LTS
ubuntu·阿里云·docker
basic_code3 小时前
Docker部署Kafka集群,增加 SASL_SSL认证,并集成到Spring Boot,无Zookeeper版
spring boot·docker·kafka·kafka集群
低调沉稳3 小时前
k8s1.21.1 etcd服务备份恢复
容器·kubernetes·etcd
程序员大佬超5 小时前
Docker内存溢出报错问题解决
运维·docker·容器
gsls20080810 小时前
docker打包nginx版wordpress
nginx·docker·wordpress
Hoper.J12 小时前
用两行命令快速搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),包含完整的 Docker 安装步骤
人工智能·深度学习·docker
Nue.js13 小时前
Docker中最常用的一些命令
docker·容器·eureka