面试题手册

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

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

Docker COPY 和 ADD 指令的区别是什么?

Docker COPY 和 ADD 都用于将文件从宿主机复制到镜像中,但有重要区别。COPY 只能复制本地文件,简单直接;ADD 支持自动解压压缩文件(tar、gzip、bzip2 等)和从 URL 下载文件。最佳实践是优先使用 COPY,因为它的行为更可预测。ADD 的自动解压功能虽然方便,但可能导致意外结果。如果需要从 URL 下载文件,建议使用 RUN wget 或 curl,这样可以在同一层中清理缓存。COPY 语法:COPY [--chown=:] … 。
服务端阅读 02月17日 23:48

Docker 容器的隔离机制是什么?

Docker 使用 Linux 的命名空间(Namespace)和控制组(Cgroup)实现容器隔离。命名空间提供进程、网络、文件系统、用户等隔离:PID namespace(进程隔离)、NET namespace(网络隔离)、MNT namespace(文件系统隔离)、UTS namespace(主机名隔离)、IPC namespace(进程间通信隔离)、USER namespace(用户隔离)。Cgroup 用于资源限制和监控,可以限制 CPU、内存、磁盘 I/O 等资源使用。这些技术确保容器之间相互隔离,同时共享宿主机内核。
服务端阅读 02月17日 23:47

Docker 安全最佳实践有哪些?

Docker 安全最佳实践包括:使用官方或可信的基础镜像、定期更新镜像以修复安全漏洞、避免在镜像中存储敏感信息(使用环境变量或 secrets)、以非 root 用户运行容器、限制容器的资源使用、使用 --read-only 标志使容器文件系统只读、使用 Docker Content Trust 验证镜像签名、限制容器的 capabilities(使用 --cap-drop 和 --cap-add)、使用 AppArmor 或 SELinux 增强安全隔离、定期审计和监控容器。
服务端阅读 02月17日 23:47

Docker 容器与消息队列的结合方式是什么?

Docker 容器与消息队列的结合可以实现异步处理和解耦。常用消息队列:RabbitMQ、Kafka、Redis、ActiveMQ。部署方式:1)使用官方镜像部署消息队列;2)使用 Docker Compose 编排消息队列和应用容器;3)使用数据卷持久化消息数据;4)配置集群模式提高可用性(如 Kafka 集群)。最佳实践:合理设置资源限制、配置持久化存储、实现消息确认机制、监控队列状态、设置告警。注意事项:消息队列的启动顺序、网络配置、数据备份、故障恢复。
服务端阅读 02月17日 23:46

Docker 容器与缓存服务的部署方法是什么?

Docker 容器与缓存服务的部署可以显著提升应用性能。常用缓存服务:Redis、Memcached。部署方式:1)使用官方镜像部署缓存服务;2)配置数据卷持久化缓存数据(如 Redis AOF/RDB);3)使用 Docker Compose 编排缓存和应用容器;4)配置缓存集群模式(如 Redis Cluster)。性能优化:使用 host 网络模式减少网络开销、调整内存配置、使用持久化模式避免数据丢失。最佳实践:设置合理的过期时间、监控缓存命中率、实现缓存预热、配置主从复制提高可用性。
服务端阅读 02月17日 23:46

Docker 容器与自动化测试的结合方式是什么?

Docker 容器与自动化测试的结合可以提高测试效率和一致性。测试场景:1)单元测试:在容器中运行测试代码;2)集成测试:使用 Docker Compose 启动依赖服务;3)端到端测试:在容器中运行浏览器测试(Selenium);4)性能测试:在容器中运行压力测试工具(JMeter、Locust)。最佳实践:使用多阶段构建构建测试镜像、使用数据卷共享测试结果、配置测试环境变量、实现测试报告生成、集成到 CI/CD 流程。优势:环境一致性、快速启动和清理、并行测试执行。
服务端阅读 02月17日 23:46

Docker 容器信号处理的机制是什么?

Docker 容器信号处理是容器优雅关闭的关键。Docker 在停止容器时发送 SIGTERM 信号,容器内的进程应该捕获该信号并执行清理操作(如关闭连接、保存状态)。如果进程在超时时间(默认 10 秒)内未退出,Docker 会发送 SIGKILL 信号强制终止。在 Dockerfile 中使用 STOPSIGNAL 指令可以自定义停止信号。应用代码中需要正确处理信号,例如在 Python 中使用 signal.signal(),在 Node.js 中使用 process.on('SIGTERM')。对于多进程容器,需要使用 init 系统(如 dumb-init、tini)来正确传递信号。
服务端阅读 02月17日 23:46

Docker 容器性能优化的方法有哪些?

Docker 容器性能优化可以从多个方面入手:1)选择合适的基础镜像(alpine、distroless 等)减小镜像体积;2)使用多阶段构建只保留必要文件;3)合并 RUN 指令减少镜像层数;4)利用构建缓存,将变化少的指令放在前面;5)清理不必要的文件和缓存(apt-get clean、rm -rf /var/lib/apt/lists/*);6)使用 .dockerignore 排除不需要的文件;7)优化应用代码和依赖;8)合理设置资源限制避免资源浪费;9)使用健康检查确保应用正常运行;10)定期更新基础镜像和依赖包获取性能改进和安全修复。
服务端阅读 02月17日 23:45

Docker 容器安全扫描的方法有哪些?

Docker 容器安全扫描用于检测镜像中的安全漏洞。常用工具:1)Docker Scout(Docker 官方工具,集成到 Docker CLI);2)Trivy(开源,支持多种格式);3)Clair(开源,可自建扫描服务);4)Anchore(企业级,支持策略管理);5)Snyk(商业服务,集成 CI/CD)。扫描内容:操作系统漏洞、应用依赖漏洞、配置问题、敏感信息泄露。最佳实践:在 CI/CD 流程中集成安全扫描、定期扫描已部署的镜像、及时修复发现的高危漏洞、使用官方或可信的基础镜像。
服务端阅读 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: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: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 容器灾难恢复计划是保障业务连续性的关键。备份策略:定期备份镜像(docker save)、备份容器配置(docker inspect)、备份数据卷、备份 docker-compose.yml 和 Kubernetes 配置文件。恢复流程:1)从备份恢复镜像(docker load);2)重新创建容器和服务;3)恢复数据卷;4)验证应用功能正常。高可用设计:使用多节点集群、跨区域部署、自动故障转移。测试恢复:定期进行灾难恢复演练、验证备份完整性、记录恢复时间目标(RTO)和恢复点目标(RPO)。
服务端阅读 02月17日 23:42

Docker 容器版本管理的最佳实践是什么?

Docker 容器版本管理是确保应用稳定性的重要环节。镜像版本管理:使用语义化版本号(如 1.0.0、1.2.3)、使用标签区分不同版本(latest、stable、dev)、避免使用 latest 标签在生产环境、使用多阶段构建优化镜像。容器更新策略:滚动更新、蓝绿部署、金丝雀发布。版本回滚:保留旧版本镜像、使用 docker tag 创建版本标签、使用 docker-compose 或 Kubernetes 快速回滚。最佳实践:使用 CI/CD 自动化版本管理、记录每个版本的变更、定期清理旧版本镜像、使用镜像签名确保完整性。
服务端阅读 02月17日 23:42

Docker 容器生命周期管理包括哪些阶段?

Docker 容器生命周期管理包括创建、启动、停止、重启、删除等阶段。创建容器:docker create 或 docker run(创建并启动)。启动容器:docker start。停止容器:docker stop(优雅停止,发送 SIGTERM 信号)或 docker kill(强制停止,发送 SIGKILL 信号)。重启容器:docker restart。删除容器:docker rm(必须先停止容器)。查看容器状态:docker ps(运行中)、docker ps -a(所有容器)。容器退出码:0 表示正常退出,非 0 表示异常退出。使用 --restart-policy 控制容器退出后的自动重启行为。
服务端阅读 02月17日 23:42

Docker 容器端口映射的配置方法是什么?

Docker 容器端口映射用于将容器内部端口暴露到宿主机。使用 -p 或 --publish 参数,格式为:宿主机端口:容器端口。例如:docker run -p 8080:80 nginx 将容器的 80 端口映射到宿主机的 8080 端口。可以映射多个端口:-p 8080:80 -p 8443:443。使用 -P(大写)自动映射所有 EXPOSE 声明的端口到随机宿主机端口。查看端口映射:docker port 容器名。注意事项:宿主机端口已被占用会报错;使用 0.0.0.0:8080:80 绑定所有网卡,127.0.0.1:8080:80 只绑定本地。
服务端阅读 02月17日 23:42

Docker 容器网络性能优化的方法有哪些?

Docker 容器网络性能优化可以从多个方面入手:1)选择合适的网络模式(host 模式性能最好但隔离性差);2)使用自定义网络而非默认 bridge 网络;3)优化 MTU 设置以匹配网络环境;4)减少网络层级和跳数;5)使用 DNS 缓存减少域名解析延迟;6)启用网络性能调优参数(如 TCP Fast Open);7)使用 overlay 网络时优化 VXLAN 配置;8)合理设置容器网络带宽限制;9)使用服务网格优化服务间通信;10)监控网络性能指标及时发现问题。
服务端阅读 02月17日 23:42

Docker 容器自动扩缩容的实现方法是什么?

Docker 容器自动扩缩容可以根据负载动态调整容器数量。在 Docker Swarm 中,使用 docker service scale 服务名=副本数 手动扩缩容,或配合外部监控工具实现自动扩缩容。Kubernetes 提供 Horizontal Pod Autoscaler(HPA)基于 CPU、内存或自定义指标自动扩缩容。实现自动扩缩容需要:1)配置资源请求和限制;2)设置扩缩容指标和阈值;3)配置最小和最大副本数;4)选择合适的扩缩容策略(如稳定窗口、扩缩容比例)。自动扩缩容可以提高资源利用率,降低成本,同时保证服务性能。
服务端阅读 02月17日 23:41

Docker 容器调试的方法有哪些?

Docker 容器调试常用方法:1)使用 docker logs 查看容器日志;2)使用 docker exec -it 容器名 /bin/bash 进入容器交互式 shell;3)使用 docker inspect 查看容器详细配置和状态;4)使用 docker top 查看容器内运行的进程;5)使用 docker stats 查看容器资源使用情况;6)使用 docker port 查看端口映射;7)使用 docker diff 查看容器文件系统变化。对于启动失败的容器,可以使用 docker run --rm -it 镜像名 /bin/bash 手动启动调试。调试时建议使用 --cap-add=SYS_PTRACE 和 --security-opt seccomp=unconfined 参数以获得更多调试能力。
服务端阅读 02月17日 23:40

Docker 容器重启策略有哪些?

Docker 容器重启策略包括:no(不自动重启,默认)、on-failure(容器非正常退出时重启,可设置最大重试次数)、always(总是重启,除非手动停止)、unless-stopped(总是重启,除非手动停止或 Docker 守护进程重启)。使用 --restart 参数指定重启策略。在生产环境中,always 或 unless-stopped 是常用选择,确保服务高可用性。on-failure 适合可能临时失败但可以自动恢复的服务。