Docker构建映像1GB或太大

Docker构建映像1GB或太大,docker,dockerfile,coreos,Docker,Dockerfile,Coreos,我在Maven Java项目中有一个Docker构建文件来构建它。docker映像的大小约为1GB。我所要做的就是建造战争神器,并保持较小的尺寸。以下是我到目前为止的情况: FROM java:8 #FROM maven:latest MAINTAINER Sonam <myemail@gmail.com> RUN apt-get update RUN apt-get install -y maven WORKDIR /code #Prepare by downloadin

我在Maven Java项目中有一个Docker构建文件来构建它。docker映像的大小约为1GB。我所要做的就是建造战争神器,并保持较小的尺寸。以下是我到目前为止的情况:

FROM java:8

#FROM maven:latest
MAINTAINER Sonam <myemail@gmail.com>

RUN apt-get update 
RUN apt-get install -y maven

WORKDIR /code

#Prepare by downloading dependencies
ADD pom.xml /code/pom.xml
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "verify"]

#Adding source, compile and package into a fat jar
ADD src /code/src

RUN ["mvn", "clean"]
RUN ["mvn", "install", "-Dmaven.test.skip=true"]

RUN mkdir webapps

CMD ["echo"] ["hello"]
来自java:8
#来自maven:最新
索纳姆维修工
运行apt获取更新
运行apt get install-y maven
WORKDIR/代码
#通过下载依赖项进行准备
添加pom.xml/code/pom.xml
运行[“mvn”,“依赖项:解析”]
运行[“mvn”,“验证”]
#将源代码、编译和打包添加到胖jar中
添加src/code/src
运行[“mvn”,“清洁”]
运行[“mvn”、“安装”、“-Dmaven.test.skip=true”]
运行mkdir webapps
CMD[“echo”][“hello”]

我有一个CoreOS单元文件,当运行此容器时,我想将war复制到另一个文件。

您可以在“”中看到另一个选项

  • 我用图像来建立
  • 我将生成的停止容器作为新映像提交(使用包含生成的二进制文件的卷)
  • 我使用一个执行映像(其中只包含需要运行的内容),并从另一个映像复制二进制文件。我再次提交生成的容器
最终映像包括编译的二进制文件和执行环境

在您的情况下,确保当前Dockerfile声明了一个卷并在其中生成war(来自maven编译)

然后将退出的容器作为新的临时“编译”映像提交。
使用另一个Dockerfile,它将运行并从编译映像的“卷”复制war

docker run -u root -it --name=installation.cont --volumes-from compilation.cont --entrypoint "/bin/sh" installation.image -c "cp /avolume/myway /to/my/path"
生成的已停止容器
installation.cont
可以作为映像
installation.image
提交

然后,您可以从该映像开始编写第三个Dockerfile:
from installation.image
(其中仅包括您的war),并添加使用该war所需的内容。
docker commit apache.inst.cont apache.inst

它看起来很复杂,但会看看我是否能采纳你的想法。谢谢Vonc@Sonam确实如此,但基本思想是在一个容器中构建二进制文件,并将其复制到另一个容器上,一旦提交,该容器将成为您的基础映像。