推送到ECR时,Docker映像的大小与本地映像不同

时间:2019-03-10 12:31:13

标签: amazon-web-services docker aws-batch amazon-ecr

我在本地计算机上有一个1.46GB的docker映像,但是当将其推送到AWS ECR(通过本地计算机或通过CicleCI部署)时,它只有537.05MB。我对Docker和AWS来说还很陌生,所以在弄清为什么这样做的任何帮助将不胜感激!

由于某种原因,我有种感觉它没有完全上传到ECR,因为我正试图将此容器用于批处理作业,但是由于某种原因,当在本地使用时,同一命令在本地使用时不起作用工作定义。该命令只是python app.py,但我也尝试过使用绝对路径python /usr/local/src/app/app.py,两者都导致[Errno 2] No such file or directory

在我的Makefile部署中使用的命令如下:

docker build --force-rm=true -t $(EXTRACTOR_IMAGE_NAME) ./extractor
docker tag $(EXTRACTOR_IMAGE_NAME) $(EXTRACTOR_ECR_IMAGE_NAME)
$(shell aws ecr get-login --no-include-email)
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/$(EXTRACTOR_ECR_REPO)

修改1: 我认为这可能与基本图片的大小有关,在这种情况下为python:2.7。基本映像为914MB,再加上我的ECR映像的大小537.05MB = 1451.05MB,即约1.46GB。仍然不知道批处理命令是什么问题...

修改2: 我一直在使用一个卷将代码装载到我的容器中,这就是为什么它一直在本地工作的原因。在构建时,我忘记了将代码复制到容器中,我认为这是无法在批处理中运行的唯一原因!

2 个答案:

答案 0 :(得分:2)

这可能是由于Docker客户端以documented的形式将映像推送到ECR之前的行为:

  

从Docker 1.9版本开始,Docker客户端先压缩图像层,然后再将其推送到V2 Docker注册表。 docker images命令的输出显示未压缩的图像大小,因此它返回的图像大小可能会比AWS管理控制台中显示的图像大小大。

因此,当您拉动图像时,您会注意到图像层经历了三个阶段:

  • 下载
  • 提取
  • 完成

关于此命令:python /usr/local/src/app/app.py在您进入/usr/local/src/app/时正在执行它吗?您可能需要确保首先还要在使用该图像之前先检查该容器内部的命令,因为该错误似乎与代码有关,而不是与Docker问题有关

答案 1 :(得分:1)

我们可以在the AWS ECR documentation中阅读以下内容:

  

注意

     

从Docker 1.9版本开始,Docker客户端先压缩图像层,然后再将其推送到V2 Docker注册表。 docker images 命令的输出显示未压缩的图像大小,因此它返回的图像大小可能比AWS管理控制台中显示的图像大小大。

我怀疑您会获得所需的大小,是否使用CLI(docker images)而不是ECR Web控制台。