使用 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+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告