使用 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 中使用您的映象。