如何创建包含 public 和私有图像的 docker-compose.yml 文件?

How to create a docker-compose.yml file with both public and private images?

我正在尝试为工作中的特定开发人员团队创建一个 docker-compose.yml 文件。我已将我们的私有映像推送到私有注册表 (Azure Container Registry),即 ok/working :)

接下来,我将尝试测试如何让这个特定团队的开发人员访问 运行 docker-compose 文件,该文件将下载所有图像,然后启动它们。

我发现开发人员需要这样做:

-> docker login -u <admin username of my registry> <domain of the registry>
-> docker-compose pull

这会拉下我的私人图像(来自 ACR 私人注册表),但不会拉下 docker 中心(public 注册表)中的任何图像。

这是我的示例 docker-compose 文件的片段,其中包含 public 和私有图像。请注意我是如何尝试完全限定图像域的...

version: '3.5'

services:

ravendb.data:
  image: hub.docker.com/ravendb/ravendb
  expose: 
    - "8080"
  networks:
    - backend
  container_name: ravendb.data
  labels:
    - "traefik.enable=false"

accounts.api:
  image: <snip>.azurecr.io/<snip>/<snip>
  networks:
<rest all snipped>

Q1 - 两个问题,有些相关 -

  1. RavenDB image 指令中的 Docker Hub 注册表 FQDN 错误 - hub.docker.com 是人类可读的网站,public Docker 注册表位于 registry.hub.docker.comindex.docker.io(将 v1 附加到这些 uri 以获得 API)。

  2. 您不需要完整的 public 注册表 FQDN 即可从 public 注册表中拉取 - 它是默认设置,并且 docker 命令将默认拉取如果他们没有在图像名称前面的图像标签中检测到 FQDN,则从那里开始。

Q2 - 我不确定 Azure 容器注册表的工作原理,但如果您无法创建只读用户,我会感到很惊讶。普通注册表是一个基于 REST 的 API 服务器,可以通过在内部设置其权限或通过在其前面放置一个反向代理来控制 POST/PUT/DELETE 和需要不同授权用户的 PATCH 动词到 GET 动词。