Dockerコンテナで実行したいサービスを実装しているSpring Bootアプリケーションがあります。画像がドッカーにプッシュされた後、私はそれをこのように起動するDocker Composeを使用するとDockerコンテナでのJVMメモリ消費の制限
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"]
:私はこれに似たDockerFileを作成することをお勧め公式Spring docsのガイドラインに従ってきた
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'
ここではメモリ割り当てを制限する変数JAVA_OPTS
を持っていますが、docker stats spring-boot-docker
を実行すると、コンテナによって消費されるメモリが過大になります(私はJVMで取られたメモリの合計が64Mをはるかに上回っているかもしれないが、ケースは完全に無限です)。
私もmem_limit
paramで試してみましたが、これはアプリケーションの速度を著しく低下させます。
'ENTRYPOINT'の_exec_形式から_shell_形式に切り替えると、{' CMD'、コマンドライン引数}を無効にするという副作用があるので、 'docker run --spring.profiles.active = production'はプロファイルを無視します。 –
qerub