无法读取 Dockerfile 命令:是否可以 cd 到 jar 文件中? tar -cf 做什么?
Trouble reading Dockerfile commands: Is it possible to cd into a jar file? and what does tar -cf do?
我有以下 Dockerfile:
FROM openjdk:8
ENV AJSC_HOME=/opt/att/ajsc
ENV AJSC_CONFIG_HOME=${AJSC_HOME}/config
COPY startService.sh /startService.sh
RUN chmod 777 /startService.sh && dos2unix /startService.sh
ADD @project.build.finalName@-@assembly.id@.tar.gz app.jar
ADD prometheus-java-agent.jar monitoring.jar
ADD ilib.jar ilib.jar
RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)
RUN (mv monitoring.jar opt/att/ajsc/lib)
RUN (mv ilib.jar opt/att/ajsc/lib)
RUN (rm -rf app.jar)
ENTRYPOINT /startService.sh
除了以下几行,我理解此文件中的所有内容:
RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)
那三行是干什么的?看起来某些目录只是被复制到 docker 图像中的特定目录,但为什么 "untar" 而不是简单地使用 COPY
命令?
在标题中你问一下cd
放入一个jar。这行不通,至少在典型的 UNIX shell 中是这样。所以它很可能是一个名为 app.jar
的目录,而不是一个 jar 文件。顺序
tar -cf - dir-to-pack | (cd otherdir; tar -xf -)
确实是一个保留文件模式的递归复制操作。对于设备文件、软链接、硬链接等特殊情况,可能与仅使用 cp -a
存在一些差异,但它们是真正有意还是偶然取决于准备 cp -a
的人的手艺=18=] 图片.
我有以下 Dockerfile:
FROM openjdk:8
ENV AJSC_HOME=/opt/att/ajsc
ENV AJSC_CONFIG_HOME=${AJSC_HOME}/config
COPY startService.sh /startService.sh
RUN chmod 777 /startService.sh && dos2unix /startService.sh
ADD @project.build.finalName@-@assembly.id@.tar.gz app.jar
ADD prometheus-java-agent.jar monitoring.jar
ADD ilib.jar ilib.jar
RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)
RUN (mv monitoring.jar opt/att/ajsc/lib)
RUN (mv ilib.jar opt/att/ajsc/lib)
RUN (rm -rf app.jar)
ENTRYPOINT /startService.sh
除了以下几行,我理解此文件中的所有内容:
RUN (cd app.jar/@project.build.finalName@;tar -cf - src) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/lib) | (cd ../..;tar -xf -) \
&& (cd app.jar/@project.build.finalName@;tar -cf - opt/att/ajsc/config) | (cd ../..;tar -xf -)
那三行是干什么的?看起来某些目录只是被复制到 docker 图像中的特定目录,但为什么 "untar" 而不是简单地使用 COPY
命令?
在标题中你问一下cd
放入一个jar。这行不通,至少在典型的 UNIX shell 中是这样。所以它很可能是一个名为 app.jar
的目录,而不是一个 jar 文件。顺序
tar -cf - dir-to-pack | (cd otherdir; tar -xf -)
确实是一个保留文件模式的递归复制操作。对于设备文件、软链接、硬链接等特殊情况,可能与仅使用 cp -a
存在一些差异,但它们是真正有意还是偶然取决于准备 cp -a
的人的手艺=18=] 图片.