Что делает `touch` в Dockerfile? - PullRequest
       7

Что делает `touch` в Dockerfile?

0 голосов
/ 12 сентября 2018

Я повторно использую Dockerfile со следующим содержимым:

ADD dist /dist/
ARG JAR_FILE
ADD target/${JAR_FILE} /target/app.jar
RUN sh -c 'touch /target/app.jar'
EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java -jar /target/app.jar"]

Я понимаю все строки, кроме той, которая имеет touch. Этот сайт говорит:

RUN sh -c ‘touch /app.jar’ - коснитесь нашего файла, чтобы у него было время модификации (по умолчанию Docker создает все файлы-контейнеры в «неизмененном» состоянии)

Я понимаю, что касание файла меняет дату его изменения.Зачем Docker нужна временная метка для файла, или это хорошая практика?

1 Ответ

0 голосов
/ 12 сентября 2018

Из-за кэширования слоя 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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...