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) 仅仅存储在主机系统的内存中,而不会写入主机系统的文件系统。

你可能感兴趣的:(容器,docker,eureka,容器)