开发手册 欢迎您!
软件开发者资料库

Docker 安装Java编译环境

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。本文主要介绍Docker 安装及配置Java编译环境。

1、安装Docker

参考文档:

安装Docker

Docker 入门教程

2、Java的Docker镜像

镜像包含Java运行时(JRE)和Java开发工具包(JDK),方便地打包成独立的Docker标记。获取Java的docker镜像,有两种方式,一种是通过docker pull命令获取,另一种是通过Dockerfile文件创建,具体如下,

1)使用docker pull命令

使用docker pull命令获取https://hub.docker.com/中存储公共镜像,如下,

docker pull frolvlad/alpine-java:jdk8-slim

注意:使用docker run命令时,如果镜像本地不存会自动调用docker pull获取镜像。

2)使用Dockerfile文件创建

Dockerfile文件:

FROM frolvlad/alpine-glibc:alpine-3.9ENV JAVA_VERSION=8 \    JAVA_UPDATE=202 \    JAVA_BUILD=08 \    JAVA_PATH=1961070e4c9b4e26a04e7f5a083f551e \    JAVA_HOME="/usr/lib/jvm/default-jvm"RUN apk add --no-cache --virtual=build-dependencies wget ca-certificates unzip && \    cd "/tmp" && \    wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \        "http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION}u${JAVA_UPDATE}-b${JAVA_BUILD}/${JAVA_PAT..." && \    tar -xzf "jdk-${JAVA_VERSION}u${JAVA_UPDATE}-linux-x64.tar.gz" && \    mkdir -p "/usr/lib/jvm" && \    mv "/tmp/jdk1.${JAVA_VERSION}.0_${JAVA_UPDATE}" "/usr/lib/jvm/java-${JAVA_VERSION}-oracle" && \    ln -s "java-${JAVA_VERSION}-oracle" "$JAVA_HOME" && \    ln -s "$JAVA_HOME/bin/"* "/usr/bin/" && \    rm -rf "$JAVA_HOME/"*src.zip && \    rm -rf "$JAVA_HOME/lib/missioncontrol" \           "$JAVA_HOME/lib/visualvm" \           "$JAVA_HOME/lib/"*javafx* \           "$JAVA_HOME/jre/lib/plugin.jar" \           "$JAVA_HOME/jre/lib/ext/jfxrt.jar" \           "$JAVA_HOME/jre/bin/javaws" \           "$JAVA_HOME/jre/lib/javaws.jar" \           "$JAVA_HOME/jre/lib/desktop" \           "$JAVA_HOME/jre/plugin" \           "$JAVA_HOME/jre/lib/"deploy* \           "$JAVA_HOME/jre/lib/"*javafx* \           "$JAVA_HOME/jre/lib/"*jfx* \           "$JAVA_HOME/jre/lib/amd64/libdecora_sse.so" \           "$JAVA_HOME/jre/lib/amd64/"libprism_*.so \           "$JAVA_HOME/jre/lib/amd64/libfxplugins.so" \           "$JAVA_HOME/jre/lib/amd64/libglass.so" \           "$JAVA_HOME/jre/lib/amd64/libgstreamer-lite.so" \           "$JAVA_HOME/jre/lib/amd64/"libjavafx*.so \           "$JAVA_HOME/jre/lib/amd64/"libjfx*.so && \    rm -rf "$JAVA_HOME/jre/bin/jjs" \           "$JAVA_HOME/jre/bin/keytool" \           "$JAVA_HOME/jre/bin/orbd" \           "$JAVA_HOME/jre/bin/pack200" \           "$JAVA_HOME/jre/bin/policytool" \           "$JAVA_HOME/jre/bin/rmid" \           "$JAVA_HOME/jre/bin/rmiregistry" \           "$JAVA_HOME/jre/bin/servertool" \           "$JAVA_HOME/jre/bin/tnameserv" \           "$JAVA_HOME/jre/bin/unpack200" \           "$JAVA_HOME/jre/lib/ext/nashorn.jar" \           "$JAVA_HOME/jre/lib/jfr.jar" \           "$JAVA_HOME/jre/lib/jfr" \           "$JAVA_HOME/jre/lib/oblique-fonts" && \    wget --header "Cookie: oraclelicense=accept-securebackup-cookie;" \        "http://download.oracle.com/otn-pub/java/jce/${JAVA_VERSION}/jce_policy-${JAVA_VERSION}.zip" && \    unzip -jo -d "${JAVA_HOME}/jre/lib/security" "jce_policy-${JAVA_VERSION}.zip" && \    rm "${JAVA_HOME}/jre/lib/security/README.txt" && \    apk del build-dependencies && \    rm "/tmp/"* && \    \    echo 'public class Main { public static void main(String[] args) { System.out.println("Java code is running fine!"); } }' > Main.java && \    javac Main.java && \    java Main && \    rm -r "/tmp/"*

生成本地镜像:

docker build -t wonhero/alpine-java:jdk8-slim .

3、Java的Docker容器

创建容器可以使用https://hub.docker.com/上的frolvlad/alpine-java镜像,也可以使用上面我们通过Dockerfile文件创建的本地镜像。

1)使用frolvlad/alpine-java镜像

$ echo 'public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }' > Main.java$ docker run --rm -v "$(pwd)":/mnt --workdir /mnt frolvlad/alpine-java:jdk8-slim sh -c "javac Main.java && java Main"

2)使用wonhero/alpine-java镜像

$ echo 'public class Main { public static void main(String[] args) { System.out.println("Hello World"); } }' > Main.java$ docker run --rm -v "$(pwd)":/mnt --workdir /mnt wonhero/alpine-java:jdk8-slim sh -c "javac Main.java && java Main"

相关文档:

Docker 构建自定义镜像和Dockerfile文件

Docker 容器使用的命令