了解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。
- 现在我不明白什么时候执行RUN,ADD和CMD? 当我做dockerbuild造或docker运行时,他们执行吗?
- 如果他们在docker运行期间执行,他们将从哪里得到我的helloWorld.war? docker是一个包含helloWorld.war和dockerfile的一组命令的包吗?
-
RUN
和ADD
将在构build时运行(CMD/ENTRYPOINT
docker build
),CMD/ENTRYPOINT
将在运行时执行(CMD/ENTRYPOINT
docker run
)。-
在build立图像时将执行
RUN
并将相应的图层添加到泊坞窗图像中。 -
CMD
是容器启动时执行的默认命令。 -
在构build图像时,
ADD/COPY
将主机上的文件复制到泊坞窗图像。
-
-
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。