docker常见面试题

2022-09-06 13:05:39

目录

1.什么是docker?什么是docker镜像?

2.docker与虚拟机有何不同?docker常用命令?docker使用流程?

3.什么是docker容器?docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录?

4.Dockerfile中最常见的指令是什么?Dockerfile中的命令COPY和ADD命令有什么区别?

(1)常见指令:FROM + RUN + CMD + WORKDIR + ONBUILD + VOLUME + EXPOSE + LABEL与MAINTAINER + CPOY/ADD

(2)COPY与ADD的区别: COPY:直接拷贝;  ADD:拷贝+解压功能

5.如何在生产中监控docker?

6.docker如何在非Linux系统中运行容器?

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

8.如何使用Docker构建与环境无关的系统?

9.什么是Docker Swarm

10.CI(持续集成)服务器的功能是什么?


1.什么是docker?什么是docker镜像?

docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。
是docker容器的源代码,用于创建容器。使用build命令创建镜像。

2.docker与虚拟机有何不同?docker常用命令?docker使用流程?

(1)docker与虚拟机的不同:

特性Docker虚拟机
启动速度秒级分钟级
交付/部署开发、测试、生产环境一致无成熟体系
性能近似物理机性能损耗大
体量极小(MB)较大(GB)
迁移/扩展跨平台,可复制较为复杂


(2)常见命令:
    docker pull:拉取或者更新指定镜像; docker push:将镜像推送至远程仓库; docker images:列出所有镜像; docker rmi:删除镜像;
    docker ps:列出所有容器; docker rm:删除容器
(3)使用流程:a.创建Dockerfile后,docker build创建容器的镜像; b.推送或拉取镜像


3.什么是docker容器?docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录?

(1)docker容器:docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。
(2)docker容器4种状态:运行+已暂停+重新启动+已退出
(3)docker容器内部机制:每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源。
    【操作系统的一个功能是允许将全局资源(如网络和磁盘)共享到进程。如果将这些全局资源包装在命名空间中,以使它们仅对在同一命名空间中运行的那些进程可见】
(4)主机copy到容器:docker cp /www 96f7f14e99ab:/www/  容器copy到主机:docker cp 96f7f14e99ab:/www /tmp/
(5)启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令:
    docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
    docker run解读相见:https://www.jianshu.com/p/ea4a00c6c21c

4.Dockerfile中最常见的指令是什么?Dockerfile中的命令COPY和ADD命令有什么区别?

(1)常见指令:FROM + RUN + CMD + WORKDIR + ONBUILD + VOLUME + EXPOSE + LABEL与MAINTAINER + CPOY/ADD

FROM:指定基础镜像;
运行指令(RUN & CMD & ENTRYPOINT)详见:https://www.cnblogs.com/javazhiyin/p/12955024.html(dockerfile常见面试题)
    RUN:运行指定的命令;CMD:容器启动时要运行的命令
WORKDIR:(默认在/根目录)终端登录进去的落脚点。类似于cd,如果无该目录,则自动创建后再cd进去; ENV:设置环境常量,方便下文引用
ONBUILD:触发器,当镜像用作另一个镜像构建的基础(例如可使用特定于用户的配置自定义的应用程序构建环境或守护程序)时,ONBUILD指令向镜像添加将在稍后执行的触发指令。
VOLUME:自建容器卷
EXPOSE:当前容器对外界暴露出的端口
LABEL:为镜像指定标签;MAINTAINER:镜像维护者的姓名和邮箱地址

(2)COPY与ADD的区别: COPY:直接拷贝;  ADD:拷贝+解压功能

a.二者都是只复制目录中的文件,而不包含目录本身。
b.COPY能干的事ADD都能干,甚至还有附加功能。
c.ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件),COPY的<src>只能是本地文件
d.只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。
e.docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建更多的镜像层。镜像层的size也大。

5.如何在生产中监控docker?

docker提供docker stats和docker事件等工具来监控生产中的docker。我们可以使用这些命令获取重要统计数据的报告。
docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。
docker事件:Docker事件是一个命令,用于查看Docker守护程序中正在进行的活动流。一些常见的docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件。

6.docker如何在非Linux系统中运行容器?

通过添加到Linux内核版本2.6.24的名称空间功能,可以实现容器的概念。容器将其ID添加到每个进程,并向每个系统调用添加新的访问控制检查。它由clone()系统调用访问,该调用允许创建先前全局命名空间的单独实例。
如果由于Linux内核中可用的功能而可以使用容器,那么显而易见的问题是非Linux系统如何运行容器。Docker for Mac和Windows都使用Linux VM来运行容器。Docker Toolbox用于在Virtual Box VM中运行容器。但是,最新的Docker在Windows中使用Hyper-V,在Mac中使用Hypervisor.framework。

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

最好为Docker Container创建无状态应用程序。我们可以从应用程序中创建一个容器,并从应用程序中取出可配置的状态参数。现在我们可以在生产和具有不同参数的QA环境中运行相同的容器。这有助于在不同场景中重用相同的镜像。使用Docker Containers比使用有状态应用程序更容易扩展无状态应用程序。

8.如何使用Docker构建与环境无关的系统?

三个功能来实现: Volumes + 环境变量注入 + 只读文件系统

9.什么是Docker Swarm

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

10.CI(持续集成)服务器的功能是什么?

CI功能就是在每次提交之后不断地集成所有提交到存储库的代码,并编译检查错误

  • 作者:筑梦悠然
  • 原文链接:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/113287645
    更新时间:2022-09-06 13:05:39