如何为本地应用程序创建文件和值参数的docker镜像

时间:2014-08-18 13:48:26

标签: java virtual-machine docker

我有一个java应用程序(jar文件),我希望能够从docker镜像运行。

我创建了一个Dockerfile来创建一个使用centos作为基础的图像并安装java:

Dockerfile
FROM centos
RUN yum install -y java-1.7.0-openjdk

我之后运行了docker build -t me/java7来获取图片me / java7

然而,我陷入了一些死胡同。

  1. 如何将jar文件从主机复制到图像/容器
  2. 我需要2个参数。 1是一个文件,需要在运行时将其复制到容器中的目录中。另一个是需要在用户使用参数
  3. 运行java -jar时自动传递到docker run命令中的jar文件的数字

    额外说明:

    jar文件是本地文件。不通过wget或任何东西访问任何地方。我目前最接近的是包含它的Windows共享。我也可以从git存储库访问源代码,但这将涉及编译所有内容并在映像上安装maven和git,所以我宁愿避免这种情况。

    非常感谢任何帮助。

2 个答案:

答案 0 :(得分:24)

  1. 在Dockerfile中,使用ADD添加本地文件,例如

    ADD your-local.jar /some-container-location
    
  2. 您可以使用卷在运行时将文件放入容器中,例如

    VOLUME /copy-into-this-dir
    

    然后你运行

    docker run -v=/location/of/file/locally:/copy-into-this-dir -t me/java7
    

    您可以使用ENTRYPOINT和CMD传递参数,例如

    ENTRYPOINT ["java", "-jar", "/whatever/your.jar"]
    CMD [""]
    

    然后再次使用

    运行
    docker run -v=/location/of/file/locally:/copy-into-this-dir -t me/java7 --myNumber 42
    
  3. (请查看Dockerfile documentation。)

答案 1 :(得分:3)

  

假设您的文件结构如下

DockerTest
        └── Dockerfile
        └── local.jar
  

Dockerfile内容将为

FROM centos
RUN yum install -y java-1.7.0-openjdk
EXPOSE 8080
ADD /local.jar fatJar.jar
ENTRYPOINT ["java","-jar","fatJar.jar"]
  

使用以下命令

$ cd DockerTest
$ docker build -f Dockerfile -t demo .