Docker标准镜像制作

  • 由于hub.docker.com上提供的官方镜像为open-jdk,因此和程序运行时多少会有点小问题;
  • 之前使用基于alpine的基础镜像来制作应用镜像时会遇到一些小麻烦,主要是因为和linux 多有不同,并且不能直接运行Oracle jdk;
    综上所述,因此决定使用基于CentOS来构建镜像。

初始化镜像

拉取基础镜像

1
docker pull centos

自定义jdk版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#解压
tar xvcf jre-8u191-linux-x64.tar.gz
#进入目录
cd jre1.8.0_161/
#删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html
#删除其他无用文件
rm -rf lib/plugin.jar \
lib/ext/jfxrt.jar \
bin/javaws \
lib/javaws.jar \
lib/desktop \
plugin \
lib/deploy* \
lib/*javafx* \
lib/*jfx* \
lib/amd64/libdecora_sse.so \
lib/amd64/libprism_*.so \
lib/amd64/libfxplugins.so \
lib/amd64/libglass.so \
lib/amd64/libgstreamer-lite.so \
lib/amd64/libjavafx*.so \
lib/amd64/libjfx*.so

最后再重新打包

1
tar -zcvf jre-8u191-linux-x64.tar.gz jre1.8.0_191/

构建JDK

  • 编写Dockerfile

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    cat <<EOF > Dockerfile

    FROM centos:latest
    MAINTAINER by medivh
    RUN rm -f /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && mkdir /usr/local/java && useradd joy
    #相对路径jar,把java添加到容器中
    ADD jre-8u191-linux-x64.tar.gz /usr/local/java/

    #配置java环境变量
    ENV JAVA_HOME /usr/local/java/jdk1.8.0_91
    ENV JRE_HOME $JAVA_HOME/jre
    ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    ENV PATH $JAVA_HOME/bin:$PATH

    USER joy
    RUN mkdir /home/joy/logs && mkdir /home/joy/src

    EOF
  • 构建镜像

    1
    docker build -t 192.168.1.232:5000/base/jdk:1.8.0_91_v.0.5 .

因为镜像需要推送到仓库,因此在构建镜像的时候直接打标签了。

构建服务镜像

1
2
3
4
5
6
7
# Version: 0.0.1
FROM 192.168.1.232:5000/base/jdk:1.8.0_91_v.0.5
ENV LC_ALL en_US.UTF-8
WORKDIR /home/joy/src
ADD xxxxx-SNAPSHOT.war /home/joy/src
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "xxxxx.jar","--server.port=8080","--Djava.security.egd=file:/dev/./urandom"]

文件说明

  • from 基于之前构建好的jdk镜像
  • 修改时区
  • workdir 设定工作目录,类似于cd命令
  • ADD 添加war包或者jar包
  • EXPOSE 暴露端口,默认设置为8080
  • ENTRYPOINT 程序启动相关参数
------ 本文结束 ------

版权声明

Medivh's Notes by Medivh is licensed under a Creative Commons BY-NC-ND 4.0 International License.
Medivh创作并维护的Medivh's Notes博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Medivh 博客( http://www.mknight.cn ),版权所有,侵权必究。