当前位置: 首页 > 工具软件 > docker-alpine > 使用案例 >

Docker - Dockerfile(alpine + openjdk8 )

吕天逸
2023-12-01

    一直找不到合适的带有jdk的docker镜像,要不就是动辄500M左右的基础镜像,要不就是100M左右,但是里面缺失依赖包,后来找到一个制作好之后只有105M的基础镜像,而且跑大型的java程序也是没有问题的。

FROM alpine:3.9
MAINTAINER docker-build
ENV LANG=C.UTF-8 \
    JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk \
    PATH=$PATH:/usr/lib/jvm/java-1.8-openjdk/jre/bin \
    run_foreground=true
RUN apk add --no-cache openjdk8 && rm -f /etc/apk/repositories

   但是这个Dockerfile的制作过程非常慢,不知道是我们服务器的配置源有问题还算是真的网络差。。。下载要1个小时左右,用起来还是挺不错的,作为其他java的基础镜像还是蛮好用的。。。

    同时在CSDN上上传了一份,可以下载使用:https://download.csdn.net/download/ITzhangdaopin/12369560

$ docker images
REPOSITORY        TAG                         IMAGE ID            CREATED             SIZE
openjdk         1.8.0_242                   f1b6c0810409        11 days ago         105 MB

$ docker run -d --name alpine_jdk8 f1b6c0810409  sh -c "tail -f /dev/null"
8cc12d1bb0707e33ae89c818b2687d3f013cadfasfafdafa5cff052a148f58

$ docker ps -a |grep jdk8
8cc12d1bb070    f1b6c0810409   "sh -c 'tail -f /d..."   9 seconds ago       Up 8 seconds                                                                                                      alpine_jdk8

$ docker exec -it 8cc12d1bb070 sh
/ # java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (IcedTea 3.15.0) (Alpine 8.242.08-r0)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

/ # vi -version
vi: unrecognized option: v
BusyBox v1.29.3 (2019-01-24 07:45:07 UTC) multi-call binary.

Usage: vi [OPTIONS] [FILE]...

Edit FILE

        -c CMD  Initial command to run ($EXINIT also available)
        -R      Read-only
        -H      List available features

将启动的docker容器制作成快照;

$ docker export 8cc12d1bb070 > alpine_jdk8.tar

$  ll |grep alpine_jdk8.tar
-rw-r--r--. 1 root     root     106116608 Apr 28 07:09 alpine_jdk8.tar

这样输出的快照可以直接在其他环境中直接使用命令,将快照重新导成镜像;

$ cat alpine_jdk8.tar |docker import - openjdk:1.8.0_242                  #导入容器快照作为新的镜像

直接在Dockerfile中直接引用即可;

FROM openjdk:1.8.0_242
#FROM java8:centos7
MAINTAINER daopinz
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
# VOLUME /tmp
#设置工作目录,在该指令后的 RUN、CMD、ENTRYPOINT, COPY、ADD 指令都会在该目录执行。如果该目录不存在,则会创建!
WORKDIR /opt/plugin/udp-server/
# 将jar包添加到容器中并更名为app.jar
ADD udp-server-0.0.2-SNAPSHOT.jar app.jar
# 运行jar包
RUN sh -c 'mkdir logs' &&\
    sh -c 'mkdir config' &&\
    sh -c 'chmod -R 777 logs/' &&\
    sh -c 'chmod -R 777 config/'
ENTRYPOINT ["java","-Xms512m","-Xmx512m","-Xmn256m","-Xss256k","-server","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

 

 类似资料: