如何在运行docker pull时使用不同的基本路径?
我们根据环境将docker映像存储在各种注册表中。例如,dev docker映像存储在https://dev-artifactory/docker-repository/centos:latest,prod docker映像存储在https://prod-artifactory/docker-registry/centos:latest. 由于连接性的挑战,我们正在使用不同的artifactory实例 我们希望在某种环境变量中指定docker映像(dev-artifactory或prod-artifactory)的基本路径,以便我们只需运行如何在运行docker pull时使用不同的基本路径?,docker,Docker,我们根据环境将docker映像存储在各种注册表中。例如,dev docker映像存储在https://dev-artifactory/docker-repository/centos:latest,prod docker映像存储在https://prod-artifactory/docker-registry/centos:latest. 由于连接性的挑战,我们正在使用不同的artifactory实例 我们希望在某种环境变量中指定docker映像(dev-artifactory或prod-art
docker pull centos:latest
,并根据环境类型自动检测dev-artifactory或prod-artifactory
- 这可能吗
- 我们怎么做
docker pull dev-artifactory/docker-repository/centos:latest
docker pull prod-artifactory/docker-registry/centos:latest
注意:这些应该是rigistries。您可以指定完整路径,如:
docker pull dev-artifactory/docker-repository/centos:latest
docker pull prod-artifactory/docker-registry/centos:latest
注意:这些应该是rigistries。对于低级docker CLI来说,这是不可靠的。如果没有注册表前缀,docker和其他容器运行时会假定您想要使用docker Hub。理论上,您可以使用注册表镜像设置配置docker引擎,但这很容易出错(本地注册表中的任何拉取故障都会退回到docker hub),不适用于推送命令,并且会导致docker文件根据其生成的节点的不同而生成不同的文件 因此,在docker CLI中,需要使用以下命令包含该前缀:
docker pull dev-artifactory/docker-repository/centos:latest
我建议在用于自动构建和部署容器的各种配置文件中设置注册表镜像,而不是像设置注册表镜像那样尝试黑客攻击。在构建时,这是作为Dockerfile中的ARG值完成的,位于第一个FROM行之前,因此您可以在构建中指定图像时使用它。例如
ARG REGISTRY=dev-artifactory/docker-repository
FROM ${REGISTRY}/centos:latest
对于正在运行的容器,请在docker-compose.yml文件中使用一个变量。例如
version: 2
services:
app:
image: ${REGISTRY:-dev-artifactory/docker-repository}/app:latest
....
与kubernetes类似,为注册表添加前缀将使用处理yml文件的工具完成,例如envsubst、helm或kustomize。对于低级docker CLI来说,这是不可靠的。如果没有注册表前缀,docker和其他容器运行时会假定您想要使用docker Hub。理论上,您可以使用注册表镜像设置配置docker引擎,但这很容易出错(本地注册表中的任何拉取故障都会退回到docker hub),不适用于推送命令,并且会导致docker文件根据其生成的节点的不同而生成不同的文件 因此,在docker CLI中,需要使用以下命令包含该前缀:
docker pull dev-artifactory/docker-repository/centos:latest
我建议在用于自动构建和部署容器的各种配置文件中设置注册表镜像,而不是像设置注册表镜像那样尝试黑客攻击。在构建时,这是作为Dockerfile中的ARG值完成的,位于第一个FROM行之前,因此您可以在构建中指定图像时使用它。例如
ARG REGISTRY=dev-artifactory/docker-repository
FROM ${REGISTRY}/centos:latest
对于正在运行的容器,请在docker-compose.yml文件中使用一个变量。例如
version: 2
services:
app:
image: ${REGISTRY:-dev-artifactory/docker-repository}/app:latest
....
与kubernetes类似,为注册表添加前缀将使用处理yml文件的工具来完成,例如envsubst、helm或kustomize。Docker注册表与nexus或npm注册表的不同之处在于,正如您所注意到的,拉/推操作必须在映像前面添加注册表主机名才能正常工作。
因此,在同一家公司内使用具有不同主机名的私有注册中心会使配置/日常任务变得更大、更容易出错且更不标准。
如果我能避免的话,我会避免的 如果我真的需要使用多个注册表,BMitch建议我申请 由于连接性的原因,我们正在使用不同的artifactory实例 挑战 在这种情况下,我将使用缩放解决方案,而不是使用具有不同配置的不同注册表。
可以创建专用docker注册表 高可用性和可扩展性 可以针对同一存储运行多个容器 出于性能和可用性方面的原因,支持后端 下面是一个使用共享s3存储后端、Redis缓存和 MySQL搜索数据库(所有数据库都应该是通用的 一致性)
Docker注册表与nexus或npm注册表的不同之处在于,正如您所注意到的,拉/推操作必须在映像前面加上注册表主机名,才能按预期工作。
因此,在同一家公司内使用具有不同主机名的私有注册中心会使配置/日常任务变得更大、更容易出错且更不标准。
如果我能避免的话,我会避免的 如果我真的需要使用多个注册表,BMitch建议我申请 由于连接性的原因,我们正在使用不同的artifactory实例 挑战 在这种情况下,我将使用缩放解决方案,而不是使用具有不同配置的不同注册表。
可以创建专用docker注册表 高可用性和可扩展性 可以针对同一存储运行多个容器 出于性能和可用性方面的原因,支持后端 下面是一个使用共享s3存储后端、Redis缓存和 MySQL搜索数据库(所有数据库都应该是通用的 一致性)
该问题专门询问如何在不将注册表名包含在图像标记中的情况下执行此操作。该问题专门询问如何在不将注册表名包含在图像标记中的情况下执行此操作。