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