将 docker-compose 与私有存储库结合使用

dockerdatabasemysql

简介

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 中使用您的镜像。


相关文章