我是Docker的新手。我可以从https://github.com/carlossg/docker-maven/blob/master/jdk-13/Dockerfile为Java和Maven创建一个docker镜像。我可以理解dockerfile中的大多数命令,有些命令在网上找不到足够的信息。有人可以帮帮我吗 ?
(1)ARG SHA以下的功能是什么。如果我理解正确,SHA是与图像相关联的不可变标识符,因此我正在下载具有该标识符的图像,我的意思是具有所需更改的特定图像并存储在该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```
最佳答案
您必须像shell脚本一样阅读它。
1。SHA
是第10行中使用的SHA512 hash
function
检查是否下载了/tmp/apache-maven.tar.gz是我们期望的。它
如果您是这样的话,则与Docker镜像ID无关。您可以
在您的系统上本地复制支票:
$ 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
(请注意,此处的
$
是command line
prompt用于指示新行的开始,而不是新行的一部分
命令)。
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。
再次,像读取shell脚本一样阅读它。
&&
用于chaining commands,而\
用于连接行。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-maven tarball下载到/tmp/apache-maven.tar.gz。
echo "${SHA} /tmp/apache-maven.tar.gz" | sha512sum -c -
检查下载的tarball是否具有正确的校验和。
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
提取后除去临时tarball。
ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
创建指向
/usr/bin/mvn
的/usr/share/maven/bin/mvn
。这个这样做是因为
/usr/bin
目录通常在$PATH
中,因此无需提供完整路径即可运行
mvn
。
关于maven - Dockerfile-ARG SHA和Curl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60618076/