使用 Docker Compose 訪問私有倉庫


簡介

Docker Compose 是一種用於定義和執行多容器 Docker 應用程式的工具。它允許開發人員將應用程式棧定義為 YAML 檔案,從而可以輕鬆地使用少量命令啟動複雜的執行環境。但是,在 Docker Compose 中使用私有倉庫可能會比較棘手。在本文中,我們將探討如何在 Docker Compose 中使用私有倉庫,涵蓋不同的身份驗證方法及其示例。

什麼是私有倉庫?

Docker 映象可以儲存在私有或公共倉庫中。公共倉庫對所有人開放,而私有倉庫需要身份驗證才能訪問。私有倉庫通常用於包含專有程式碼或不應公開提供的資料的映象。要訪問私有倉庫,您需要提供身份驗證憑據。

在 Docker Compose 中使用私有倉庫

在 Docker Compose 中使用私有倉庫時,需要確保主機機器上執行的 Docker 守護程式可以訪問該倉庫。根據倉庫使用的身份驗證方法,有幾種方法可以實現這一點。

身份驗證方法

Docker Config.json 檔案

Docker 守護程式可以使用 config.json 檔案來儲存身份驗證憑據。此檔案可以透過手動建立或使用 docker login 命令建立。要在 Docker Compose 中使用 config.json 檔案,需要將其作為卷掛載到容器中。以下是一個示例:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      volumes:
         - $HOME/.docker/config.json:/root/.docker/config.json

在此示例中,我們將位於使用者主目錄中的 config.json 檔案掛載到容器的根目錄。這允許容器內部執行的 Docker 守護程式訪問檔案中儲存的憑據。

環境變數

某些私有倉庫支援透過環境變數進行身份驗證。當您不想在配置檔案中公開憑據時,此方法非常有用。以下是一個示例:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      environment:
         - REGISTRY_USERNAME=username
         - REGISTRY_PASSWORD=password

在此示例中,我們將 REGISTRY_USERNAME 和 REGISTRY_PASSWORD 環境變數設定為身份驗證憑據。然後,容器內部執行的 Docker 守護程式可以使用這些變數來對倉庫進行身份驗證。

Docker Compose .env 檔案

Docker Compose 允許您在 .env 檔案中定義環境變數,該檔案會在您執行 docker-compose 命令時自動載入。以下是一個示例:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      env_file:
         - .env

在此示例中,我們使用 env_file 指令載入 .env 檔案中定義的環境變數。以下是 .env 檔案可能的樣子:

REGISTRY_USERNAME=username
REGISTRY_PASSWORD=password

此方法類似於在 YAML 檔案中直接使用環境變數,但它允許您將憑據儲存在單獨的檔案中。

示例

使用 Docker Config.json 檔案訪問私有倉庫

假設我們在 Docker Hub 上託管了一個私有倉庫,並且想要在 Docker Compose 檔案中使用它。我們將首先建立一個包含身份驗證憑據的 config.json 檔案:

{
   "auths": {
      "https://index.docker.io/v1/": {
         "auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
		}
	}
}

在此示例中,我們使用 base64 編碼的字串來儲存身份驗證憑據。字串由使用者名稱和密碼組成,用冒號分隔並進行編碼。

現在,讓我們建立一個使用私有倉庫的 Docker Compose 檔案:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      volumes:
         - $HOME/.docker/config.json:/root/.docker/config.json

在此示例中,我們定義了一個名為“app”的服務,該服務使用來自私有倉庫的映象“myprivaterepo/myapp”。我們還將 config.json 檔案作為卷掛載到容器中,以便容器內部執行的 Docker 守護程式可以訪問憑據。

要執行此 Docker Compose 檔案,可以使用以下命令:

docker-compose up

這將啟動“app”服務並從私有倉庫拉取映象。

使用環境變數訪問私有倉庫

假設我們在自託管登錄檔上託管了一個私有倉庫,並且想要在 Docker Compose 檔案中使用它。我們將首先將身份驗證憑據設定為環境變數:

export REGISTRY_USERNAME=username
export REGISTRY_PASSWORD=password

現在,讓我們建立一個使用私有倉庫的 Docker Compose 檔案:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      environment:
         - REGISTRY_USERNAME=$REGISTRY_USERNAME
         - REGISTRY_PASSWORD=$REGISTRY_PASSWORD

在此示例中,我們定義了一個名為“app”的服務,該服務使用來自私有倉庫的映象“myprivaterepo/myapp”。我們還將 REGISTRY_USERNAME 和 REGISTRY_PASSWORD 環境變數設定為身份驗證憑據。

要執行此 Docker Compose 檔案,可以使用以下命令:

docker-compose up

這將啟動“app”服務並從私有倉庫拉取映象。

  • 使用 Docker Compose .env 檔案訪問私有倉庫

假設我們在自託管登錄檔上託管了一個私有倉庫,並且想要在 Docker Compose 檔案中使用它。我們將首先建立一個包含身份驗證憑據的 .env 檔案:

REGISTRY_USERNAME=username
REGISTRY_PASSWORD=password

現在,讓我們建立一個使用私有倉庫的 Docker Compose 檔案:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      env_file:
         - .env

在此示例中,我們定義了一個名為“app”的服務,該服務使用來自私有倉庫的映象“myprivaterepo/myapp”。我們還使用 env_file 指令載入 .env 檔案中定義的環境變數。

要執行此 Docker Compose 檔案,可以使用以下命令:

docker-compose up

這將啟動“app”服務並從私有倉庫拉取映象。

使用 Docker 配置訪問私有倉庫

如果在 Swarm 上執行 Docker,則可以使用 Docker 配置來儲存身份驗證憑據。要在 Docker Compose 中使用 Docker 配置,需要建立一個包含身份驗證憑據的配置檔案:

echo "password" | docker secret create registry_password -
echo "username" | docker secret create registry_username -

現在,讓我們建立一個使用私有倉庫的 Docker Compose 檔案:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp
      secrets:
         - registry_username
         - registry_password

在此示例中,我們定義了一個名為“app”的服務,該服務使用來自私有倉庫的映象“myprivaterepo/myapp”。我們還使用 secrets 指令將 registry_username 和 registry_password 金鑰載入到容器中。

要執行此 Docker Compose 檔案,可以使用以下命令:

docker-compose up

這將啟動“app”服務並從私有倉庫拉取映象。

使用 Docker 構建訪問私有倉庫

如果正在構建使用私有倉庫的 Docker 映象,則可以使用 Docker build 來對私有倉庫進行身份驗證。以下是一個示例:

docker build --build-arg REGISTRY_USERNAME=username --build-arg REGISTRY_PASSWORD=password -t myprivaterepo/myapp .

在此示例中,我們正在構建一個名為“myprivaterepo/myapp”的映象,該映象使用私有倉庫。我們使用 --build-arg 將身份驗證憑據作為構建引數傳遞。

構建映象後,可以在 Docker Compose 檔案中使用它:

version: '3.8'

services:
   app:
      image: myprivaterepo/myapp

在此示例中,我們定義了一個名為“app”的服務,該服務使用來自私有倉庫的映象“myprivaterepo/myapp”。

要執行此 Docker Compose 檔案,可以使用以下命令:

docker-compose up

這將啟動“app”服務並使用來自私有倉庫的映象。

結論

在 Docker Compose 中使用私有倉庫可能具有挑戰性,但有幾種可用的身份驗證方法可以簡化對映象的訪問。在本文中,我們探討了如何在 Docker Compose 中使用私有倉庫,涵蓋了不同的身份驗證方法及其示例。透過遵循這些示例,您可以輕鬆地對私有倉庫進行身份驗證並在 Docker Compose 中使用您的映象。

更新於: 2023-03-24

5K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告