将 docker-compose 与私有存储库结合使用
简介
Docker Compose 是一种用于定义和运行多容器 Docker 应用程序的工具。它允许开发人员将其应用程序堆栈定义为 YAML 文件,从而只需几个命令即可轻松启动复杂环境。但是,将私有存储库与 Docker Compose 结合使用可能很棘手。在本文中,我们将探讨如何将 Docker Compose 与私有存储库结合使用,介绍不同的身份验证方法及其示例。
什么是私有存储库?
Docker 映像可以存储在私有或公共存储库中。公共存储库对所有人开放,而私有存储库需要身份验证才能访问。私有存储库通常用于包含不应公开的专有代码或数据的映像。要访问私有存储库,您需要提供身份验证凭据。
将 Docker Compose 与私有存储库结合使用
将 Docker Compose 与私有存储库结合使用时,您需要确保在主机上运行的 Docker 守护程序可以访问存储库。有几种方法可以实现这一点,具体取决于存储库使用的身份验证方法。
身份验证方法
Docker Config.json 文件
Docker 守护程序可以使用 config.json 文件来存储身份验证凭据。可以手动创建此文件或使用 docker login 命令。要将 config.json 文件与 Docker Compose 结合使用,您需要将其作为卷挂载到容器中。以下是示例 −
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 Build 的私有存储库
如果您正在构建使用私有存储库的 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 中使用您的镜像。