介绍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守护进程就可以访问存储在文件中的凭据。
环境变量some private repositories support authentication via environment variables. this method is useful when you don't want to expose your credentials in a config file. here's an example −
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=usernameregistry_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=usernameexport 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=usernameregistry_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
in this example, we're defining a service called app that uses image myprivaterepo/myapp from our private repository. we're also using secrets directive to load registry_username and registry_password secrets into container.
要运行此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中使用您的镜像。
以上就是使用docker-compose与私有仓库的详细内容。