你可以在 Jib Docker 镜像中安装命令行包吗?

3

我需要在Maven Jib插件创建的Docker镜像中安装类似于jq、curl等命令行工具。我该如何实现?非常感谢您的帮助。谢谢。


是的,您可以添加所有的CLI工具。您能添加Dockerfile吗? - nischay goyal
@nischaygoyal 这就是我正在寻找的,如何获取Maven Jib插件正在使用的Dockerfile,然后我可以添加层。 - PainPoints
2个回答

3

如另一个答案所解释的那样,使用预安装的工具很少更改的基础镜像是一个好的解决方案。

或者,您可以使用Jib的<extraDirectories>功能添加任意文件到目标镜像中,以安装curl。有关详细信息,请参阅MavenGradle文档。根据文档,您还需要配置<permissions>来将可执行位设置为curl

如果愿意,您甚至可以设置您的Maven或Gradle构建以下载curl并进行解压缩。下面是来自Jib存储库的一个示例Jib设置(显示了Maven和Gradle)。


2
通过添加一个引用 `Dockerfile` ,您可以创建自己的基础镜像并构建它。
FROM openjdk:8-jdk-alpine

RUN apk add --no-cache curl tar bash procps

# Downloading and installing Maven
ARG MAVEN_VERSION=3.6.1
ARG USER_HOME_DIR="/root"
ARG SHA=b4880fb7a3d81edd190a029440cdf17f308621af68475a4fe976296e71ff4a4b546dd6d8a58aaafba334d309cc11e638c52808a4b0e818fc0fd544226d952544
ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries

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

ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"

# Downloading and installing Gradle
# 1- Define a constant with the version of gradle you want to install
ARG GRADLE_VERSION=4.0.1

# 2- Define the URL where gradle can be downloaded from
ARG GRADLE_BASE_URL=https://services.gradle.org/distributions

# 3- Define the SHA key to validate the gradle download
#    obtained from here https://gradle.org/release-checksums/
ARG GRADLE_SHA=d717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4

# 4- Create the directories, download gradle, validate the download, install it, remove downloaded file and set links
RUN mkdir -p /usr/share/gradle /usr/share/gradle/ref \
  && echo "Downlaoding gradle hash" \
  && curl -fsSL -o /tmp/gradle.zip ${GRADLE_BASE_URL}/gradle-${GRADLE_VERSION}-bin.zip \
  \
  && echo "Checking download hash" \
  && echo "${GRADLE_SHA}  /tmp/gradle.zip" | sha256sum -c - \
  \
  && echo "Unziping gradle" \
  && unzip -d /usr/share/gradle /tmp/gradle.zip \
   \
  && echo "Cleaning and setting links" \
  && rm -f /tmp/gradle.zip \
  && ln -s /usr/share/gradle/gradle-${GRADLE_VERSION} /usr/bin/gradle

# 5- Define environmental variables required by gradle
ENV GRADLE_VERSION 4.0.1
ENV GRADLE_HOME /usr/bin/gradle
ENV GRADLE_USER_HOME /cache

ENV PATH $PATH:$GRADLE_HOME/bin

VOLUME $GRADLE_USER_HOME

CMD [""]


参考:https://docs.docker.com/engine/reference/builder/ 一旦您的自定义镜像准备好了,将其推送到Registry,然后以以下方式在 jib 中引用它。
mvn compile jib:build \
    -Djib.from.image=customImage

好的,jib docker镜像是一个distroless镜像,这意味着没有shell,你将无法安装任何东西。 - PainPoints

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接