八股已死、场景当立(场景篇-Docker) - 详解

 废话不多说,今天更新场景篇-Docker的知识点,做好了开始发车喽!

 一、场景篇-Docker

1、Q:如何为Java应用编写高效的Dockerfile?请说明多阶段构建的优势及关键指令的作用?

A:多阶段构建可减少最终镜像大小,分离构建环境与运行环境。

     关键指令:

  • FROM:指定基础镜像,多阶段时每个阶段需单独声明。
  • COPY --chown:复制文件并设置权限,避免运行时权限问题。
  • RUN:执行命令,合并多条命令减少镜像层数(如RUN apt update && apt install -y maven)。
  • 最终阶段仅包含运行所需依赖(如JRE),剔除构建工具(如Maven、JDK)。

Java示例(Spring Boot应用)‍:

# 构建阶段
FROM maven:3.8-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src/ ./src/
RUN mvn package -DskipTests
# 运行阶段
FROM openjdk:17-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
 # 避免root权限运行
USER nobody
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

优势:最终镜像仅包含JRE和JAR文件,体积减少50%以上。


2、Q: 如何通过Docker Compose编排Java微服务(如Spring Boot)与MySQL、Redis的依赖启动顺序

A:使用depends_on结合健康检查(healthcheck)确保服务就绪后再启动应用。MySQL需配置健康检查命令验证数据库可连接。:

docker-compose.yml示例:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
    healthcheck:
      test: ["CMD", "mysqladmin", "ping
posted @ 2025-11-22 21:15  yangykaifa  阅读(0)  评论(0)    收藏  举报