如何减少wildfly应用程序的docker镜像大小

时间:2021-05-12 17:39:26

标签: docker dockerfile wildfly docker-image openjdk-11

我们有一个大小约为 858 MB 的 docker 镜像。我们想减小它的大小。

超过 858 MB

APP Size: 352 MB (EAR FILE)
WILDFLY (18.0.1): 212 MB
adoptopenjdk:11: 123 MB
USR DIR : 116 MB

有没有办法缩小尺寸?

第一个 Dockerfile --wildfly-11.8:latest

FROM adoptopenjdk/openjdk11:jre-11.0.6_10-alpine
ENV WILDFLY_VERSION 18.0.1.Final
ENV WILDFLY_SHA1 ef0372589a0f08c53e7291721a7e3f7d9
ENV MODULES_FILENAME modules.tar
ENV MODULES_SHA1 2dcfee4045b7d026d7d6290cebc772482
ENV JBOSS_HOME  /opt/wildfly

RUN useradd -ms /bin/bash jboss

RUN cd $HOME \
&& curl -O -k https://download.jboss.org/wildfly/$WILDFLY_VERSION/wildfly-$WILDFLY_VERSION.tar.gz \
&& sha1sum wildfly-$WILDFLY_VERSION.tar.gz | grep $WILDFLY_SHA1 \
&& tar xf wildfly-$WILDFLY_VERSION.tar.gz \
&& mv $HOME/wildfly-$WILDFLY_VERSION $JBOSS_HOME \
&& rm wildfly-$WILDFLY_VERSION.tar.gz \
&& chown -R jboss:0 ${JBOSS_HOME} \
&& chmod -R g+rw ${JBOSS_HOME} \
&& curl -p ftp://ftp.co.il//wildfly/1801/$MODULES_FILENAME --user "app:qax" --ftp-create-dirs -O \
&& sha1sum $MODULES_FILENAME | grep $MODULES_SHA1 \
&& tar xf ${MODULES_FILENAME} \
&& rm ${MODULES_FILENAME} \
&& cp -r ./* ${JBOSS_HOME} \
&& rm -rf ./*

COPY configuration /opt/wildfly/standalone/configuration
COPY standalone.conf /opt/wildfly/bin

USER jboss
EXPOSE 8080

CMD cd /opt/wildfly/bin && ./standalone.sh -b="0.0.0.0" -c=$STANDALONE_CONFIG

第二个 Dockerfile

FROM wildfly-11.8:latest
ENV DEPLOYMENT_LOCATION /opt/wildfly/standalone/deployments
ARG ear_file_path 
COPY $ear_file_path $DEPLOYMENT_LOCATION

1 个答案:

答案 0 :(得分:0)

有很多方法可以减小 Docker 镜像的大小。

1.使用高山图像或最小尺寸的图像作为基础图像。 对于 Docker hub 中的官方 Docker 镜像,单个存储库会有不同的标签。示例:ubuntu:stableubuntu:latestubuntu:alpine,其中 alpine 占用的大小最小。

2.使用多阶段 Dockerfile。 编写 Dockerfile 时,将需求拆分为多个部分。

喜欢:

(a) 如果您需要先将文件复制到工作目录,请在第一阶段进行。

(b) 接下来,如果您需要安装软件包,请在下一阶段进行。

(c) 最后,你需要公开一个端口并运行一些命令,在最后一个阶段完成。

示例 dockerfile:

# Use an official Ubuntu runtime as a base image.
FROM ubuntu:latest AS base
#To create working directory.
WORKDIR /application
# To add contents to the working directory.
ADD . /application

# Use the base image to create a packaged image. 
FROM base AS package
#To create add to the existing working directory.
WORKDIR /application
# To install necessary packages.
RUN apt update \
&& apt install nginx -y
&& apt install docker -y 

# Use the packaged image to create a final image.
FROM package AS final
#To create add to the existing working directory.
WORKDIR /application
# To Run Commands after the container is run.
CMD ["echo", "Hello world"]

通过这种方式,您可以减小创建的 Docker 镜像的大小。 参考:https://docs.docker.com/develop/develop-images/multistage-build/

谢谢。