Docker构build映像1GB或者太大

我在我的Maven Java项目中有一个Docker构build文件来构build它。 docker图片结束约1GB。 我所要做的就是build立战争神器并保持体积不变。 这是我到目前为止:

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"] 

我有一个CoreOS单元文件,当这个容器运行时,我想复制战争到另一个文件。

您可以在“ 如何在没有构build工具的情况下为Ruby项目构buildDocker镜像?

  • 我使用一个图像来build立,
  • 我将产生的停止的容器提交为一个新的映像(包含一个包含结果二进制文件的卷)
  • 我使用一个执行映像(一个只包含你需要运行的映像),并从另一个映像复制二进制文件。 我再次提交所产生的容器。

最终的图像包括编译的二进制文件和执行环境。

在你的情况下,确保当前的Dockerfile声明一个卷,并在其中产生战争(来自maven编译)。

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

 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 (只包括你的战争),并添加你需要的东西来使用这个战争。 docker commit apache.inst.cont apache.inst