Docker构建图像1GB或太大

时间:2017-02-03 04:03:04

标签: 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 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单元文件,当运行此容器时,我想将war复制到另一个文件。

1 个答案:

答案 0 :(得分:1)

您可以在“How do I build a Docker image for a Ruby project without build tools?

中看到替代方案
  • 我使用图片构建,
  • 我将生成的已停止的容器提交为新图像(包含生成的二进制文件的卷)
  • 我使用执行图像(只包含您需要运行的图像),并从另一图像复制二进制文件。我再次提交了生成的容器。

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

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

然后将退出的容器提交为新的临时“编译”图像 使用另一个Dockerfile,它将运行并复制编译图像的“from-volume”。

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