了解Docker镜像

我发现有点难以掌握Dockerfile。 请考虑dockerfile中的以下命令,它将创build一个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? 当我做dockerbuild造或docker运行时,他们执行吗?
  2. 如果他们在docker运行期间执行,他们将从哪里得到我的helloWorld.war? docker是一个包含helloWorld.war和dockerfile的一组命令的包吗?

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

    • 在build立图像时将执行RUN并将相应的图层添加到泊坞窗图像中。

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

    • 在构build图像时, ADD/COPY将主机上的文件复制到泊坞窗图像。

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

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

当你build立你的图像时,执行RUN和ADD命令。 CMD是运行图像时执行的默认命令。 CMD在容器中运行,所以它从容器的“内部”(第一层)获取helloWorld.war。