首頁 > 後端開發 > Python教學 > 如何在Docker文件中從GCP Artifact註冊表中安裝Python軟件包

如何在Docker文件中從GCP Artifact註冊表中安裝Python軟件包

Susan Sarandon
發布: 2025-01-28 16:14:16
原創
175 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板