面试题答案
一键面试Docker显著特点
- 轻量级:基于Linux容器技术,启动和运行速度快,占用资源少。例如,一个简单的Web应用容器可能只需几MB内存即可运行。
- 隔离性:每个容器相互隔离,拥有自己独立的文件系统、进程空间等,应用之间互不干扰。比如一个Node.js应用容器和一个Python应用容器可以在同一主机上稳定运行,互不影响。
- 可移植性:容器镜像可以在不同的环境(如开发、测试、生产)中无缝迁移。如开发环境构建的镜像可直接部署到测试和生产环境。
Kubernetes显著特点
- 自动化部署:可以根据配置文件自动创建、扩展和更新容器化应用。例如,通过编写Deployment配置文件,Kubernetes可自动创建指定数量的Pod运行微服务。
- 负载均衡:提供内部和外部负载均衡功能。比如Service资源可以将流量均匀分配到多个Pod上,确保服务的高可用性。
- 自我修复:当Pod出现故障时,Kubernetes会自动重启或重新创建Pod。如某个运行数据库服务的Pod意外终止,Kubernetes会立刻启动新的Pod来替代。
Docker在微服务部署中的主要功能
- 封装应用:将微服务及其依赖打包成镜像,保证环境一致性。例如把一个Java微服务及其所需的JDK、依赖库等封装成Docker镜像。
- 快速启动:以容器形式快速启动微服务实例,实现快速部署。比如在测试环境需要快速搭建多个微服务实例进行联调,Docker可迅速启动这些实例。
Kubernetes在微服务部署中的主要功能
- 资源管理:对集群内资源(CPU、内存等)进行合理分配和调度。如为不同的微服务设置资源配额,保证重要微服务有足够资源运行。
- 服务发现与注册:通过Service实现微服务之间的发现与通信。例如一个订单微服务要调用库存微服务,可通过Kubernetes的Service找到库存微服务的地址。
相互协作方式
- 构建镜像:开发人员使用Dockerfile构建Docker镜像,将微服务及其依赖打包。例如构建一个Spring Boot微服务的Docker镜像。
- 部署到Kubernetes:将Docker镜像推送到镜像仓库,Kubernetes从镜像仓库拉取镜像,并根据配置文件(如Deployment、Service等)在集群中创建和管理容器化微服务。比如通过Kubernetes的Deployment资源创建多个运行该Spring Boot微服务的Pod,并通过Service暴露服务。
- 监控与运维:Kubernetes监控容器状态,发现问题时进行自我修复,Docker提供容器内部运行时信息协助故障排查。例如Kubernetes检测到某个Pod异常,可查看Docker容器日志定位问题。