使用openjdk docker镜像执行Java程序

背景

我们可以不必在宿主机上安装JDK或JRE,借助OpenJDK的Docker镜像,来运行一个可执行Java程序(SpringBoot Web应用)。

首先从DockerHub上拉取OpenJDK的镜像,因为我使用的技术栈还是Java 8,因此这里的镜像tag使用了8。

1
docker pull openjdk:8

使用这个镜像有3个方案:

  • 将Jar包挂载到openjdk:8的容器中一个目录中
  • 将Jar包复制到一个Docker卷中, 然后挂载这个卷到容器
  • 将Jar包构建到一个基于openjdk:8镜像的新镜像中

方案一

1
2
3
4
5
# 切换到Jar包所在目录
cd /root/workspace

# 将这个可执行Jar包挂载到容器的根目录中
docker run --rm -it -v $("pwd")/easyshare-1.0.0.jar:/easyshare.jar -p 8080:8080 openjdk:8 java -jar easyshare.jar

方案二

1
2
3
4
5
6
7
8
9
# 创建一个Docker Volume
docker volume create java_app

# 将Jar包上传到Volume中
# Linux: docker volume inspect java_app
# Windows: \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

# 启动镜像,挂载这个volume
docker run --rm -it -v java_app:/mnt openjdk:8 /bin/bash

方案三

在Jar包的同级目录下,新建一个Dockerfile文件:

1
2
3
4
5
6
7
FROM openjdk:8

MAINTAINER TONY

ADD easyshare-1.0.0.jar easyshare.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "easyshare.jar"]
1
2
3
4
5
# 在Dockerfile的同级目录下执行如下命令
docker build -t easyshare:1.0.0 .

# 运行容器
docker run --rm -it -p 8080:8080 easyshare:1.0.0 /bin/bash

参考

CentOS安装OpenJDK 8:

1
yum install java-1.8.0-openjdk

Windows 10环境Docker Volume的位置:

1
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\