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

man*_*her 12 java virtual-machine docker

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

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

Dockerfile
FROM centos
RUN yum install -y java-1.7.0-openjdk
Run Code Online (Sandbox Code Playgroud)

我跑docker build -t me/java7了以获得图像me/java7

但是我陷入了一些死胡同.

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

额外说明:

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

任何帮助深表感谢.

小智 25

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

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

    VOLUME /copy-into-this-dir
    
    Run Code Online (Sandbox Code Playgroud)

    然后你继续使用

    docker run -v=/location/of/file/locally:/copy-into-this-dir -t me/java7
    
    Run Code Online (Sandbox Code Playgroud)

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

    ENTRYPOINT ["java", "-jar", "/whatever/your.jar"]
    CMD [""]
    
    Run Code Online (Sandbox Code Playgroud)

    然后再次运行使用

    docker run -v=/location/of/file/locally:/copy-into-this-dir -t me/java7 --myNumber 42
    
    Run Code Online (Sandbox Code Playgroud)

(看看Dockerfile文档.)


Rid*_*hil 5

假设您的文件结构如下

DockerTest
        ??? Dockerfile
        ??? local.jar
Run Code Online (Sandbox Code Playgroud)

Dockerfile 内容将是

FROM centos
RUN yum install -y java-1.7.0-openjdk
EXPOSE 8080
ADD /local.jar fatJar.jar
ENTRYPOINT ["java","-jar","fatJar.jar"]
Run Code Online (Sandbox Code Playgroud)

使用以下命令

$ cd DockerTest
$ docker build -f Dockerfile -t demo .
Run Code Online (Sandbox Code Playgroud)