[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-docker-kak-napisat-dockerfile-dlya-spring-boot-prilozheniya":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},715,"kak-napisat-dockerfile-dlya-spring-boot-prilozheniya",17,"docker","Docker","🐳","Как написать Dockerfile для Spring Boot приложения?","Dockerfile для Spring Boot приложения варьируется от простого (JAR уже собран) до production-ready (multi-stage build с health check и непривилегированным пользователем).\n\n### Вариант 1: простой Dockerfile (JAR уже собран)\n\n```dockerfile\nFROM eclipse-temurin:17-jre-alpine\nWORKDIR \u002Fapp\nCOPY target\u002Fmyapp-0.0.1-SNAPSHOT.jar app.jar\nEXPOSE 8080\nENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]\n```\n\n### Вариант 2: production-ready multi-stage build с Maven\n\n\u003Cdetails>\u003Csummary>Полный Dockerfile\u003C\u002Fsummary>\n\n```dockerfile\n# Стадия сборки\nFROM maven:3.9-eclipse-temurin-17 AS build\nWORKDIR \u002Fapp\n\n# Кэширование зависимостей\nCOPY pom.xml .\nRUN mvn dependency:go-offline -B\n\n# Сборка\nCOPY src .\u002Fsrc\nRUN mvn package -DskipTests -B\n\n# Стадия запуска\nFROM eclipse-temurin:17-jre-alpine\nRUN addgroup -S appgroup && adduser -S appuser -G appgroup\nWORKDIR \u002Fapp\n\nCOPY --from=build \u002Fapp\u002Ftarget\u002F*.jar app.jar\nRUN chown -R appuser:appgroup \u002Fapp\nUSER appuser\n\nEXPOSE 8080\n\nHEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=40s \\\n  CMD wget --no-verbose --tries=1 --spider http:\u002F\u002Flocalhost:8080\u002Factuator\u002Fhealth || exit 1\n\nENTRYPOINT [\"java\", \\\n  \"-XX:+UseContainerSupport\", \\\n  \"-XX:MaxRAMPercentage=75.0\", \\\n  \"-Djava.security.egd=file:\u002Fdev\u002F.\u002Furandom\", \\\n  \"-jar\", \"app.jar\"]\n```\n\n\u003C\u002Fdetails>\n\n### Ключевые моменты\n\n- Используйте `eclipse-temurin` (бывший AdoptOpenJDK) — это стабильные production-ready образы\n- Для production берите `jre`, а не `jdk`\n- Образы на базе `alpine` значительно компактнее\n- Флаг `-XX:+UseContainerSupport` (включён по умолчанию с JDK 10+) позволяет JVM корректно определять лимиты CPU и памяти, установленные контейнером\n- `-XX:MaxRAMPercentage=75.0` — JVM будет использовать не более 75% доступной памяти контейнера под heap\n- `-Djava.security.egd=file:\u002Fdev\u002F.\u002Furandom` — ускоряет запуск за счёт использования неблокирующего источника энтропии\n\n> **На собеседовании:** будьте готовы написать Dockerfile для Spring Boot с нуля. Минимальный вариант — 5 строк (FROM, WORKDIR, COPY, EXPOSE, ENTRYPOINT). Для production добавьте: multi-stage build, непривилегированного пользователя, health check, JVM-флаги для контейнеров. Знание `-XX:MaxRAMPercentage` и `UseContainerSupport` показывает реальный опыт.","","middle",[15,16,17,18,7],"jvm","dockerfile","best-practices","spring-boot",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":35,"featuredSnippetReady":36},"Dockerfile для Spring Boot приложения — Gymterview","Dockerfile для Spring Boot: простой (5 строк) и production-ready (multi-stage, непривилегированный пользователь, health check, JVM-флаги MaxRAMPercentage).","Dockerfile для Spring Boot: от простого до production-ready — Gymterview","Два варианта Dockerfile для Spring Boot: минимальный и production-ready с multi-stage, USER, HEALTHCHECK и JVM-флагами.",[27,28,29,30,31,32,33,34],"Dockerfile Spring Boot","Docker Java","eclipse-temurin","MaxRAMPercentage","UseContainerSupport","multi-stage build","health check Docker","собеседование","Минимальный вариант (5 строк): FROM eclipse-temurin:17-jre-alpine, WORKDIR, COPY JAR, EXPOSE, ENTRYPOINT. Production-ready: multi-stage build (Maven + JRE), непривилегированный пользователь (USER appuser), HEALTHCHECK с Actuator, JVM-флаги: -XX:+UseContainerSupport (включён с JDK 10+), -XX:MaxRAMPercentage=75.0 (heap не вся память JVM), -Djava.security.egd=file:\u002Fdev\u002F.\u002Furandom (ускорение запуска).",true]