了解Docker镜像

时间:2016-03-23 11:03:31

标签: docker dockerfile

我发现抓住Dockerfile有点困难。请考虑dockerfile中创建tomcat映像的以下命令:

 RUN wget -q https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR_VERSION}/v${TOMCAT_MINOR_VERSION}/bin/apache-tomcat-${TOMCAT_MINOR_VERSION}.tar.gz &&\
tar zxf apache-tomcat-*.tar.gz

 ADD helloWorld.war ${CATALINA_HOME}/webapps/

 CMD ["/opt/tomcat/bin/tomcat.sh"]

我正在下载tomcat并添加war文件然后启动tomcat。

  1. 现在我不理解的是RUN,ADD和CMD何时执行?当我做docker build或docker run时它们会执行吗?
  2. 如果他们在docker run期间执行,他们将从哪里获取helloWorld.war? docker镜像是一个包含helloWorld.war的包和一组来自dockerfile的命令吗?

2 个答案:

答案 0 :(得分:0)

  1. RUNADD将在构建时运行docker build),CMD/ENTRYPOINT将在运行时(docker run)执行。

      构建图像时将执行
    • RUN,并将相应的图层添加到docker镜像中。

    • CMD是容器启动时执行的默认命令。

    • ADD/COPY在构建图片时将文件从主机复制到泊坞窗图像。

  2. helloWorld.war将打包在docker镜像中。如果您想在docker run处提供war文件,可以使用volumes。您可以挂载tomcat的webapps目录。

  3. docker run -v /path/to/war/file/in/host:/path/to/webapps/war/in/container tomcat

答案 1 :(得分:0)

在构建映像时执行RUN和ADD命令。 CMD是运行映像时执行的默认命令。 CMD在容器内部运行,因此它从"内部"中获取helloWorld.war。 (第一层)容器。