maven - Dockerfile-ARG SHA和Curl

标签 maven docker

我是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/

相关文章:

ruby-on-rails - 运行 rake db 时出错 :create in Docker

docker - 我的Dockerfile遇到问题并设置了正确的工作目录

java - 在受限环境中重新编译第三方 Java 代码

java - 如何在maven中建立特定的文件夹?

maven - 如何在两个 nexus 存储库 (jenkins) 之间移动 Artifact ?

java - 为什么 Maven 命令 "mvn sonar:sonar"在我的 "pom.xml"中没有任何插件配置就可以工作?

java - 为什么要在maven构建中指定java版本?

python - 为什么找不到Dockerfile?

scala - 如何使用 sbt-docker 或手动编写 docker 文件在 docker 中运行 sbt 项目?

reactjs - React 未命中 kubernetes 集群上的 django api