dockerfile.7z

一、基于 Alpine + JDK8 制作镜像

项目结构

01.png

Dockerfile 文件内容

  1. FROM alpine:latest
  2. MAINTAINER ZHIXING<xxxxxxxx.com>
  3. ## java 应用工作目录
  4. RUN mkdir /app
  5. ## 应用存放路径
  6. RUN mkdir /app/application
  7. ## 日志存放目录
  8. RUN mkdir /app/logs
  9. ## 配置文件存放目录
  10. RUN mkdir /app/config
  11. ## 执行脚本
  12. RUN mkdir /app/sh
  13. ## 默认执行脚本
  14. COPY start.sh /app/sh/start.sh
  15. ## 空应用
  16. COPY app.jar /app/application/app.jar
  17. ## 空配置
  18. COPY application.properties /app/config/application.properties
  19. ## 添加 JDK 1.8
  20. ADD jdk1.8.0_191.tar.gz /usr/local
  21. ## 更换 alpine 源为 mirrors.ustc.edu.cn
  22. RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
  23. echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
  24. RUN apk update && apk upgrade
  25. ## Alpine 安装 Glibc https://github.com/sgerrand/alpine-pkg-glibc
  26. RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
  27. RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-2.31-r0.apk
  28. RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-bin-2.31-r0.apk
  29. RUN wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-i18n-2.31-r0.apk
  30. RUN apk add glibc-2.31-r0.apk
  31. RUN apk add glibc-bin-2.31-r0.apk
  32. RUN apk add glibc-i18n-2.31-r0.apk
  33. ## 设置环境变量
  34. ENV JAVA_HOME /usr/local/jdk1.8.0_191
  35. ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  36. ENV PATH $PATH:$JAVA_HOME/bin
  37. ## 编码问题
  38. RUN /usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
  39. ENV LANG=en_US.UTF-8
  40. ENV LANGUAGE=en_US.UTF-8
  41. ## 时区
  42. ENV TZ='CST-8'
  43. ## 执行脚本
  44. CMD ["sh","/app/sh/start.sh"]

容器中的工作目录为 /app ,相关目录内容如下:

  • /app/application/ 关联外部 jar 文件
  • /app/config 关联指定配置文件 如: application.properties 等
  • /app/logs 存放程序运行日志
  • /app/sh 存放程序执行脚本

二、Alpine 安装 Glibc 参考

alpine 默认库为 MUSL libc(mini libc) ,而 JDK 的运行需要 GUN Standard C library(glibc) 的库支持。所以需要安装 glibc

github 路径
02.png

三、执行案例

Eureka Server 高可用集群部署