秋招日寄|Docker模拟面试拷打|20241108
基础概念
1. 什么是Docker?
Docker是一个开源的容器化平台,能够将应用及其依赖打包到轻量级、可移植的容器中,确保应用在不同环境中运行的一致性。它使用Linux的容器技术来提供隔离和资源管理,简化了应用的部署和测试流程。
2. Docker容器和虚拟机的区别是什么?
Docker容器使用操作系统级别的虚拟化,共享宿主机的内核,多个容器之间共享资源,但彼此隔离。相比之下,虚拟机在硬件级别进行虚拟化,每个虚拟机运行独立的操作系统,资源消耗更大。容器通常更轻量、启动更快,且资源占用更少。
3. 什么是Docker镜像?
Docker镜像是一个只读的模板,包含了应用程序及其运行所需的依赖环境和配置文件。镜像用于创建容器,可以视为容器的“蓝图”。
4. 如何创建Docker容器?
使用docker run
命令创建并启动容器。例如,docker run -d -p 80:80 nginx
会基于nginx
镜像启动一个容器,将容器的80端口映射到宿主机的80端口。
5. Docker Hub是什么?
Docker Hub是Docker官方的公共镜像仓库,用于存储、共享和分发Docker镜像。用户可以在Docker Hub上找到各种公共镜像,也可以上传并管理自己的私有镜像。
常用命令
6. 如何查看当前运行的Docker容器?
使用docker ps
命令查看当前运行的容器。要查看所有容器,包括停止的容器,使用docker ps -a
。
7. 如何停止和启动Docker容器?
使用docker stop <容器ID或名称>
来停止容器,使用docker start <容器ID或名称>
来启动容器。
8. 如何进入正在运行的Docker容器?
使用docker exec -it <容器ID或名称> /bin/bash
进入容器的交互式终端,以便在容器内执行命令。
9. 如何删除Docker镜像和容器?
使用docker rm <容器ID>
删除容器,docker rmi <镜像ID>
删除镜像。注意:如果容器正在运行,需先停止才能删除。
10. 如何查看Docker容器的日志?
使用docker logs <容器ID或名称>
查看容器的日志输出,便于调试和监控。
网络管理
11. Docker的默认网络模式有哪些?
Docker提供的默认网络模式包括:
- bridge:桥接模式,容器使用虚拟桥接网络互联。
- host:容器使用宿主机的网络栈。
- none:容器无网络连接。
- container:与其他容器共享网络命名空间。
12. 如何创建Docker网络?
使用docker network create
命令创建网络。例如,docker network create --driver bridge my_bridge_network
创建了一个桥接网络。
13. Docker容器间通信是如何工作的?
容器间可以通过Docker网络进行通信。同一网络内的容器可以使用容器名称进行DNS解析,实现互联互通。
存储管理
14. 什么是Docker卷(Volume)?
Docker卷是一种持久化存储机制,用于在容器间共享和保存数据。卷独立于容器的生命周期,即使容器删除,数据依然保留。
15. 如何创建和使用Docker卷?
使用docker volume create
命令创建卷,并通过-v
选项将卷挂载到容器中。例如,docker run -v my_volume:/data my_image
将my_volume
挂载到容器的/data
目录。
Docker Compose
16. 什么是Docker Compose?
Docker Compose是一种定义和管理多容器Docker应用的工具。它通过docker-compose.yml
文件定义服务、网络和卷等配置,简化多容器应用的运行。
17. 如何启动Docker Compose定义的服务?
使用docker-compose up
命令启动所有在docker-compose.yml
中定义的服务。加上-d
选项可以后台运行。
18. Docker Compose文件中的links
参数有什么作用?
links
用于定义容器间的依赖和通信路径,但在自定义网络普及后,它的重要性逐渐下降,推荐使用网络名称代替。
19. 怎样在Docker Compose中设置环境变量?
可以在docker-compose.yml
文件中使用environment
键配置环境变量,或者通过.env
文件加载。
Docker Swarm
20. Docker Swarm是什么?
Docker Swarm是Docker内置的原生集群管理工具,用于在多个主机上部署和管理容器,支持服务编排和集群模式。
21. 如何创建一个Docker Swarm集群?
在主节点上运行docker swarm init
命令初始化集群。其他节点可通过提供的docker swarm join
命令加入。
22. Docker Swarm中的服务和任务是什么?
服务定义了应用的期望状态,如副本数量。任务是服务的实例,是运行在Swarm节点上的容器。
23. 如何扩展Docker Swarm中的服务?
使用docker service scale <服务名称>=<副本数>
调整服务的副本数量。
24. Docker Swarm和Kubernetes的主要区别是什么?
Kubernetes功能更丰富,适合复杂应用场景,支持更高级的调度和扩展能力。Docker Swarm简单易用,适合快速部署和轻量级集群管理。
安全和维护
25. 如何保证Docker容器的安全性?
通过以下措施保障安全:使用受信任的镜像、运行非root用户、限制容器资源、定期更新Docker和宿主机系统、启用Docker的安全扫描等。
26. 怎样更新Docker容器?
停止旧容器,拉取最新镜像,删除旧容器并用新镜像重新创建容器。
27. Docker中的健康检查如何工作?
可以在Dockerfile中定义HEALTHCHECK
指令,或在docker-compose.yml
中配置healthcheck
来周期性检查容器的健康状态。
28. 如何清理未使用的Docker资源?
使用docker system prune
命令清理未使用的容器、镜像、网络和构建缓存。
高级话题
29. 什么是Docker的多阶段构建?
多阶段构建是Dockerfile中使用多个构建阶段的技术,使得可以从不同阶段复制构建结果,从而显著减少最终镜像的体积。
30. Docker中的COPY和ADD有什么区别?
COPY
仅用于复制本地文件,而ADD
除了复制,还支持解压归档文件和从URL下载资源。
31. Docker是如何实现容器隔离的?
Docker利用Linux命名空间(Namespaces)和控制组(cgroups)实现进程、文件系统、网络等资源的隔离和限制。
32. 解释Docker容器的重启策略。
Docker支持的重启策略包括:
no
:默认值,不重启。always
:总是重启容器。on-failure
:仅在容器退出状态非0时重启。unless-stopped
:容器会自动重启,除非手动停止。
一些八股模拟拷打Point,万一有点用呢