一张图片切块做网站背景邯山专业做网站

张小明 2026/1/13 12:40:55
一张图片切块做网站背景,邯山专业做网站,域名怎么建设网站,wordpress基于什么语言在微服务架构盛行的当下#xff0c;Spring Boot 因简化开发、快速迭代的特性成为主流开发框架。而容器化部署#xff08;Docker#xff09;与编排#xff08;K8s#xff09;则解决了微服务部署中的环境一致性、弹性伸缩、故障自愈等核心问题。本文将从实践出发#xff0c…在微服务架构盛行的当下Spring Boot 因简化开发、快速迭代的特性成为主流开发框架。而容器化部署Docker与编排K8s则解决了微服务部署中的环境一致性、弹性伸缩、故障自愈等核心问题。本文将从实践出发详细讲解 Spring Boot 应用从 Docker 镜像构建到 K8s 部署的完整流程包含可直接复用的示例代码并拓展镜像优化、K8s 进阶配置等实用技巧帮助开发者快速掌握容器化部署的最佳实践。一、前置知识与环境准备在开始实践前需确保本地环境已完成以下工具的安装与配置避免后续操作中出现环境兼容问题JDK 8Spring Boot 应用开发与运行基础需配置 JAVA_HOME 环境变量Maven/Gradle项目构建工具本文以 Maven 为例Docker容器化核心工具支持镜像构建与容器运行Windows 建议使用 WSL2 后端Mac 直接安装 Docker DesktopK8s 集群用于应用编排本地可使用 Minikube、Kind 或 Docker Desktop 内置的 K8s生产环境建议使用云厂商集群阿里云 ACK、腾讯云 TKE 等kubectlK8s 命令行工具用于与 K8s 集群交互需配置集群访问权限~/.kube/config验证环境执行docker --version、kubectl cluster-info命令若输出正常则说明环境配置完成。二、Spring Boot 示例项目搭建为简化演示我们搭建一个基础的 Spring Boot Web 项目提供一个测试接口用于后续容器化验证。2.1 项目初始化使用 Spring Initializr访问 Spring Initializr配置如下ProjectMaven ProjectLanguageJavaSpring Boot2.7.x稳定版DependenciesSpring Web核心依赖用于提供 Web 接口下载项目后解压导入 IDEIntelliJ IDEA 或 Eclipse。2.2 编写测试接口在项目包下创建controller目录新增HelloController.java类提供一个简单的 GET 接口packagecom.example.springbootdocker.controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/** * 测试接口控制器 */RestControllerRequestMapping(/api)publicclassHelloController{/** * 测试接口返回容器化部署成功信息 * return 字符串响应 */GetMapping(/hello)publicStringhello(){returnSpring Boot 容器化部署成功Docker K8s 最佳实践;}}2.3 本地测试项目运行项目主启动类SpringBootDockerApplication.java启动成功后访问http://localhost:8080/api/hello若能正常返回响应内容则说明项目搭建无误。三、Docker 构建 Spring Boot 镜像核心步骤Docker 镜像作为容器的模板是容器化部署的基础。构建 Spring Boot 镜像的核心是编写 Dockerfile定义镜像的构建流程。本节将讲解两种常用的构建方式基础构建法与多阶段构建法推荐可减小镜像体积。3.1 基础构建法适合入门3.1.1 编写 Dockerfile在项目根目录下创建Dockerfile文件无后缀内容如下每一行都附带详细注释### 第一步指定基础镜像Java 运行环境 # 选择 openjdk 8 镜像与项目 JDK 版本一致alpine 版本体积更小 FROM openjdk:8-jre-alpine ### 第二步设置工作目录容器内的目录类似本地的工作文件夹 WORKDIR /app ### 第三步复制本地构建好的 Jar 包到容器内 # 注意此处 Jar 包名称需与 Maven 构建后的名称一致可在 pom.xml 中配置固定名称 # 格式COPY 本地文件路径 容器内目标路径 COPY target/spring-boot-docker-0.0.1-SNAPSHOT.jar app.jar ### 第四步暴露容器端口仅声明不实际映射用于文档说明 # 与 Spring Boot 项目配置的 server.port 一致默认 8080 EXPOSE 8080 ### 第五步设置容器启动命令运行 Jar 包 # ENTRYPOINT 用于指定容器启动的固定命令不可被覆盖 ENTRYPOINT [java, -jar, app.jar]3.1.2 配置 Maven 固定 Jar 包名称默认情况下Maven 构建的 Jar 包名称包含版本号和 SNAPSHOT 后缀不利于 Dockerfile 中统一引用。可在pom.xml中添加配置固定 Jar 包名称buildlt;finalNamegt;spring-boot-applt;/finalNamegt;!-- 固定 Jar 包名称为 spring-boot-app.jar --pluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build3.1.3 构建 Docker 镜像首先使用 Maven 构建项目生成 Jar 包mvn clean package -Dmaven.test.skiptrue# 跳过测试快速构建构建成功后项目根目录的target文件夹下会生成spring-boot-app.jar文件。接着执行 Docker 构建命令# 格式docker build -t 镜像名称:版本号 构建上下文路径. 表示当前目录docker build -t spring-boot-app:v1.0.构建完成后执行docker images命令若能看到spring-boot-app:v1.0镜像则说明构建成功。3.1.4 本地运行 Docker 容器验证使用构建好的镜像启动容器映射本地端口 8080 到容器端口 8080docker run -d -p8080:8080 --name spring-boot-container spring-boot-app:v1.0参数说明-d后台运行容器-p 8080:8080端口映射格式为 本地端口:容器端口–name指定容器名称便于后续管理验证访问http://localhost:8080/api/hello若返回正常响应说明容器运行无误。可通过docker logs spring-boot-container查看容器运行日志。3.2 多阶段构建法推荐镜像瘦身基础构建法存在一个问题构建过程依赖本地已构建好的 Jar 包且若本地环境与构建环境不一致可能导致镜像构建失败。多阶段构建法可在 Dockerfile 中完成 “项目构建 → 生成 Jar 包 → 构建运行镜像” 的全流程且能大幅减小镜像体积仅保留运行所需的 JRE 环境删除构建依赖。3.2.1 编写多阶段 Dockerfile### 第一阶段构建阶段使用 Maven 镜像构建项目生成 Jar 包 FROM maven:3.6.3-openjdk-8 AS build # 命名为 build 阶段后续可引用 WORKDIR /project COPY pom.xml . # 先复制 pom.xml利用 Docker 缓存机制依赖不变时无需重新下载 COPY src ./src # 复制项目源码 RUN mvn clean package -Dmaven.test.skiptrue # 构建项目生成 Jar 包到 target 目录 ### 第二阶段运行阶段使用轻量的 JRE 镜像仅保留运行所需文件 FROM openjdk:8-jre-alpine WORKDIR /app # 从构建阶段复制 Jar 包到当前阶段仅复制最终产物减小镜像体积 COPY --frombuild /project/target/spring-boot-app.jar app.jar EXPOSE 8080 ENTRYPOINT [java, -jar, app.jar]优势说明多阶段构建的镜像体积通常比基础构建法小 50% 以上Maven 镜像约 800MBJRE 镜像仅 100MB 左右更适合生产环境部署。3.2.2 构建并验证多阶段镜像docker build -t spring-boot-app:v2.0.# 构建多阶段镜像版本号设为 v2.0docker run -d -p8081:8080 --name spring-boot-container-v2 spring-boot-app:v2.0访问http://localhost:8081/api/hello验证容器运行正常。执行docker images对比 v1.0 和 v2.0 镜像体积可明显看到 v2.0 更小。四、K8s 部署 Spring Boot 应用最佳实践Docker 解决了 “打包镜像” 的问题而 K8s 则解决了 “镜像编排” 的问题如多实例部署、负载均衡、故障自愈、弹性伸缩等。本节将讲解 K8s 部署的核心资源Deployment、Service并提供完整的 YAML 配置文件。4.1 K8s 核心资源说明部署 Spring Boot 应用需用到两个核心资源Deployment用于管理 PodK8s 最小部署单元包含一个或多个容器支持创建、更新、回滚 Pod实现故障自愈Pod 异常时自动重启和扩缩容。Service用于暴露 Pod 对外访问解决 Pod 动态变化IP 不固定的问题。通过 Service 可实现负载均衡分发请求到多个 Pod 实例。4.2 编写 Deployment YAML 配置在项目根目录下创建deployment.yaml文件内容如下附带详细注释apiVersion:apps/v1# API 版本Deployment 属于 apps 组v1 为稳定版kind:Deployment# 资源类型Deploymentmetadata:name:spring-boot-deploy# Deployment 名称labels:app:spring-boot-app# 标签用于关联 Service 和 Podspec:replicas:2# 部署的 Pod 实例数量生产环境建议至少 2 个保证高可用selector:matchLabels:app:spring-boot-app# 选择器匹配带有 appspring-boot-app 标签的 Podtemplate:metadata:labels:app:spring-boot-app# Pod 标签必须与 selector.matchLabels 一致spec:containers:-name:spring-boot-container# 容器名称image:spring-boot-app:v2.0# 容器镜像本地镜像若为集群需推送至镜像仓库ports:-containerPort:8080# 容器暴露的端口与 Spring Boot 端口一致resources:# 资源限制避免单个 Pod 占用过多资源影响其他应用requests:# 最小资源需求K8s 调度时确保节点有足够资源cpu:100m# 100m 0.1 CPUmemory:256Mi# 256MB 内存limits:# 最大资源限制超出则会被 K8s 限制或终止cpu:500mmemory:512MilivenessProbe:# 存活探针检测容器是否存活失败则重启容器httpGet:path:/actuator/health# Spring Boot Actuator 健康检查接口需添加依赖port:8080initialDelaySeconds:60# 容器启动后延迟 60 秒开始探测periodSeconds:10# 探测间隔 10 秒readinessProbe:# 就绪探针检测容器是否就绪失败则移除 Service 转发httpGet:path:/actuator/healthport:8080initialDelaySeconds:30periodSeconds:54.2.1 添加 Spring Boot Actuator 依赖上述配置中使用了/actuator/health健康检查接口需在pom.xml中添加 Actuator 依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency并在application.yml中配置 Actuator 暴露健康检查接口management:endpoints:web:exposure:include:health# 暴露 health 接口默认仅暴露 /actuator/healthendpoint:health:show-details:always# 显示健康检查详细信息开发环境用生产环境建议关闭重新构建镜像docker build -t spring-boot-app:v2.0 .确保健康检查接口可用。4.3 编写 Service YAML 配置创建service.yaml文件用于暴露 Deployment 管理的 Pod 对外访问配置如下apiVersion:v1# API 版本Service 属于核心组v1 为稳定版kind:Service# 资源类型Servicemetadata:name:spring-boot-service# Service 名称spec:type:NodePort# Service 类型NodePort适合测试环境暴露节点端口供外部访问# type: LoadBalancer # 生产环境推荐使用云厂商会自动创建负载均衡器selector:app:spring-boot-app# 选择器匹配带有 appspring-boot-app 标签的 Pod与 Deployment 一致ports:-port:8080# Service 暴露的端口集群内部访问端口targetPort:8080# 目标端口Pod 中容器暴露的端口与 Deployment 一致nodePort:30080# 节点端口外部访问端口范围30000-32767可自定义注意NodePort 类型仅适合测试环境生产环境建议使用 LoadBalancer 类型云厂商提供或 Ingress统一入口管理。4.4 执行 K8s 部署4.4.1 部署 Deployment 和 Service使用kubectl apply命令执行部署需确保 K8s 集群正常运行kubectl apply -f deployment.yaml# 部署 Deploymentkubectl apply -f service.yaml# 部署 Service4.4.2 查看部署状态执行以下命令查看部署状态确认所有资源正常运行kubectl get deployments# 查看 Deployment 状态READY 应为 2/2代表 2 个 Pod 就绪kubectl get pods# 查看 Pod 状态STATUS 应为 Runningkubectl get services# 查看 Service 状态确认 NodePort 为 30080若 Pod 状态异常可通过kubectl describe pod pod名称查看详细日志排查问题常见问题镜像拉取失败、端口占用、健康检查失败等。4.4.3 验证应用访问本地环境Minikube/Kind/Docker Desktop K8s直接访问http://localhost:30080/api/hello若返回响应内容则说明部署成功。集群环境云厂商访问http://节点IP:30080/api/hello需确保节点 30080 端口对外开放。五、关键拓展镜像优化与 K8s 进阶配置本节将拓展一些实用技巧帮助优化容器化部署效果适配生产环境需求。5.1 Docker 镜像优化技巧使用更轻量的基础镜像优先选择 alpine 版本如openjdk:8-jre-alpine或使用 Distroless 镜像仅包含应用和运行时依赖体积更小安全性更高。清理构建残留多阶段构建中在构建阶段清理 Maven 依赖缓存如RUN mvn clean package rm -rf ~/.m2减小构建阶段镜像体积。镜像分层缓存Dockerfile 中将不变的内容如复制 pom.xml、下载依赖放在前面变化的内容如复制源码、构建项目放在后面利用 Docker 分层缓存机制加速镜像构建。使用非 root 用户运行容器默认情况下容器以 root 用户运行存在安全风险。可在 Dockerfile 中创建普通用户切换用户运行容器# 在运行阶段添加以下配置 RUN addgroup -S appgroup adduser -S appuser -G appgroup # 创建用户组和用户 USER appuser # 切换为普通用户运行容器5.2 K8s 进阶配置技巧配置 ConfigMap 和 Secret将 Spring Boot 配置文件application.yml或敏感信息数据库密码、密钥存储在 K8s ConfigMap/Secret 中避免硬编码到镜像中实现配置动态更新。示例ConfigMap 存储 application.ymlapiVersion: v1 kind: ConfigMap metadata: name: spring-boot-config data: application.yml: | server: port: 8080 management: endpoints: web: exposure: include: health在 Deployment 中挂载 ConfigMapspec: template: spec: containers: - name: spring-boot-container image: spring-boot-app:v2.0 volumeMounts: - name: config-volume mountPath: /app/config # 挂载路径Spring Boot 会自动读取 config 目录下的配置 volumes: - name: config-volume configMap: name: spring-boot-config # 关联 ConfigMap 名称实现弹性伸缩通过 K8s HPAHorizontal Pod Autoscaler实现 Pod 弹性伸缩根据 CPU 使用率或自定义指标自动增减 Pod 实例数量apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: spring-boot-hpaspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: spring-boot-deploy # 关联 Deployment 名称minReplicas: 2 # 最小 Pod 数量maxReplicas: 10 # 最大 Pod 数量metrics:type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70 # CPU 使用率超过 70% 时自动扩容配置日志收集生产环境需统一收集容器日志推荐使用 ELK 栈Elasticsearch Logstash Kibana或云厂商日志服务。可在 Deployment 中配置日志输出路径挂载日志卷便于日志收集spec: template: spec: containers: - name: spring-boot-container image: spring-boot-app:v2.0 volumeMounts: - name: log-volume mountPath: /app/logs # 日志输出路径 volumes: - name: log-volume emptyDir: {} # 临时目录生产环境建议使用 PersistentVolume 持久化六、总结本文详细讲解了 Spring Boot 应用容器化部署的完整流程从基础环境准备、示例项目搭建到 Docker 镜像构建基础构建法与多阶段构建法再到 K8s 核心资源Deployment、Service的部署与验证最后拓展了镜像优化、K8s 进阶配置等实用技巧。通过本文的实践开发者可快速掌握 DockerK8s 部署 Spring Boot 应用的最佳实践解决环境一致性、弹性伸缩、故障自愈等核心问题。在实际生产环境中还需结合业务需求进一步优化配置如使用 Ingress 统一入口、配置监控告警、实现 CI/CD 自动部署等提升应用的可用性和可维护性。希望本文能为开发者的容器化实践提供有力的参考和帮助。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

天津市住房和城乡建设厅官方网站太原百度seo网站建设

FaceFusion在心理治疗中的辅助作用研究设想 在临床心理干预实践中,一个长期存在的难题是:许多患者——尤其是儿童、创伤幸存者或社交障碍个体——难以通过语言准确表达内在情绪与自我认知。传统的谈话疗法依赖于言语叙述,但当一个人连“我是谁…

张小明 2025/12/31 13:28:19 网站建设

学生网页制作用仿站软件做的网站seo如何

雀魂Mod Plus完全攻略:轻松解锁全角色与装扮的终极指南 【免费下载链接】majsoul_mod_plus 雀魂解锁全角色、皮肤、装扮等,支持全部服务器。 项目地址: https://gitcode.com/gh_mirrors/ma/majsoul_mod_plus 雀魂Mod Plus是一款专为《雀魂》玩家设…

张小明 2026/1/4 2:57:06 网站建设

淘宝上面如何做网站合肥网站建设哪个公司做得比较好

工业生产执行系统(MES)作为制造业数字化转型的核心枢纽,正在重塑现代工厂的生产管理模式。这一系统通过连接企业计划层与车间控制层,实现了生产过程的透明化、精细化和智能化管理。随着工业4.0时代的到来,MES系统已从可…

张小明 2026/1/1 1:04:17 网站建设

外链 推网站怎么做爱站网seo综合查询工具

Git 撤销与重做操作全解析 在使用 Git 进行版本控制时,我们难免会遇到需要撤销或重做提交的情况。本文将详细介绍 Git 中撤销和重做提交的各种方法及操作步骤。 完全撤销提交 在某些情况下,我们希望某个提交仿佛从未发生过,这时可以使用 git reset 命令来有效丢弃该提交…

张小明 2025/12/31 17:21:32 网站建设

江阴网站优化公司wordpress自定义文章类型模板

在 PCB 组装和返修领域,BGA(球栅阵列)器件的重焊是技术门槛最高的工序之一。BGA 器件引脚隐藏在底部,焊点不可见,重焊过程中温度、压力、时间的微小偏差,都可能导致虚焊、连锡、焊球脱落等缺陷。作为深耕 P…

张小明 2026/1/6 12:53:31 网站建设

湖北建设厅行政服务中心网站手机网站建设哪个

macOS菜单栏终极整理方案:Ice开源工具深度使用指南 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice 随着macOS应用程序的日益增多,菜单栏拥挤已经成为影响工作效率的常见问题。…

张小明 2026/1/1 13:20:06 网站建设