Docker面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

服务端阅读 02月17日 23:45

Docker 容器成本优化的方法有哪些?

Docker 容器成本优化可以从多个方面入手:1)使用轻量级基础镜像(alpine、distroless)减小镜像体积;2)多阶段构建只保留必要文件;3)合理设置资源限制避免资源浪费;4)使用自动扩缩容根据负载调整容器数量;5)定期清理未使用的镜像和容器(docker system prune);6)使用 spot 实例或预留实例降低云成本;7)优化应用代码减少资源消耗;8)使用共享数据卷避免重复存储;9)监控资源使用情况及时优化;10)选择合适的实例类型和规格。
服务端阅读 02月17日 23:45

Docker 容器故障排查的流程是什么?

Docker 容器故障排查流程:1)检查容器状态(docker ps -a)和退出码;2)查看容器日志(docker logs)定位错误信息;3)使用 docker inspect 查看容器配置和网络信息;4)进入容器(docker exec -it)检查应用状态;5)检查资源使用情况(docker stats)是否超限;6)验证网络连接和端口映射;7)检查数据卷挂载和权限;8)查看 Docker 守护进程日志(journalctl -u docker);9)使用 docker events 查看实时事件;10)对比正常和异常容器的配置差异。常见问题:启动失败、网络不通、权限不足、资源耗尽、依赖缺失。
服务端阅读 02月17日 23:45

Docker 容器文件系统的工作原理是什么?

Docker 容器文件系统是分层存储结构,由多个只读层和一个可读写层组成。只读层来自镜像,可读写层(容器层)用于存储运行时修改。当容器读取文件时,从上到下在各层中查找;当容器写入文件时,使用 Copy-on-Write(写时复制)机制,将文件从只读层复制到可读写层后修改。删除文件时,在可读写层创建 whiteout 文件标记删除。这种设计使得多个容器可以共享相同的镜像层,节省存储空间。容器停止后,可读写层仍然保留,除非使用 --rm 参数删除容器。
服务端阅读 02月17日 23:44

Docker 容器日志分析的方法有哪些?

Docker 容器日志分析对于故障排查和性能优化至关重要。分析方法:1)使用 docker logs 查看容器标准输出日志;2)使用 --tail 参数查看最新日志,-f 参数实时跟踪;3)使用 --since 和 --until 参数按时间过滤;4)使用日志聚合工具(如 ELK Stack、Fluentd、Loki)集中收集和分析;5)使用 grep、awk 等工具过滤和分析日志内容;6)使用日志分析平台(如 Splunk、Datadog)进行高级分析。日志最佳实践:结构化日志输出(JSON 格式)、合理设置日志级别、避免敏感信息泄露、定期清理旧日志。
服务端阅读 02月17日 23:44

Docker 容器日志管理的方法有哪些?

Docker 容器日志管理包括日志驱动、日志轮转和日志收集。Docker 支持多种日志驱动:json-file(默认,本地文件)、syslog(发送到 syslog)、journald(发送到 systemd journal)、fluentd(发送到 Fluentd)、gelf(发送到 Graylog)、awslogs(发送到 CloudWatch)。使用 --log-driver 参数指定日志驱动,--log-opt 配置选项。日志轮转:--log-opt max-size(单个日志文件最大大小)、--log-opt max-file(保留的日志文件数量)。生产环境建议使用集中式日志收集(如 ELK Stack、Fluentd)以便统一管理和分析。
服务端阅读 02月17日 23:44

Docker 容器时区配置的方法有哪些?

Docker 容器时区配置方法:1)在 Dockerfile 中设置时区环境变量:ENV TZ=Asia/Shanghai;2)在 docker run 时传递时区参数:-e TZ=Asia/Shanghai;3)挂载宿主机时区文件:-v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro;4)使用 tzdata 包更新时区数据。推荐使用环境变量方式,因为它更灵活且不依赖宿主机配置。对于需要精确时间同步的应用,建议在容器内安装 NTP 客户端或使用宿主机的 NTP 服务。时区配置会影响日志时间戳、定时任务等时间相关功能。
服务端阅读 02月17日 23:44

Docker 容器和虚拟机有什么区别?

Docker 容器是轻量级的虚拟化技术,它共享宿主机的操作系统内核,而虚拟机(VM)需要完整的操作系统。Docker 容器启动速度快(秒级),资源占用少,镜像体积小;虚拟机启动慢(分钟级),需要更多资源,镜像体积大。Docker 容器提供进程级别的隔离,虚拟机提供硬件级别的隔离。Docker 更适合微服务架构和持续集成/持续部署(CI/CD)场景。
服务端阅读 02月17日 23:44

Docker 容器更新策略有哪些?

Docker 容器更新策略包括滚动更新和蓝绿部署。在 Docker Swarm 中,使用 docker service update --image 新镜像名 进行更新,可以配合 --update-parallelism(并行更新数量)、--update-delay(更新间隔)、--update-failure-action(失败处理策略)参数实现滚动更新。蓝绿部署需要创建两个服务(blue 和 green),通过切换流量实现零停机更新。Kubernetes 提供更强大的更新策略:RollingUpdate(滚动更新)、Recreate(重建)、OnDelete(删除时更新)。更新前建议先进行充分测试,并准备好回滚方案。
服务端阅读 02月17日 23:43

Docker 容器服务发现的实现方式有哪些?

Docker 容器服务发现机制用于动态发现和连接容器化服务。实现方式:1)Docker 内置 DNS:容器通过容器名互相解析;2)环境变量注入:Docker 将链接容器的信息注入环境变量;3)第三方服务发现工具:Consul、Etcd、Zookeeper;4)Kubernetes Service:通过 Service 对象提供服务发现;5)服务网格:Istio、Linkerd 提供高级服务发现功能。负载均衡:Docker Swarm 内置负载均衡,Kubernetes 使用 Service 和 Ingress。最佳实践:使用服务注册中心、实现健康检查、支持动态更新、配置超时和重试。
服务端阅读 02月17日 23:43

Docker 容器权限管理的最佳实践是什么?

Docker 容器权限管理涉及用户权限和容器能力。默认情况下,容器以 root 用户运行,存在安全风险。最佳实践:1)在 Dockerfile 中使用 USER 指令切换到非 root 用户;2)使用 --user 参数指定运行用户;3)使用 --cap-drop 删除不需要的 Linux capabilities;4)使用 --cap-add 只添加必要的 capabilities;5)使用 --read-only 标志使容器文件系统只读;6)使用 --security-opt no-new-privileges 防止提权;7)使用 AppArmor 或 SELinux 配置文件增强安全。对于需要 root 权限的操作,可以使用 sudo 或 capabilities 细粒度控制。