Ich habe eine Spring Boot-Anwendung, die einen Dienst implementiert, den ich in einem Docker-Container ausführen möchte. Ich habe die Richtlinie der offiziellen Spring docs gefolgt, die eine DockerFile ähnlich wie diese erstellen vorschlagen:Begrenzen der JVM-Speicherbelegung in einem Docker-Container
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD gs-spring-boot-docker-0.1.0.jar app.jar
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
Dann, wenn das Bild auf Docker geschoben ich Docker Compose es auf diese Weise zu starten:
spring-boot-docker:
ports:
- "80:80"
expose:
- "80"
image: my-repo/spring-boot-docker:0.1.0-SNAPSHOT
container_name: spring-boot-docker
environment:
JAVA_OPTS: '-Xmx64m'
Hier habe ich die JAVA_OPTS
Variable, die die Speicherzuweisung begrenzt, jedoch, wenn ich docker stats spring-boot-docker
ausführen, ist der vom Container genommene Speicher exzessiv (ich verstehe den gesamten von der JVM genommenen Speicher viel mehr als 64M, aber in diesem Fall ist völlig grenzenlos).
Ich habe auch mit der mem_limit
param versucht, aber das verlangsamt die Anwendung spürbar.
Bitte beachten Sie, dass der Wechsel von _exec_ zu _shell_ von "ENTRYPOINT" auch den Nebeneffekt hat, {CMD', Befehlszeilenargumente} zu deaktivieren, so dass Ihr Container wie 'docker run --spring.profiles.active ausgeführt wird = production' ignoriert das Profil einfach. –
qerub