使用docker搭建java开发环境

提供一个极简的demo

  1. 编写hello world
import java.util.*;

public class Test {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        System.out.println(new Date());
    }
}
  1. 编写Dockerfile
touch dockerfile
# 基于java 9
FROM java:9
# 设置工作目录
WORKDIR /app
# 复制文件到工作目录
COPY . /app
# 设置java环境变量
ENV PATH=$PATH:$JAVA_HOME/bin
ENV JRE_HOME=${JAVA_HOME}/jre
ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
# 编译
RUN ["/usr/lib/jvm/java-9-openjdk-amd64/bin/javac","Test.java"]
# 运行
ENTRYPOINT ["/usr/lib/jvm/java-9-openjdk-amd64/bin/java","Test"]
  1. 构建镜像并执行
    执行以下命令来构建Docker镜像
docker build . -f dockerfile -t java-test:latest

构建成功后,运行

docker run java-test:latest

效果如图
在这里插入图片描述

Docker 资源限制

在"docker run"中,可以添加一下参数来限制容器资源使用:

docker run java-test:latest --cpus 4 --memory 100m

在这里插入图片描述
在这里插入图片描述

防止Java容器应用被杀

Docker Linux 容器使用Linux内核的CGroup机制来实现限制容器的资源(CPU,内存等)使用,当系统资源 不足时,系统就会根据优先级杀掉相关进程来维持系统的正常运行,导致常见的OOM错误。

为了 确保java容器应用正常运行,需要确保JVM获取可用的正确的CPU核心数和RAM容量,以相应地调整内部参数,在有限的资源下正常运行。

在OpenJDK8及更高版本可用正确检测容器的CPU内核数量和可用RAM,在OpenJDK11中,这是默认打开的。在8,9,10中,必须使用一下配置选项启用容器限制RAM的检测,否则JVM将使用主机配置而不是容器资源配置(其并不识别容器):

java --XX:+UnlockExperimentalVMOptions --XX:+UseCGruopMemoryLimitForHeap

除此之外,还可以用 “-Xmx” 参数指定JVM的最大内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值