首页 > 后端开发 > Python教程 > 如何在Docker文件中从GCP Artifact注册表中安装Python软件包

如何在Docker文件中从GCP Artifact注册表中安装Python软件包

Susan Sarandon
发布: 2025-01-28 16:14:16
原创
218 人浏览过

How to Install Python Packages from GCP Artifact Registry in Docker file

您开发了一个很棒的Python包供公司内部使用。您希望发布它,以便您的同事可以开始使用它。由于该包仅供内部使用,因此无法在PyPI(官方Python包注册表)上发布它。相反,由于您的公司使用GCP,因此自然的选择是Artifact Registry。

如文档所述,将包发布到注册表非常简单。

库打包

我使用Poetry打包库。以下是一些您将使用的命令:

<code class="language-bash">poetry source add --priority=supplemental gcp_registry https://{LOCATION}-python.pkg.dev/{REPO}/{PACKAGE}/
poetry publish --no-interaction --build --repository gcp_registry</code>
登录后复制

将您的包发布到Artifact Registry后,您可以将其作为其他项目的依赖项提供。

安装包

要在本地机器上安装包,请创建一个requirements_private.txt文件:

<code>--index-url https://{LOCATION}-python.pkg.dev/{REPO}/{PACKAGE}/simple/
--extra-index-url https://pypi.org/simple
{YOUR_PACKAGE_NAME}</code>
登录后复制
登录后复制

然后,使用以下命令安装包:

<code class="language-bash">pip install keyring
pip install keyrings.google-artifactregistry-auth
pip install -r /opt/requirements_private.txt</code>
登录后复制

keyring包处理Artifact Registry身份验证。确保在继续之前设置了您的应用程序默认凭据(ADC)。


Docker挑战

在Docker中运行应用程序时,您会面临其他挑战:

  1. 您不想将敏感信息(例如您的服务帐户文件)复制到Docker镜像中。
  2. 您仍然需要使用Artifact Registry进行身份验证。

解决方案很简单,但没有很好的文档记录。我花了几天时间才弄清楚这一点,所以我想节省您的时间,并帮助您在几分钟内实现它。


解决方案

  1. 在Docker构建期间传递GOOGLE_APPLICATION_CREDENTIALS环境变量,指向服务帐户文件的路径(而不是文件内容本身)。
  2. 将服务帐户文件作为秘密安装在GOOGLE_APPLICATION_CREDENTIALS指定的路径下。
  3. 在同一个RUN语句中执行所有操作,包括安装keyring包和私有依赖项。这很重要,因为文件的安装仅存在于该上下文中。
  4. 确保您具有具有适当权限的模式,以便可以读取该文件。

Dockerfile示例

以下是您的Dockerfile的外观:

<code class="language-dockerfile">ARG GOOGLE_APPLICATION_CREDENTIALS

COPY requirements_private.txt /opt/requirements_private.txt

RUN --mount=type=secret,id=creds,target=/opt/mykey.json,mode=0444 \
     pip install keyring && \
     pip install keyrings.google-artifactregistry-auth && \
     pip install -r /opt/requirements_private.txt

COPY requirements.txt /opt/requirements.txt
RUN pip install -r /opt/requirements.txt</code>
登录后复制

requirements_private.txt仍然相同。

<code>--index-url https://{LOCATION}-python.pkg.dev/{REPO}/{PACKAGE}/simple/
--extra-index-url https://pypi.org/simple
{YOUR_PACKAGE_NAME}</code>
登录后复制
登录后复制

如您所见,您可以有多个requirements文件。在我的例子中,requirements.txt文件用于托管在pypi公共注册表中的包。 然后是您的docker_compose.yml文件

<code class="language-yaml">services:
  app:
    build:
      context: .
      args:
        - GOOGLE_APPLICATION_CREDENTIALS=/opt/mykey.json
      secrets:
        - creds

secrets:
  creds:
    file: "C:/your/local/host/path/to/google_service_account.json"</code>
登录后复制

然后您可以运行构建命令:

<code class="language-bash">docker compose build</code>
登录后复制

希望本文能帮助您与Artifact Registry和Docker集成。

以上是如何在Docker文件中从GCP Artifact注册表中安装Python软件包的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板