我正在构建一个 Alpine Linux docker 镜像,用作(相对)轻量级的 CI 镜像。在此图中,我需要安装 Google Cloud
gcloud
CLI。
我正在从我的
Dockerfile
安装 Python,如下所示:
RUN apk add python3
在 Alpine Linux 3.20 上(2024 年 12 月 3 日),这将安装 Python 3.12.7。安装某些版本的 python 似乎是运行 Google Cloud CLI 安装脚本的先决条件。
/ # cat /etc/alpine-release
3.20.0
/ # python --version
Python 3.12.7
Google Cloud CLI 声称与 Python 3.8 至 3.13 兼容 - 源代码,位于“Linux”选项卡下。
我正在使用这样的脚本安装 Google Cloud CLI,从正在构建的容器内部运行:
mkdir -p /usr/local/gcloud
curl -s https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz | tar -xz -C /usr/local/gcloud
/usr/local/gcloud/google-cloud-sdk/install.sh --quiet --usage-reporting false
当我运行此脚本作为 Docker 映像构建的一部分时,我看到以下内容:
#17 8.452 Your current Google Cloud CLI version is: 502.0.0
#17 8.452 Installing components from version: 502.0.0
#17 8.452
#17 8.495 ┌─────────────────────────────────────────────────────────────────────────────┐
#17 8.495 │ These components will be installed. │
#17 8.496 ├─────────────────────────────────────────────────────┬────────────┬──────────┤
#17 8.496 │ Name │ Version │ Size │
#17 8.497 ├─────────────────────────────────────────────────────┼────────────┼──────────┤
#17 8.497 │ BigQuery Command Line Tool │ 2.1.9 │ 1.7 MiB │
#17 8.499 │ BigQuery Command Line Tool (Platform Specific) │ 2.1.8 │ < 1 MiB │
#17 8.501 │ Bundled Python 3.11 (Platform Specific) │ 3.11.9 │ 74.4 MiB │
#17 8.503 │ Cloud Storage Command Line Tool │ 5.31 │ 11.3 MiB │
#17 8.504 │ Cloud Storage Command Line Tool (Platform Specific) │ 5.30 │ < 1 MiB │
#17 8.506 │ Google Cloud CLI Core Libraries (Platform Specific) │ 2024.08.30 │ < 1 MiB │
#17 8.507 │ Google Cloud CRC32C Hash Tool (Platform Specific) │ 1.0.0 │ 1.3 MiB │
#17 8.509 │ gcloud cli dependencies (Platform Specific) │ 2021.04.16 │ < 1 MiB │
#17 8.510 └─────────────────────────────────────────────────────┴────────────┴──────────┘
引起我注意的是~75MiB“Bundled Python 3.11”行。 我想阻止安装程序脚本下载和使用捆绑版本的 Python。 这可能吗?
--install-python false
旗帜当我在脚本上运行
--help
查看选项时,有一个引起了我的注意:
/usr/local/gcloud/google-cloud-sdk/install.sh --help
# ....
--install-python INSTALL_PYTHON
(true/false) Attempt to install Python. MacOS only.
果然,这个标志在 Alpine Linux 上似乎没有做任何事情(我仍然看到安装脚本下载并安装 Python 3.11)。
CLOUDSDK_PYTHON
环境变量经过一番谷歌搜索后,我尝试以两种方式在我的
CLOUDSDK_PYTHON
中设置 Dockerfile
环境变量:
ENV CLOUDSDK_PYTHON="/usr/bin/python"
ENV CLOUDSDK_PYTHON="/usr/bin/python3"
都不起作用(我仍然看到安装脚本下载并安装 Python 3.11)。
我了解 Google 提供了一个已安装
gcloud
CLI 的基础映像。由于与这个问题的主旨不完全相关的原因,我不能用它来消除这个问题。我必须使用不同的基于 Alpine Linux 的基础镜像。
跟随/复制我的评论。
我查看了文档,发现这部分很有趣:“请注意,x86_64 Linux 软件包包含默认首选的捆绑 Python 解释器。
x86
版本(顺便说一句,是x86_64
版本大小的一半)不会在最终图像中强制使用捆绑的Python版本。
摘自文档:
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86.tar.gz && \
tar -xf google-cloud-cli-linux-x86.tar.gz && \
./google-cloud-sdk/install.sh