Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用私有注册表创建Docker映像层次结构_Docker_Dockerfile_Docker Registry - Fatal编程技术网

使用私有注册表创建Docker映像层次结构

使用私有注册表创建Docker映像层次结构,docker,dockerfile,docker-registry,Docker,Dockerfile,Docker Registry,TL;DR如果父映像位于私有注册表中,您必须从命令将您的私有Docker URI放入Dockerfile中吗? 我认为这应该是一个容易回答的问题,但找不到一组好的谷歌关键词 详情: 我有三个回购协议,都是通过单独的CI调用构建的;这些CI的执行顺序对于此DAG是正确的(即,当子映像需要时,父映像将可用): Repo 1保存一个Dockerfile,该Dockerfile构建了一个具有依赖关系的基础映像。它移动缓慢 Repo 2&3保留Dockerfile中内置的应用程序,该Dockerfile

TL;DR如果父映像位于私有注册表中,您必须从命令将您的私有Docker URI放入Dockerfile
中吗?

我认为这应该是一个容易回答的问题,但找不到一组好的谷歌关键词

详情:

我有三个回购协议,都是通过单独的CI调用构建的;这些CI的执行顺序对于此DAG是正确的(即,当子映像需要时,父映像将可用):

  • Repo 1保存一个Dockerfile,该Dockerfile构建了一个具有依赖关系的基础映像。它移动缓慢
  • Repo 2&3保留Dockerfile中内置的应用程序,该Dockerfile从Repo 1中内置的映像中提取
    。这些变化频繁
据我所知,如果您没有在
FROM
命令中指定repo URI,docker会假定您是从DockerHub中提取的。这是正确的吗


如果这些映像存储在私有注册表中,那么私有注册表是否必须显式包含在子DockerFile中?还有其他方法吗?

您的基本假设是正确的:如果您的基本映像位于私有注册表中,则通常必须在下游DockerFile的
行中包含注册表名,
docker运行
命令,Compose和Kubernetes
映像:
行,等等。如果图像名称的注册表部分不存在,则默认为
docker.io

#扩展到docker.io/library/alpine:latest
来自阿尔卑斯山
这实际上只在本地计算机上没有映像时才起作用,在这种情况下,Docker将自动将其拉入。如果它已经存在,Docker就不必担心它来自哪里,只需按原样使用它。如果您有一个手动多阶段构建,但实际上没有将任何中间阶段推送到任何地方,那么是否为任何特定的存储库标记它实际上并不重要

#“步骤2”Dockerfile
#buildwith:`docker Build-t step2-f step2.Dockerfile`
#从内部存储库中的图像开始
来自registry.example.com/img/step1
#应用程序摘要文件
#取决于首先构建的“步骤2”映像
#因为我们希望step2:最新的图像在本地显示,所以不会拉
从步骤2开始

Docker在您的本地存储库中查找映像名称,如果在那里找不到映像,它将从Docker中心提取

乍一看,我们应该能够将私有存储库配置为默认存储库,然后像使用docker hub一样使用它,这感觉很直观。 然而,这似乎是一个冗长的讨论话题,你可以跟着讨论

不幸的是,在撰写本文时,要从私有回购构建,您需要在
Dockerfile
中指定完整的URI:

FROM <aws_account_id>.dkr.ecr.<aws region>.amazonaws.com/<private image name>:latest
然后去

docker build .
或者,您可以使用参数来构造ECR URI。这将使Dockerfile中的内容保持干净和参数化,同时明确表示您正在使用私有回购。 如: 在您的
Dockerfile

ARG PRIVATE_REPO
FROM ${PRIVATE_REPO}your_image_name
并使用以下内容构建docker映像:

docker build . --build-arg PRIVATE_REPO=aws_account_id.dkr.ecr.region.amazonaws.com/
docker build . --build-arg PRIVATE_REPO=aws_account_id.dkr.ecr.region.amazonaws.com/