Dockerfile - ARG SHA и Curl - PullRequest
       0

Dockerfile - ARG SHA и Curl

1 голос
/ 10 марта 2020

Я новичок ie до Docker. Я могу создать docker изображение для Java и Maven из https://github.com/carlossg/docker-maven/blob/master/jdk-13/Dockerfile. Я могу понять большинство команд там внутри dockerfile, есть некоторые, которые я не смог найти достаточно информации о net. Может кто-нибудь помочь мне?

(1) Что делает ниже ARG SHA? Если я правильно понимаю, SHA является неизменным идентификатором, который связан с изображением, поэтому я загружаю изображение с этим идентификатором, я имею в виду заданное c изображение с изменениями, которые я хочу и сохраняемые с этим SHA, это правильно?

ARG SHA=c35a1803a6e70a126e80b2b3ae33eed961f83ed74d18fcd16909b2d44d7dada3203f1ffe726c17ef8dcca2dcaa9fca676987befeadc9b9f759967a8cb77181c0

(2) Я знаю, что делает RUN, echo и как работает переменная. Но не уверен, что происходит ниже с помощью команды curl. Понятия не имею, что приведенные ниже строки кода делают наверняка.

RUN mkdir -p /usr/share/maven /usr/share/maven/ref \
  && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
  && echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c - \
  && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \
  && rm -f /tmp/apache-maven.tar.gz \
  && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn```

1 Ответ

1 голос
/ 10 марта 2020

Вы должны прочитать его как скрипт оболочки.

1.

SHA - это SHA512 хеш-функция , используемая в строке 10 для проверки, загружен ли / tmp /apache-maven.tar.gz - это то, что мы ожидаем. Это не имеет ничего общего с Docker идентификатором изображения, если вы это имеете в виду. Вы можете воспроизвести проверку локально в вашей системе:

$ SHA=c35a1803a6e70a126e80b2b3ae33eed961f83ed74d18fcd16909b2d44d7dada3203f1ffe726c17ef8dcca2dcaa9fca676987befeadc9b9f759967a8cb77181c0
$ BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries
$ curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz
$ echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c -
/tmp/apache-maven.tar.gz: OK

(Обратите внимание, что $ - это приглашение командной строки , используемое для указания начала новой строки, а не части команда).

curl здесь можно загрузить https://apache.osuosl.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz в /tmp/apache-maven.tar.gz.

2.

Снова, прочитайте это как скрипт оболочки. && используется для команд цепочки и \ используется для объединения строк.

RUN mkdir -p /usr/share/maven /usr/share/maven/ref

Создание /usr/share/maven и /usr/share/maven/ref каталогов.

curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz

Загрузите временный apache -изготовленный архив в /tmp/apache-maven.tar.gz.

echo "${SHA}  /tmp/apache-maven.tar.gz" | sha512sum -c -

Проверьте, имеет ли загруженный архив с правильной контрольной суммой.

tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1

Извлечь /tmp/apache-maven.tar.gz в /usr/share/maven.

rm -f /tmp/apache-maven.tar.gz

Удалить временный архив после его извлечения.

ln -s /usr/share/maven/bin/mvn /usr/bin/mvn

Создать /usr/bin/mvn, что указывает на /usr/share/maven/bin/mvn. Это сделано потому, что каталог /usr/bin обычно находится в $PATH, поэтому mvn можно запустить без указания полного пути к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...