最新Docker面试题及答案附答案汇总
全部面试题答案,更新日期:01月30日,直接下载吧!
下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF
Docker
题1:非官方仓库下载镜像时,可能提示“Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”?
非官方地址,例如:dl.dockerpool.com。
Docker自1.3.0版本之后,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。
DOCKER_OPTS=”–insecure-registry dl.dockerpool.com:5000”
重启docker服务即可。
题2:Docker 镜像和层有什么区别?
Docker镜像是由一系列只读层构建的,而每个层代表Dockerfile中的一条指令。
题3:Docker 有哪些优缺点?
docker优点
1、部署方便
你一定还有印象,在我们最开始学习编程的时候,搭建环境这一步往往会耗费我们好几个小时的时间,而且其中一个小问题可能需要找很久才能够解决。你还会得到关于环境搭建方面的团队其他成员的求助。而有了容器之后,这些都变得非常容易,你的开发环境就只是一个或者几个容器镜像的地址,最多再需要一个控制部署流程的执行脚本。或者进一步将你的环境镜像以及镜像脚本放入一个git项目,发布到云端,需要的时候将它拉到本地就可以了。
2、部署安全
当我们收到一个bug反馈的时候,很多时候心里面的第一反应一定是“我本地是好的啊”!这种情况的发生就在于环境的不一致,我们在开发过程中的调试往往不能保证其他环境的问题,但是我们却要为此买单,这真是一件令人苦恼的事情。有了容器之后,这将很少发生。我们可以通过容器技术将开发环境和测试环境以及生产环境保持版本和依赖上的统一,保证代码在一个高度统一的环境上执行。而测试环境的统一,也同样能解决CI流程对环境的要求。
3、隔离性好
不管是开发还是生产,往往我们一台机器上可能需要跑多个服务,而服务各自需要的依赖配置不尽相同,假如说两个应用需要使用同一个依赖,或者两个应用需要的依赖之间会有一些冲突,这个时候就很容易出现问题了。所以同一台服务器上不同应用提供的不同服务,最好还是将其隔离起来。而容器在这方面有天生的优势,每一个容器就是一个隔离的环境,你对容器内部提供服务的要求,容器可以自依赖的全部提供。
4、快速回滚
容器之前的回滚机制,一般需要基于上个版本的应用重新部署,且替换掉目前的问题版本。在最初的时代,可能是一套完整的开发到部署的流程,而执行这一套流程往往需要很长的时间。在基于git的环境中,可能是回退某个历史提交,然后重新部署。这些跟容器技术相比都不够快,而且可能会引起新的问题(因为是基于新版本的修改)。而容器技术天生带有回滚属性,因为每个历史容器或者镜像都会有保存,而替换一个容器或者某个历史镜像是非常快速和简单的。
5、成本低
这可能是一个最明显和有用的优点了,在容器出现之前,我们往往构筑一个应用就需要一台新的服务器或者一台虚机。服务器的购置成本和运维成本都很高,而虚机需要占用很多不必要的资源。相比之下,容器技术就小巧轻便的多,只需要给一个容器内部构建应用需要的依赖就可以了,这也是容器技术发展迅速的最主要原因。
6、管理成本更低
随着大环境的发展,docker等容器的使用和学习的成本也是愈发降低,成为更多开发者和企业的选择。
docker缺点
1、隔离性
基于hypervisor的虚机技术,在隔离性上比容器技术要更好,它们的系统硬件资源完全是虚拟化的,当一台虚机出现系统级别的问题,往往不会蔓延到同一宿主机上的其他虚机。但是容器就不一样了,容器之间共享同一个操作系统内核以及其他组件,所以在收到攻击之类的情况发生时,更容易通过底层操作系统影响到其他容器。当然,这个问题可以通过在虚机中部署容器来解决,可是这样又会引出新的问题,比如成本的增加以及下面要提到的问题:性能。
2、性能
不管是虚机还是容器,都是运用不同的技术,对应用本身进行了一定程度的封装和隔离,在降低应用和应用之间以及应用和环境之间的耦合性上做了很多努力,但是随机而来的,就会产生更多的网络连接转发以及数据交互,这在低并发系统上表现不会太明显,而且往往不会成为一个应用的瓶颈(可能会分散于不同的虚机或者服务器上),但是当同一虚机或者服务器下面的容器需要更高并发量支撑的时候,也就是并发问题成为应用瓶颈的时候,容器会将这个问题放大,所以,并不是所有的应用场景都是适用于容器技术的。
题4:如何获取某个容器的 PIO 信息?
可以使用docker [container] inspect --format ' {{ . State.Pid }} '< CONTAINER ID or NAME>
命令。
题5:如何备份系统中所有的镜像?
备份镜像列表可以使用命令:
docker images | awk 'NR>l{prin七$1":"$2} ' | sort > images.list
导出所有镜像为当前目录下文件, 可以使用如下命令:
while read img; do
echo $img
file="${img/\//-}"
sudo docker save --output $file. tar $img
done< images.list
将本地镜像文件导入为Docker镜像:
while read img; do
echo $img
file="${img/\//-}"
docker load< $file.tar
done< images.list
题6:Docker 容器有几种状态?
四种状态:运行、已停止、重新启动、已退出。
题7:CI(持续集成)服务器的功能是什么?
CI服务器功能是不断地集成所有正在进行的更改并由不同的开发人员提交到存储库,并检查编译错误。它需要每天多次构建代码,最好是在每次提交之后,以便它可以检测在问题发生时是哪个提交Bug了。
题8:Docker 中都有哪些常用命令?
命令 | 说明 |
---|---|
docker pull | 拉去或更新指定的镜像 |
docker push | 将镜像推送到远程仓库 |
docker rm | 删除容器 |
docker rmi | 删除镜像 |
docker images | 列出所有镜像 |
docker ps | 列出所有容器 |
题9:如何更改 Docker 的默认存储设置?
Docker的默认存放位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来实现。
题10:Docker 中如何查看输出和日志信息?
当要查看一个docker容器的日志时,可以直接使用
docker logs 容器名字或者ID。
如果需要找其中包含某些内容(如xxx)的所有行,可以使用
docker logs 容器名字或者 ID 2>&1 | grep xxx
这里的2>&1代表把标准错误(文件描述符2)重定向(>)到标准输出(文件描述符 1)的位置(&)。
如果需要导出日志文件,可以使用
# grep 的 -i 表示不区分大小写
docker inspect 容器名字或者 ID | grep -i logpath