JAVA项目镜像构建:Tomcat

tomcat目录文件:1.apache-tomcat-8.5.43.tar.gz 2.Dockerfile 3.Dockerfile2 4.ROOT.war

Dockerfile(环境镜像)

FROM centos:7
MAINTAINER www.ctnrs.com

ENV VERSION=8.5.43

RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \
yum clean all && \
rm -rf /var/cache/yum/*

ADD apache-tomcat-${VERSION}.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-${VERSION} /usr/local/tomcat && \
sed -i '1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"' /usr/local/tomcat/bin/catalina.sh && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENV PATH $PATH:/usr/local/tomcat/bin

WORKDIR /usr/local/tomcat

EXPOSE 8080
CMD ["catalina.sh", "run"]

Dockerfile2 (基于环境镜像打包的项目镜像)

FROM tomcat:v1
RUN rm -rf /usr/local/tomcat/webapps/*
COPY ROOT.war /usr/local/tomcat/webapps

构建镜像

cd tomcat/
docker build -t tomcat:v1 .
docker build -t tomcat:v2 -f Dockerfile2 .
docker run -d -p 8888:8080 --name tomcat tomcat:v2

访问tomcat 8888端口

http://192.168.0.11:8888/

JAVA微服务镜像构建:Jar

java目录文件:1.Dockerfile 2.hello.jar

Dockerfile(基于环境镜像打包的项目镜像)

FROM java:8-jdk-alpine
LABEL maintainer www.ctnrs.com
ENV JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add -U tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY hello.jar /
EXPOSE 8888
CMD ["/bin/sh", "-c", "java -jar $JAVA_OPTS /hello.jar"]

编写Dockerfile最佳实践

减少镜像层:一次RUN指令形成新的一层,尽量Shell命令都写在一行,减少镜像层。

优化镜像大小:一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除, 都会带到下一层,所以要在每一层清理对应的残留数据,减小镜像大小。

减少网络传输时间:例如软件包、mvn仓库等

多阶段构建:代码编译、部署在一个Dockerfile完成,只会保留部署阶段产生数据。

选择最小的基础镜像:例如alpine