我在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复制到另一个文件。
答案 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