【问题标题】:How to reduce docker image size of wildfly application如何减少wildfly应用程序的docker镜像大小
【发布时间】:2021-08-03 02:34:39
【问题描述】:

我们有一个大小约为 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

【问题讨论】:

  • 您的环境大部分是您的代码。将大型企业应用程序 Docker 化并不总是正确的答案。您可以将 Quarkus 之类的东西用于微服务类型的东西,但这听起来像是一个大型的单体应用程序。为什么要使用 Docker?
  • 是的,应用程序的大小是问题之一。这是客户的要求。

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


【解决方案1】:

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

1.使用 alpine 图像或最小尺寸的图像作为基础图像。 对于 Docker 中心中的官方 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/

谢谢。

【讨论】:

  • 谢谢阿琼。多阶段 docker 可能对我的情况没有帮助,因为我们只是在构建应用程序并将 ear 文件放在 docker 中。我们有 2 个 docker 镜像文件。在第一个中,我们正在构建 wildfly,在第二个中,我们正在添加 ear 文件并使用此图像启动容器。添加有问题的两个 dockerfile
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多