使用私有注册表创建Docker映像层次结构
TL;DR如果父映像位于私有注册表中,您必须从命令将您的私有Docker URI放入Dockerfile使用私有注册表创建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
中吗?
我认为这应该是一个容易回答的问题,但找不到一组好的谷歌关键词
详情:
我有三个回购协议,都是通过单独的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/