Из-за кэширования слоя Docker во многих типичных случаях команда touch
не будет делать ничего .Если файл jar изменился, команда ADD включит его в образ с его последним измененным временем с хоста («он копируется индивидуально вместе с его метаданными »);поскольку это, по-видимому, недавно, команда touch
обновит ее до секунд.Если файл jar не изменился, то Docker пропустит обе команды ADD и RUN и будет использовать выходные данные файловой системы, полученные при предыдущем запуске, с отметкой времени предыдущего запуска.
Если файл jar просто используетсяесли в качестве входных данных ввести java -jar
, то время его последнего изменения также не должно относиться ни к чему.
Я думаю, вы можете безопасно удалить команду touch
без вредных последствий.Есть пара ненужных sh -c
вызовов, которые не имеют значения и просто загромождают вещи.Я предполагаю, что этот Dockerfile функционально эквивалентен:
# Prefer COPY to ADD, unless you explicitly want Docker to fetch
# URLs or unpack archives
COPY dist /dist/
ARG JAR_FILE
COPY target/${JAR_FILE} /target/app.jar
EXPOSE 8080
# Prefer CMD to ENTRYPOINT, if nothing else so `docker run imagename sh` works
# Split simple commands into words yourself
CMD ["java", "-jar", "/target/app.jar"]